自动化监控--zabbix中的Macros(宏)详解

Zabbix支持许多在多种情况下使用的宏。宏是一个变量,由如下特殊语法标识:

{MACRO} 

根据在上下文中, 宏解析为一个特殊的值。有效地使用宏可以节省时间,并使Zabbix变地更加高效。

在一个的典型用途中,宏可以用于模板中。因此,模板的触发器可能命名为Processor load is too high on {HOST.NAME}。当这个模板应用与主机(如 Zabbix Server )时,并且当触发器展示在监控页面上时,触发器的名称讲解析为Processor load is too high on Zabbix server

宏可以在监控项键值参数中使用。宏只能用在监控项键值参数的一部分中,例如item.key[server_{HOST.HOST}_local] 。双引号参数不是必须的,因为Zabbix将处理任何模糊不清的特殊参数(如果这些参数存在于已解析的宏中)。

宏函数

宏函数能提供自定义宏值的功能。

有时候宏可能会解析为一个不一定易于使用的值。它可能很长,或包含你想提取的一个特殊感兴趣的子字符串。这在宏函数中是可以使用的。
宏函数的语法为:

{.()}
其中:

 - 这个参数为要定义的宏 (例如 {ITEM.VALUE});
 - 要应用的函数;
 - 以逗号分隔的函数参数列表。如果他们以 (空格), " 或者包含 ), ,这些符号开始,则参数必须要引用。
例如:

{{ITEM.VALUE}.regsub(pattern, output)}

用户宏

概述

除了支持开箱即用的宏之外,Zabbix 还支持更灵活的用户宏。

用户宏可以在全局、模板和主机级别进行定义。这些宏具有一个特殊的语法:

{$MACRO}

用户宏可被用于:

  • 监控项名称;
  • 监控项键值参数;
  • 触发器名称和描述;
  • 触发器表达式参数和常量
  • 许多其他位置

宏名称中允许使用以下字符:A-Z , 0-9 , _ , . 。

Zabbix 根据以下优先级解析宏:

  1. 主机级别的宏 (首先检查);
  2. 为主机的第一级别模板定义的宏(即,直接链接到主机的模板),按照模板 ID 来排序;
  3. 为主机的第二级别模板定义的宏,按照模板 ID 来排序;
  4. 为主机的第三级别模板定义的宏,按照模板ID来排序,等;
  5. 全局宏 (最后检查)。

换言之,如果一个主机不存在一个宏, Zabbix 将会尝试在级别递增的主机模板中找到它,如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。

如果 Zabbix不能找到宏, 那么宏将不能被解析。
Administration → General → Macros
如果要定义用户宏,转到Zabbix的web页面的如下位置:

  • 对于全局宏,请访问 Administration → General → Macros;
    自动化监控--zabbix中的Macros(宏)详解_第1张图片
  • 对于主机和模板级别的宏,打开主机或模板属性并查看 宏 标签页面。
    自动化监控--zabbix中的Macros(宏)详解_第2张图片
    注意:如果在模板的监控项或触发器使用用户宏,建议将该宏添加到模板,即使它被定义在全局级别上。这样的话,将模板导出至XML文件中,之后在其他系统中导入,那么在其他系统中使用也将会达到预期的使用效果。

全局和主机宏的常用案例

  • 利用具有主机特定属性的模板:密码、端口号、文件名称、正则表达式等;
  • 运用全局宏进行全局的一键配置更改或微调。

示例1
在 “Status of SSH daemon” 监控项键值中使用主机级别的宏:

net.tcp.service[ssh,,{$SSH_PORT}]

该监控项可以分配给多个主机,前提是在这些主机上定义了 {$SSH_PORT} 的值。
示例 2

在 “CPU load is too high” 触发器上使用主机级别的宏:

{ca_001:system.cpu.load[,avg1].last()}>{$MAX_CPULOAD}

这样的触发器将会在模板上创建,而不会在单个主机中编辑。

如果要使用数值作为函数参数
注意:如果要使用数值作为函数参数(例如,max(#3)),则在宏定义中要包含井号(hash mark)例如:SOME_PERIOD ⇒ #3

示例 3

在“CPU load is too high”触发器中使用了两个宏:

{ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD}

请注意,宏可以用作触发器函数的参数,在这个示例中为 min() 。
注意:在触发器表达式中,如果引用参数或者常量,则用户宏将会解析。如果引用主机、监控项键值、函数、操作或其他触发器表达式的话,他们将不会解析。

------做运维之前很矫情的小年轻-----

你可能感兴趣的:(zabbix)