zabbix监控中会在多处用到宏变量(macros),这会使配置更方便简洁有效。
zabbix支持的宏变量有很多,官网文档支持列表:
https://www.zabbix.com/documentation/2.0/manual/appendix/macros/supported_by_location#zabbix本身支持的宏变量
Macros with numbers <1-9> like {MACRO1}, {MACRO2}…{MACRO9} allow to reference hosts in the order in which they appear in a trigger expression. So, {HOST.IP1} and {HOST.IP2} will expand to the IPs of the first and second host in the trigger expression. #宏变量可以和数字合用,表示主机在触发器表达式中出现的顺序位置
在自动发现中使用的宏有固定的语法:{#MACRO}
这种宏用于low-leveldiscovery中可以返回真正的文件系统名字,网络接口,以及snmpOIDs
Some low-level discovery macros come “pre-packaged” with the LLD funtion in Zabbix - {#FSNAME}, {#FSTYPE}, {#IFNAME}, {#SNMPINDEX}, {#SNMPVALUE}. However, adhering to these names is not compulsory when creating a custom low-level discovery rule. Then you may use any other LLD macro name and refer to that name.
对于更大的灵活性,zabbix支持用户自定义的宏,这些自定义的宏也有特定的语法:{$MACRO}
宏的级别有多种:其优先级如下。
1.host level macros (checked first)#主机级别的宏优先级最高 2.macros defined for first level templates of the host (i.e., templates linked directly to the host), sorted by template ID#第一级模板中的宏 3.macros defined for second level templates of the host, sorted by template ID#第二级模板中的宏 4.macros defined for third level templates of the host, sorted by template ID 5.… 6.global macros (checked last)#全局级别的宏
#总结:如果在主机级别不存在宏设置,那么zabbix就会去模板中看是否设置有宏。如果模板中也没有,将会查找使用全局的宏。 #若是在各级别都没找到宏,将不使用宏 #创建自定义宏的步骤是: 管理---一般--宏(定义全局宏) 模板和主机在创建时会有设置宏的地方 If a user macro is used in items or triggers in a template, it is suggested to add that macro to the template even if it is defined on a global level. That way, exporting the template to XML and importing it in another system will still allow it to work as expected.
通常使用宏的地方:
1.taking advantage of templates with host specific attributes: passwords, port numbers, file names, regular expressions, etc 2.global macros for global one-click configuration changes and fine tuning
#举例: Use of host-level macro in the “Status of SSH daemon” item key: net.tcp.service[ssh,{$SSH_PORT}] This item can be assigned to multiple hosts, providing that the value of {$SSH_PORT} is defined on those hosts. Example 2 Use of host-level macro in the “CPU load is too high” trigger: {ca_001:system.cpu.load[,avg1].last(0)}>{$MAX_CPULOAD} Such a trigger would be created on the template, not edited in individual hosts. If you want to use amount of values as the function parameter (for example, max(#3)), include hash mark in the macro definition like this: SOME_PERIOD #3 Example 3 Use of two macros in the “CPU load is too high” trigger: {ca_001:system.cpu.load[,avg1].min({$CPULOAD_PERIOD})}>{$MAX_CPULOAD} Note that a macro can be used as a parameter of trigger function, in this example function min(). User macros in a trigger expression will be expanded if referencing a parameter or a constant. They are NOT supported for referencing the host name, item key, function or operator.
宏和正则表达式: