Zabbix 6日志监控配置调整及新增触发规则咨询
Zabbix 6日志监控配置调整及新增触发规则咨询
看起来你现在的配置是在整个日志文件里搜索"ERROR"触发告警,想要改成只检查日志最后一行是否包含"ERROR",同时还要添加一个当"INFO"出现时解决问题的触发规则对吧?我来帮你一步步调整:
一、修改触发器,仅监控最后一行的"ERROR"
你当前的触发器表达式是统计日志中所有匹配"ERROR"的行数,要改成仅检查最新一行的内容,只需要把count()函数换成last()结合匹配判断即可:
last(/Linux Azure Waagent/log[/var/log/waagent.log,,,,skip]) matches "ERROR"
这个表达式的作用是:获取log[/var/log/waagent.log,,,,skip]监控项的最新一条日志记录(也就是日志的最后一行),判断其中是否包含"ERROR"字符串,如果匹配就触发告警。
如果想更严谨地匹配独立的"ERROR"单词(避免误匹配"ERRORCODE"这类包含ERROR的字符串),可以用正则优化:
last(/Linux Azure Waagent/log[/var/log/waagent.log,,,,skip]) matches "\bERROR\b"
二、添加当"INFO"出现时的问题恢复规则
你提到希望当"INFO"打印时解决问题,这里应该是指出现特定INFO日志时自动恢复之前的ERROR告警吧?
Zabbix支持为触发器设置恢复表达式,不需要单独创建新触发器,直接在刚才的ERROR触发器里配置即可:
- 编辑你的ERROR触发器,找到"Recovery expression"(恢复表达式)字段
- 填入以下表达式:
last(/Linux Azure Waagent/log[/var/log/waagent.log,,,,skip]) matches "INFO"
这样设置后,当日志最后一行出现"INFO"时,之前触发的ERROR告警就会自动恢复为正常状态。
如果需要匹配特定的INFO内容(比如某个具体的恢复完成信息),可以用正则精准匹配:
last(/Linux Azure Waagent/log[/var/log/waagent.log,,,,skip]) matches "INFO: .*recovery completed"
补充小提示
- 你的
log[/var/log/waagent.log,,,,skip]监控项里的skip参数是对的,它会跳过已处理过的日志行,只读取新增内容,很适合实时监控场景。 - 如果日志更新频率很高,可以适当调整监控项的更新间隔,避免不必要的性能消耗。
备注:内容来源于stack exchange,提问作者gotothesky




