宏
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将处理任何模糊不清的特殊参数(如果这些参数存在于已解析的宏中)。
宏函数
宏函数能提供自定义宏值的功能。
有时候宏可能会解析为一个不一定易于使用的值。它可能很长,或包含你想提取的一个特殊感兴趣的子字符串。这在宏函数中是可以使用的。
宏函数的语法为:
{<macro>.<func>(<params>)}
其中:
<macro> - 这个参数为要定义的宏 (例如 {ITEM.VALUE});
<func> - 要应用的函数;
<params> - 以逗号分隔的函数参数列表。如果他们以 (空格), " 或者包含 ), ,这些符号开始,则参数必须要引用。
例如:
{{ITEM.VALUE}.regsub(pattern, output)}
用户宏
概述
除了支持开箱即用的宏之外,Zabbix 还支持更灵活的用户宏。
用户宏可以在全局、模板和主机级别进行定义。这些宏具有一个特殊的语法:
{$MACRO}
用户宏可被用于:
- 监控项名称;
- 监控项键值参数;
- 触发器名称和描述;
- 触发器表达式参数和常量
- 许多其他位置
宏名称中允许使用以下字符:A-Z , 0-9 , _ , . 。
Zabbix 根据以下优先级解析宏:
- 主机级别的宏 (首先检查);
- 为主机的第一级别模板定义的宏(即,直接链接到主机的模板),按照模板 ID 来排序;
- 为主机的第二级别模板定义的宏,按照模板 ID 来排序;
- 为主机的第三级别模板定义的宏,按照模板ID来排序,等;
- 全局宏 (最后检查)。
换言之,如果一个主机不存在一个宏, Zabbix 将会尝试在级别递增的主机模板中找到它,如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。
如果 Zabbix不能找到宏, 那么宏将不能被解析。
Administration → General → Macros
如果要定义用户宏,转到Zabbix的web页面的如下位置:
- 对于全局宏,请访问 Administration → General → Macros;
- 对于主机和模板级别的宏,打开主机或模板属性并查看 宏 标签页面。
注意:如果在模板的监控项或触发器使用用户宏,建议将该宏添加到模板,即使它被定义在全局级别上。这样的话,将模板导出至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() 。
注意:在触发器表达式中,如果引用参数或者常量,则用户宏将会解析。如果引用主机、监控项键值、函数、操作或其他触发器表达式的话,他们将不会解析。
------做运维之前很矫情的小年轻-----