zabbix宏(macro)使用:自定义监控阈值
一.简单应用场景
zabbix在监控cpu load时并没有考虑客户端cpu的个数和核心数量,当平均5分钟的负载达到5时zabbix执行报警动作,这样是非常不合理的,笔者的被监控机器有四核和单核,现在单核机器我希望阈值仍然是5,四核机器192.168.17.107上调为10,怎么办呢?用宏变量可以很好的解决这个问题
二.宏介绍
宏是一种抽象概念(Abstraction),它根据一些列预定义的规则替换一定的文本模式,而解释或编译器在遇到宏时会自动进行这一模式替换。类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本。
zabbix宏变量优先级:
- 主机宏(checked first)
- 主机模板定义的宏,如果有多个模板,那么按照模板越靠前那么宏的优先级越高
- 全局宏(checked last)
换句话说,zabbix找一个宏的值,首先检查hosts有没有,如果没有那么找当前主机的第一个模板,如果还不在找第二个模板,一直到最后一个模板,如果还是没有找到那将会使用全局宏。如果全局宏也不存在,那么宏变量不会被替换掉。
自定义宏
定义全局宏, Administration → General → Macros,zabbix3.2中已有的全局宏名称{$SNMP_COMMUNITY},值public
定义主机/模板级宏变量,编辑主机或者模板,找到Macros选项卡,定义宏变量
宏变量经常用于替代账号、端口、密码等,例如你的某个监控想有用到账号、密码,可以定义为宏,假如下次账号密码有修改,只需要修改宏即可。而不需要每个监控项都去修改账号密码。
宏的命名规范:大写字母、数组、下划线的组合,只能大写字母开头。
内置{MACRO} 不需要加$就可以引用:
zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
三.宏变量使用
3.1 上调四核机器192.168.17.107cpu load阈值到10
3.2 设置单核机器cpu load阈值为5
Template OS Windows模板的cpu load阈值已经从5被改动为宏变量,这将会影响其他使用这个模板的主机,使用该模板的主机都得像四核机器一样单独设置一个宏变量,是不是十分不方便?
其实可直接在模板中定义一个宏变量,这样zabbix在找不到主机宏时就会自动使用模板宏。