2022 Zabbix中国峰会
2022 Zabbix中国峰会

1 触发器事件关联

概述

基于触发器的事件关联允许关联一个触发器产生的不同问题。

通常,在Zabbix中正常事件会关闭一个触发器生成的所有问题事件,但在某些情况下需要更加详细的方法。例如,当监控日志文件时,你可能想在日志文件中某些问题并将单独关闭,而不是全部关闭。

触发器的问题事件生成模式参数设置为多重的情况,通常用于日志监控、trap处理等。

在Zabbix中可以根据标签关联问题事件。标签用于提取值并创建问题标识。利用这一点,也可以根据匹配标签单独关闭问题。

换言之,相同的触发器可以通过事件标签创建不同事件。因此,可以通过事件标签逐个创建问题事件,并通过事件标签单独关闭事件。

工作原理

日志监控中,你可能遇到类似如下行:

1: 应用1停止
       2:应用2停止
       3:应用1重启
       4:应用2重启

事件关联的目标是能够匹配行1的问题事件和行3的恢复事件,行2的问题事件和行4的恢复事件,并逐个关闭这些问题事件:

1:应用1停止
       3:应用1重启#行1 问题关闭
       
       2:应用2 停止
       4: 应用2重启 #行2问题关闭

为此,你需要对这些关联的事件进行标记,例如,"Application 1" 和 "Application 2"。这个过程可以通过在日志行上使用正则表达式获取标签值来完成,然后,当事件创建时,他们被分别标记为 "Application 1" 和 "Application 2",这样问题就可以与解决方案进行匹配。

配置

监控项

首先,你需要设置一个监控日志文件的监控项,例如:

log[/var/log/syslog]

当监控项设置完成时,等待加载配置更改约一分钟,然后去 最新数据中确保监控项开始采集数据。

触发器

你需要在监控项工作时配置触发器。日志文件中哪些内容值得关注是非常重要的。例如,下面触发器表达式将搜索’Stopping'字符串来标记潜在问题:

find(/My host/log[/var/log/syslog],,"regexp","Stopping")=1 

为确保包含字符串‘Stopping'的每行都视为问题,需在触发器问题事件生成模式 中设置为 '多重’。

然后定义恢复表达式,以下恢复表达式表示当日志行中发现包含"Starting"字符串,则恢复所有问题:

find(/My host/log[/var/log/syslog],,"regexp","Starting")=1 

我们不想仅关闭所有的问题,重要的是以某种方式关闭相应的根问题,而不是所有问题,那就是标签能够帮助的地方。

在触发器配置中问题和恢复都能通过指定的标签匹配,必须进行以下设置:

  • 问题事件生成模式: 多重
  • 事件成功关闭: 标签值匹配的所有事件
  • 输入事件匹配的标签名称

  • 配置 标签 从日志行中获取标记值

如果配置成功,你将在监测问题中,看到按应用程序标记并与其解决方案匹配的问题事件。

因配置错误是可能的,当为不相关问题创建类似的事件标签时,请参考下列案例!

  • 当两个应用程序将错误和恢复消息写入同一个日志文件时,用户可以决定在同一个触发器中使用两个具有不同标签值的 Application 标签,方法是在标签值中使用单独的正则表达式从 {ITEM.VALUE} 宏中提取应用程序 A 和应用程序 B 的名称(例如,当消息格式不同时)。但是,如果与正则表达式不匹配,这可能无法按计划工作。不匹配的正则表达式将产生空标签值,问题和正常事件中的单个空标签值足以将它们关联起来。因此,应用程序 A 的恢复消息可能会意外关闭应用程序 B 的错误消息。
  • 实际标记和标记值仅在触发器触发时可见。如果使用的正则表达式无效,则会被默认替换为 *UNKNOWN* 字符串。如果缺少带有 *UNKNOWN* 标记值的初始问题事件,则可能会出现具有相同 *UNKNOWN* 标记值的后续恢复事件,这些事件可能会关闭它们不应该关闭的问题事件。
  • 如果用户使用不带宏函数的 {ITEM.VALUE} 宏作为标记值,则适用 255 个字符的限制。当日志消息很长且前 255 个字符不具体时,这也可能导致不相关问题的事件标记相似。