1 基于触发器的事件关联

概述

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

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

当触发器配置页面的多重问题事件生成选项为启用的情况下,通常适用于日志监控、采集(trap)处理等。

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

换言之,相同的触发器可以创建由事件标签标识的的不同事件。因此,可以一个一个单独地标识问题事件,并基于事件标签地标识单独关闭。

工作原理

在日志监控中,可能会遇到下面类似地输出:

  1. Line1: 应用1停止
  2. Line2: 应用2停止
  3. Line3: 应用1重启
  4. Line4: 应用2重启

事件关联地想法是将从“Line1”的问题事件到“Line3”的恢复事件,从“Line2”的问题事件到“Line4”的恢复事件相匹配,并能逐个关闭这些问题:

  1. Line1: 应用1停止
  2. Line3: 应用1重启 #问题来自于Line1关闭
  3. Line2: 应用2停止
  4. Line4: 应用2重启 #问题来自于Line2关闭

为此,需要通过标签将这些事件相关联,例如,可以标识为“应用1”和“应用2”。这个过程也可以将正则表达式应用于日志中来提取标签的值。然后,当事件创建时,他们分别给标识为“应用1”和“应用2”,并且问题可以与解决方法相匹配。

配置

监控项

首先,你可能想设置一个监控日志文件的监控项,例如:

  1. log[/var/log/syslog]

1 基于触发器的事件关联 - 图1

设置监控项后,等待一分钟,等待配置更改,然后去最新数据 确认该监控项已经开始收集数据。

触发器

要让监控项工作,你需要配置触发器。重要的是要决定日志文件中哪些条目值得注意。例如,以下触发表达式将搜索像“Stopping”这样的字符串来发现潜在问题的信号:

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

为了确保包含字符串“Stopping”的每一行都被视为问题,还要在触发器配置中将问题事件生成模式设置为”多种”。

然后定义一个恢复表达式。如果发现包含字符串“starting”的日志行,以下恢复表达式将解决所有问题:

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

由于以某种方式确保相应的根因问题得到解决很重要,我们不希望仅仅是解决所有问题。这就是标签可以提供帮助的地方。

问题和解决方案可以通过在触发器配置中指定标签来匹配。必须进行以下设置:

  • 问题事件生成模式:多种
  • 正常事件关闭:如果标签匹配所有事件
  • 输入事件匹配的标签名称

1 基于触发器的事件关联 - 图2

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

1 基于触发器的事件关联 - 图3

如果配置成功,你将在监控问题里看到问题事件被应用程序标识并匹配它们的解决方案

1 基于触发器的事件关联 - 图4

因为可能配置错误,会为不关联的问题创建相似的事件标签,请阅读下面列出的案例!

  • 两个应用程序向同一个日志文件写入错误和恢复消息时,用户可能决定为同一个触发器使用两个标签值不同的应用标签,在标签值中使用不同的正则表达式从{ITEM.VALUE}宏获取应用名称A和B(例如,当消息格式不同时)。然而,如果没有与正则表达式匹配,这可能无法按计划工作。不匹配的正则表达式会产生空的标签值,同一个空标签值足以将问题事件和正常事件关联起来。所以,一个来自应用A的恢复消息会意外地关闭一个来自应用B的错误消息。

  • 实际标签和标签值仅在触发器触发时可见。如果正则表达式使用不正确,会不做提示的自动替换为一个*UNKNOWN*字符串。如果最初的有*UNKNOWN*标签值的问题事件被错过了,随后可能会出现一个有相同*UNKNOWN*标签值的正常事件来关闭本不该关闭的问题事件。

  • 如果用户使用{ITEM.VALUE}宏而没有将宏函数设为标签值,255个字符的限制会生效。当日志消息很长并且前255个字符不是特定的,这也可能导致非关联问题拥有相似的事件标签。