触发器是用于"评估"由监控项收集的数据的逻辑表达式,用于表示当前系统状态。
虽然监控项用于收集系统数据,但实时跟踪这些数据以等待出现需要告警或值得关注的情况是极不现实的。数据"评估"的工作可以交由触发器表达式来完成。
触发器表达式允许定义数据状态的"可接受"阈值。因此,当传入数据超出可接受状态时,触发器将被"触发"——即其状态变更为PROBLEM。
触发器可能具有以下状态:
状态 | 描述 |
---|---|
OK | 这是触发器的正常状态。 |
Problem | 发生了异常情况。例如处理器负载过高。 |
Unknown | 无法计算触发器值。参见未知状态。 |
在一个简单触发器中,我们可能希望为某些数据的五分钟平均值设置阈值,例如CPU负载。这可以通过定义触发器表达式来实现,其中:
avg(/host/key,5m)>2
如果五分钟平均值超过2,该触发器将"触发"(变为PROBLEM状态)。
在更复杂的触发器中,表达式可能包含多个函数和多个阈值的组合。另请参阅:Trigger expression。
在启用触发器(将其配置状态从禁用更改为启用)后,只要其中的监控项接收到值或处理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 - 表示 最近的五个值)。
评估周期计算至"当前时刻" - 这里的"当前时刻"指 触发器最近重新计算的时间(参见上文计算时间); "当前时刻"并非服务器的实时时间。
评估周期可指定以下两种方式:
考虑"当前时刻-时间段"到"当前时刻"之间的所有值(或应用时间偏移时, 计算"当前时刻-时间偏移-时间段"到"当前时刻-时间偏移"之间的值)
最多考虑过去指定数量的值(不超过num个)
to "now"
需注意:
如果触发器表达式中出现未知操作数,可能是由于以下情况:
这种情况下触发器通常会评估为"unknown"(尽管存在一些例外)。更多详细信息,请参阅含有未知操作数的表达式。
可以对未知触发器进行get notified操作。