Zabbix触发器中同一监控项的ITEM.VALUE1与VALUE2值一致问题咨询
问题场景
为监控域名www.a.com的IP地址变化,设置的触发器表达式为:
last(/Zabbix server/check.ip[www.a.com])<>last(/Zabbix server/check.ip[www.a.com],#2)
自定义告警消息模板:
TITLE:{EVENT.NAME} IP CHANGE:{ITEM.VALUE2} ==> {ITEM.VALUE1} EVENT TIME:{EVENT.DATE} {EVENT.TIME} EVENT ID:{EVENT.ID}
实际触发告警时,{ITEM.VALUE1}和{ITEM.VALUE2}始终返回相同的最新IP值,因此疑问:当触发器表达式中仅使用同一监控项时,{ITEM.VALUE<1-9>}是否都会获取该监控项的最新值?
解答
是的,当触发器表达式里仅引用同一个监控项实例时,{ITEM.VALUE1}到{ITEM.VALUE9}都会返回该监控项的最新值,不会区分你在触发器中使用的是last(#1)还是last(#2)这类不同历史位置的取值。
Zabbix的{ITEM.VALUE<n>}变量是按照触发器表达式中不同监控项的出现顺序来赋值的,而非同一监控项的不同历史值位置。比如触发器里包含两个独立监控项A和B,{ITEM.VALUE1}对应A的值,{ITEM.VALUE2}对应B的值;但如果是同一个监控项多次重复引用,所有VALUE<n>变量都会指向该监控项的最新采集值。
解决方法
方案一:新增独立监控项
创建两个监控项:一个用于采集当前IP(例如check.current.ip[www.a.com]),另一个用于采集上一次的IP(可通过history函数或设置延迟采集规则实现)。触发器改为对比这两个不同监控项的值,此时告警消息里的{ITEM.VALUE1}和{ITEM.VALUE2}就能分别对应新旧IP值。方案二:直接调用历史值变量
无需新增监控项,在告警消息模板里使用{ITEM.LASTVALUE(#1)}和{ITEM.LASTVALUE(#2)},分别获取该监控项的最新值和上一次历史值,修改后的消息模板示例:TITLE:{EVENT.NAME} IP CHANGE:{ITEM.LASTVALUE(#2)} ==> {ITEM.LASTVALUE(#1)} EVENT TIME:{EVENT.DATE} {EVENT.TIME} EVENT ID:{EVENT.ID}
内容的提问来源于stack exchange,提问作者qiang shui

