3 触发器

概述

触发器是对由监控项收集的数据进行“评估”的逻辑表达式, 并表示当前的系统状态。

监控项用于收集系统数据,但始终跟踪这些数据、等待出现告警 或值得关注的条件,是非常不切实际的。数据“评估”的工作可以交给 触发器表达式来完成。

触发器表达式允许定义数据状态的“可接受”阈值。因此,当传入的数据 超过可接受状态时,触发器就会“触发”——或者将其状态更改为 PROBLEM。

触发器可能具有以下状态:

状态 描述
OK 这是正常的触发器状态。
Problem 发生了某些事情。例如,处理器负载过高。
Unknown 无法计算触发器值。请参见未知状态

在一个简单的触发器中,我们可能希望为某些数据的五分钟平均值设置阈值,例如 CPU 负载。这可以通过定义如下触发器表达式来实现:

  • 将 'avg' 函数应用于在监控项 key 中接收到的值
  • 使用五分钟的评估周期
  • 设置阈值为 '2'
    avg(/host/key,5m)>2

如果五分钟平均值 大于 2,这个触发器就会“触发”(变为 PROBLEM)。

在更复杂的触发器中,表达式可能包含多个函数和多个阈值的组合。另请参见:触发器表达式

对于返回二进制 data type 值的监控项,不能创建触发器。

启用触发器(将配置状态从 禁用 更改为 启用)后,只要其中的 监控项 接收到值,或者到了处理 date and time 和/或 nodata() 函数的时间,触发器表达式就会被评估。

大多数触发器函数是基于监控项值的history数据进行计算的,而一些用于长期分析的触发器函数,例如trendavg()trendcount()等,则使用趋势数据。

计算时间

每次 Zabbix server 接收到属于触发器表达式一部分的新值时,都会重新计算触发器。当接收到新值时,表达式中包含的每个函数都会被重新计算(而不仅仅是接收到新值的那个函数)。

此外,当接收到新值时,以及在表达式中使用了 date and time 和/或 nodata() 函数的情况下,每 30 秒都会重新计算一次触发器。

Date and time 和/或 nodata() 函数由 Zabbix 历史同步进程每 30 秒重新计算一次。

仅引用趋势函数的触发器,每表达式中最小时间周期计算一次。另见 trend functions

评估周期

评估周期用于引用监控项历史数据的函数。 它允许指定我们感兴趣的时间间隔。它可以 指定为时间段(30s、10m、1h)或数值范围(#5 - 表示 最近五个值)。

评估周期的测量基准是“now”——其中“now”是 触发器最近一次重新计算的时间(参见上面的计算时间);“now”不是 服务器的“now”时间。

评估周期指定以下两者之一:

  • “now - 时间段”和“now”之间的所有值(或者,在应用时间偏移后,为“now - 时间偏移 - 时间段”和“now - 时间偏移”之间的所有值)。
  • 从过去到“now”为止的指定数量的值。

如果在指定的评估周期内不存在数据,则使用此函数的触发器或计算监控项将变为不受支持。

请注意:

  • 如果触发器中只使用了一个(引用历史数据的)函数,“now”始终是最近接收到的值。例如,如果最后一个值是在一小时前接收到的,则评估周期将被视为截至一小时前的最新值。
  • 一旦接收到第一个值,新触发器就会立即进行计算(历史函数);对于日期和时间nodata()函数,它将在 30 秒内完成计算。因此,即使自触发器创建以来,设置的评估周期(例如一小时)可能尚未过去,触发器也会被计算。即使评估范围设置为例如最近十个值,在接收到第一个值后,触发器也会被计算。

未知状态

在以下情况下,触发器表达式中可能会出现未知的操作数:

  • 使用了不支持的 监控项
  • 对于支持的 监控项,其函数评估结果出现错误

在这种情况下,触发器通常会评估为“未知”(尽管存在一些例外情况)。有关更多详细信息,请参阅 含有未知操作数的表达式

可以对未知的触发器进行 get notified