我是 zabbix 的新手。我有一个使用 zabbix 监控不同日志消息发生的基本要求。比如说,当有日志消息时"server starting"
,zabbix 应该显示该警报。这个想法是,如果服务器在过去 10 分钟内(重新)启动 10 次,zabbix 仪表板(或任何其他地方)应该显示 10 次。
我为此做了以下工作:
Run Code Online (Sandbox Code Playgroud)Type : Zabbix Agent (Active) key : log[/opt/mylog/logs/abc.log,server starting] Type of information : Log Update Interval (in sec) : 30
{MyTemplate:log[/opt/mylog/logs/abc.log,服务器启动].logeventid(1)}=0
使用 logeventid(1),我看到警报(触发器)只生成一次。它在Dashboard --> Last 20 issues
. 如果我转到Monitoring --> Trigger
,我只会看到一次警报,尽管日志文件有 10 个消息条目"server starting"
(服务器重新启动了 10 次)。
然后我将触发器设置为以下:
{MyTemplate:log[/opt/mylog/logs/abc.log,服务器启动].nodata(300)}=0
现在,在Monitoring --> Trigger
,我看到警报(触发)10 次,但是,Dashboard --> Last 20 issues
在 300 秒后它就消失了。
我的问题是:
我应该使用什么触发功能?如果同一消息在一段时间内在日志文件中出现 10 次,我想在 zabbix 中看到 10 个警报。
使用 nodata(300),为什么警报在 300 秒后消失?
如果我使用 30 分钟而不是 300 秒作为 nodata() 的参数可以吗?
函数logeventid()
通常用于 Windows 和 VMware 事件日志。在这种情况下,它可能不应该被使用并且它被触发是可疑的,这可能表明 Zabbix 中存在错误。
无论如何,您可以在触发器配置中选中“多个问题事件生成”框,每次条件为真时,触发器都会生成一个新的问题事件,无论其先前的值如何。代替logeventid()
,您可以尝试使用始终为真的函数,例如strlen()>0
。
如果您希望触发器在一段时间后进入 OK 状态,例如 10 分钟,您可以添加nodata(10m)
. 然后您的触发器将如下所示:
{MyTemplate:log[/opt/mylog/logs/abc.log,server starting].strlen()}>0 and
{MyTemplate:log[/opt/mylog/logs/abc.log,server starting].nodata(10m)}=0
Run Code Online (Sandbox Code Playgroud)