我已经在 zabbix 中设置了一个项目来监控 zabbix 客户端上的日志文件:
log["/var/log/program_name/client.log","ERROR:","UTF-8",100]
并且有一个触发器来确定日志文件何时出现更多错误:
{Template_Linux:log["/var/log/program_name/client.log","ERROR:","UTF-8",100].change(0)}#0
当日志文件第一次出现错误时,此触发器会被触发,但随后第一个触发器将永远停留在监控->触发器中。我的理解是,下次服务器检查 log["/var/log/program_name/client.log","ERROR:","UTF-8",100] 的值并发现它没有改变时,触发器就会消失。显然事实并非如此。有人能解释一下为什么第一个触发器不会消失吗?
最终,我的目标是每当日志文件中添加错误时收到一封电子邮件,但我想首先了解触发器的工作原理。
答案1
“log”代理项默认检查整个日志,您必须告诉它使用“skip”模式以避免处理较旧的数据。只需在日志项的参数末尾添加“,skip”即可。仔细检查文档中的此页面。
答案2
模板项目和触发器看起来都不错。
- 附加到该主机的项目是原始模板项目吗,或者您是否克隆了它并做了一些更改?
- 该项目是否被正确更新?(检查监控|最新数据)?
.change(0) 的行为正如您预期的那样,如果最后一个字符串和前一个字符串不同,它将返回 1。
出于调试目的,请尝试以下操作:
{Template_Linux:log["/var/log/program_name/client.log","ERROR:","UTF-8",100].last(0)}#{Template_Linux:log["/var/log/program_name/client.log","ERROR:","UTF-8",100].prev(0)}