3 触发器
概述
触发器是对由监控项收集的数据进行“评估”的逻辑表达式,用于表示当前系统状态。
监控项用于收集系统数据,但始终跟踪这些数据、等待某个告警或值得关注的条件出现,实际上并不现实。数据“评估”的工作可以交给触发器表达式来完成。
触发器表达式允许定义数据状态的“可接受”阈值。因此,当传入数据超过可接受状态时,触发器就会“触发”——或者将其状态更改为 PROBLEM。
触发器可能具有以下状态:
| 状态 | 描述 |
|---|---|
| OK | 这是正常的触发器状态。 |
| Problem | 发生了某些事情。例如,处理器负载过高。 |
| Unknown | 无法计算触发器值。请参见Unknown status。 |
在一个简单的触发器中,我们可能希望为某些数据的五分钟平均值设置一个阈值,例如 CPU 负载。这可以通过定义一个触发器表达式来实现,其中:
- 将 'avg' 函数应用于监控项键中接收到的值
- 使用五分钟的评估周期
- 设置 '2' 作为阈值
avg(/host/key,5m)>2
如果五分钟平均值 大于 2,此触发器将会“触发”(变为 PROBLEM)。
在更复杂的触发器中,表达式可能包含多个函数和多个阈值的组合。另请参见:Trigger expression。
对于返回二进制 data type 值的监控项,不能创建触发器。
启用触发器后(将其配置状态从 Disabled 更改为 Enabled),只要其中的某个监控项接收到值,或者到达处理 date and time 和/或 nodata() 函数的时间,系统就会立即计算该触发器表达式。
大多数触发函数都是根据监控项值进行评估的历史 数据,而一些用于长期分析的触发功能,例如 趋势平均值(),趋势计数()等,使用趋势数据。
计算时间
每当 Zabbix 服务器接收到属于表达式的新值时,都会重新计算一次触发器。收到新值后,表达式中包含的每个函数都会重新计算(不仅仅是接收到新值的那个函数)。
此外,当收到新值时,以及在表达式中使用了 date and time 和/或 nodata() 函数时,每 30 秒都会重新计算一次触发器。
Date and time 和/或 nodata() 函数由 Zabbix history syncer 进程每 30 秒重新计算一次。
仅引用 trend 函数的触发器,会按照表达式中最小的时间周期每次评估一次。另请参见 trend functions。
评估周期
评估周期用于引用监控项历史数据的函数。 它允许指定我们感兴趣的时间间隔。可以将其指定为时间段(30s、10m、1h),也可以指定为值范围(#5 - 表示最近五个值)。
评估周期的计算基准是“now”——即触发器最近一次重新计算的时间(参见上面的计算时间);“now”不是服务器的“now”时间。
评估周期可以指定为以下任一形式:
- “now - 时间段”和“now”之间的所有值(或者在应用时间偏移后,为“now - 时间偏移 - 时间段”和“now - 时间偏移”之间的所有值)。
- 从过去到“now”为止的指定数量的值。
如果在指定的评估周期内不存在数据,则使用此函数的触发器或计算监控项将变为不受支持。
请注意:
- 如果触发器中只使用了一个(引用历史数据的)函数,则“now”始终是最近接收到的值。例如,如果最后一个值是在一小时前接收到的,则评估周期将被视为截至一小时前的最新值。
- 新触发器会在接收到第一个值后立即进行计算(历史函数);对于日期和时间和nodata()函数,则会在 30 秒内完成计算。因此,即使自触发器创建以来,设置的评估周期(例如一小时)可能尚未过去,触发器也会被计算。即使评估范围设置为例如最近十个值,在接收到第一个值后,触发器也会被计算。
未知状态
在以下情况下,触发器表达式中可能会出现未知操作数:
- · 使用了不受支持的监控项
- · 支持监控项的功能评估导致错误
在这种情况下,触发器通常评估为“未知”(尽管有一些例外)。 有关详细信息,请参阅带有未知操作数的表达式。
可以在未知触发器获取信息。