基于触发器的事件关联允许关联一个触发器产生的不同问题。
通常,在Zabbix中正常事件会关闭一个触发器生成的所有问题事件,但在某些情况下需要更加详细的方法。例如,当监控日志文件时,你可能想在日志文件中某些问题并将单独关闭,而不是全部关闭。
触发器的问题事件生成模式参数设置为多重的情况,通常用于日志监控、trap处理等。
在Zabbix中可以根据标签关联问题事件。标签用于提取值并创建问题标识。利用这一点,也可以根据匹配标签单独关闭问题。
换言之,相同的触发器可以通过事件标签创建不同事件。因此,可以通过事件标签逐个创建问题事件,并通过事件标签单独关闭事件。
在日志监控中,您可能会遇到类似以下的行:
Line1: Service 1 stopped
Line2: Service 2 stopped
Line3: Service 1 was restarted
Line4: Service 2 was restarted
事件关联的概念是为了能够将Line1的问题事件与Line3的解决方案相匹配,以及将Line2的问题事件与Line4的解决方案相匹配,并逐一关闭这些问题:
Line1: Service 1 stopped
Line3: Service 1 was restarted #Line 1 的问题已关闭
Line2: Service 2 stopped
Line4: Service 2 was restarted #Line 2 的问题已关闭
要做到这一点,您需要将这些相关事件标记为,例如,“Service 1”和“Service 2”。这可以通过将正则表达式应用于日志行来提取标记值来实现。然后,当创建事件时,它们分别被标记为“Service 1”和“Service 2”,并且问题可以与解决方案相匹配。
首先,你需要设置一个监控日志文件的监控项,例如:
当监控项设置完成时,等待加载配置更改约一分钟,然后去 最新数据中确保监控项开始采集数据。
当监控项正常工作时,您需要配置trigger。重要的是要决定日志文件中的哪些条目值得关注。例如,以下触发器表达式将搜索类似'Stopping'的string,以指示潜在的问题:
为了确保包含string"Stopping"的每一行都被视为问题,还应在触发器配置中将问题事件生成模式设置为'多个'。
然后定义恢复表达式。以下恢复表达式将在找到包含string"Starting"的日志行时解决所有问题:
由于我们不希望这样,重要的是要确保以某种方式关闭相应的根本问题,而不仅仅是所有问题。这就是标记可以提供帮助的地方。
通过在触发器配置中指定标签,可以匹配问题和解决方案。必须进行以下设置:
如果配置成功,您将能够在监控 → 问题中看到带有应用程序标签的问题事件,并与它们的解决方案相匹配。
由于可能的误配置,当为不相关的问题创建相似的事件标签时,请查看下面概述的案例!
索引宏始终引用触发器配置中的表达式字段,而不是恢复表达式。例如,在恢复事件中,{监控项.VALUE1}将解析为在恢复时刻问题表达式中第一个监控项的最新值。 如果恢复表达式基于不同的监控项,并且在恢复时问题表达式中的监控项值发生变化,事件将获得不同的标签,将不会相关联。
当两个应用程序将错误和恢复消息写入同一日志文件时,用户可能决定在同一触发器中使用两个服务标签,具有不同的标签值,通过在标签值中使用单独的正则表达式从{监控项.VALUE}宏中提取,例如,服务A和B的名称(例如,当消息格式不同时)。然而,如果正则表达式没有匹配,这可能不会按计划工作。 非匹配的正则表达式将产生空的标签值,问题和OK事件中单个空的标签值足以将它们相关联。因此,来自服务A的恢复消息可能意外地关闭来自服务B的错误消息。
实际的标签和标签值仅在触发器触发时可见。如果使用的正则表达式无效,它将被静默替换为*UNKNOWN*string。如果带有*UNKNOWN*标签值的初始问题事件被错过,可能会出现后续OK事件,具有相同的*UNKNOWN*标签值,这些事件可能关闭不应关闭的问题事件。
如果用户在没有宏函数的情况下使用{监控项.VALUE}宏作为标签值,255字符的限制适用。当日志消息很长,且前255个字符不具特异性时,这也可能导致不相关问题的相似事件标签。