3 触发器
概述
触发器是“评估”监控项采集的数据和表示当前系统状况的逻辑表达式。
当监控项用于采集系统的数据时,始终遵循这些数据是非常不切合实际的,因为这些数据始终在等待一个令人担忧或者值得关注的状态。然而这个“评估”数据的工作可以留给触发器表达式。
触发器表达式允许定义一个什么状况的数据是“可接受”的阈值。因此,如果接收的数据超过了可接受的状态,则触发器会被触发 - 或将状态更改为异常。
一个触发器可能有下列状态:
状态 | 描述 |
---|---|
OK | 这是一个正常的触发器状态 |
Problem | 通常发生了异常情况,例如CPU负载较高。 |
Unknown | 触发器值不能被计算, 查看未知状态。 |
在基本触发器配置中,我们可能希望为某些监控数据的五分钟平均值设置告警阈值,例如 CPU 负载。这是通过定义一个触发器表达式来完成的,其中:
- 将“avg”函数应用于监控项键中收到的值
- 使用五分钟的时间进行评估
- 将阈值设置为“2”
avg(/host/key,5m)>2
如果五分钟平均值超过 2,此触发器将“触发”(状态变为PROBLEM)。
在更复杂的触发器中,表达式可能包含组合 具有多种功能和多种阈值。参阅: 触发器表达式.
无法为具有二进制值的监控项创建触发器。
启用触发器后(将其配置状态从 禁用 更改为 启用),触发器表达式会在其中的监控项收到值或处理基于时间的函数的时间到来时立即求值。
大多数触发函数都是根据监控项值进行评估的历史 数据,而一些用于长期分析的触发功能,例如 趋势平均值(),趋势计数()等,使用趋势数据。
计算时间
每次 Zabbix 服务器收到作为表达式一部分的新值时,都会重新计算触发器。 当接收到新值时,表达式中包含的每个函数都会重新计算(不仅仅是接收到新值的函数)。
此外,如果在表达式中使用了基于时间的函数,则每次接收到新值和每 30 秒重新计算一次触发器。
基于时间的函数是 nodata()、date()、dayofmonth()、dayofweek()、time()、now() ; Zabbix 历史同步器进程每 30 秒重新计算一次。
引用趋势函数的触发器only在表达式中的每个最小时间段评估一次。 另见 趋势函数。
评估周期
在引用监控项历史的函数中使用评估周期。 它允许指定我们感兴趣的间隔。它可以是 指定为时间段 (30s, 10m, 1h) 或值范围 (#5 - for 五个最近值)。
评估周期测量到“now(现在)” - 其中“now(现在)”是 触发器的最新重新计算时间(参见上面计算时间 ; “now(现在)”不是现在的“now(现在)”服务器时间。
评估周期指定:
- 考虑“now-time period(现在时间周期)”和“now(现在)”之间的所有值(或者,与 时间偏移量,在“now-time shift-time period(现在时间偏移点时间区间)”和 “now-time_shift(现在)”)
- 考虑不超过过去的值的数量,向上 到“now(现在)”
- 如果时间周期或计数有 0 个可用值 指定 - 然后是使用它的触发器或计算项 功能变得不受支持。
注意:
- 如果在触发器中只使用一个函数(引用监控数据历史),那么“now(现在)”总是最新收到的值。例如,如果最后一个值是在一小时前收到的,那么评估期将被视为一小时前的最新值。
- 当第一个监控值被接收时,一个新的触发器被计算出来(history functions 历史函数);基于时间的函数将在30秒内计算。因此,即使设置的评估周期(例如 一个小时)自触发器创建以来还没有过去,也将计算触发器。触发器也将在第一个值之后计算,即使计算范围被设置为10个最新的值。
未知状态
在以下情况下,触发器表达式中可能会出现未知操作数:
- · 使用了不受支持的监控项
- · 支持监控项的功能评估导致错误
在这种情况下,触发器通常评估为“未知”(尽管有一些例外)。 有关详细信息,请参阅带有未知操作数的表达式。
可以在未知触发器获取信息。