1 触发器示例

本页汇集了一些触发器示例。

示例按使用场景分类:

检测不可用主机
max(/host/zabbix[host,agent,available],5m)=0

如果主机上的 Zabbix agent 已有 5 分钟不可用,则此触发器会触发。
函数:max
数据监控项:zabbix[host,agent,available]

替代方案:

nodata(/host/agent.ping,5m)=1

如果 5 分钟内未从 Zabbix agent 收到任何数据,则此触发器会触发。
函数:nodata
数据监控项:agent.ping

检测不可用的 proxy
fuzzytime(/host/zabbix[proxy,{$PROXY_NAME},lastaccess],1m)=0

如果 Zabbix proxy 数据落后于 Zabbix 服务器时间 1 分钟,此触发器将被触发。
函数:fuzzytime
数据监控项:zabbix[proxy,{$PROXY_NAME},lastaccess]

检测不可用的 SMTP 集群
last(/smtp1.example.com/net.tcp.service[smtp])=0 and last(/smtp2.example.com/net.tcp.service[smtp])=0

如果两个 SMTP 服务器都宕机,此触发器将触发。
函数:last
数据监控项:net.tcp.service

检测不可达主机
count(/host/icmpping,30m,,"0")>5

如果主机在最近 30 分钟内有超过 5 次 ping 不可达,此触发器将被触发。
函数:count
数据监控项:icmpping

检测意外重启
change(/host/system.uptime)<0

如果检测到系统运行时间值出现负变化(表示发生了重启),则此触发器会触发。
函数:change
数据监控项:system.uptime

检测重要文件中的更改
last(/host/vfs.file.cksum[/etc/passwd],#1)<>last(/host/vfs.file.cksum[/etc/passwd],#2)

如果 /etc/passwd 已被更改,此触发器将触发。当上一个 /etc/passwd 校验和与最新的校验和不同时,该表达式为真。类似的表达式可用于监控重要文件中的更改,例如 /etc/passwd/etc/inetd.conf/kernel 等。
函数:last
数据监控项:vfs.file.cksum

检测 DNS 查询中的变化
last(/Zabbix server/net.dns.record[192.0.2.0,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME}           {$DNS_RESOURCE_RECORD_TYPE}       0 mail.{$WEBSITE_NAME}"

请注意第二个操作数周围的引号。

如果查询结果不等于其通常返回的内容,此触发器将被触发:

example.com           MX       0 mail.example.com

函数:last
数据监控项:net.dns.record[192.0.2.0,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1],其中宏定义如下:

{$WEBSITE_NAME} = example.com
{$DNS_RESOURCE_RECORD_TYPE} = MX
检测不同主机上不匹配的软件
last(/host/vfs.file.contents[/etc/os-release])<>last(/host2/vfs.file.contents[/etc/os-release])

如果不同主机上的 Ubuntu 版本不同,此触发器将被触发。请注意,这里的操作数是返回字符串的函数。
函数:last
数据监控项:vfs.file.contents

检测未同步的时钟
fuzzytime(/host/system.localtime,10s)=0

如果客户端本地时间与 Zabbix 服务器时间相差超过 10 秒,则触发器会触发。
函数:fuzzytime
数据监控项:system.localtime

请注意,对于 Zabbix agent,必须将 system.localtime 配置为被动检查;在 Zabbix agent 2 上,也可以将其配置为主动检查。

检测过时的 agent
find(/host/agent.version,,"like","beta")=1

如果 Zabbix agent 为 beta 版本,此触发器将被触发。需要升级 Zabbix agent。
函数:find
数据监控项:agent.version

检测接口抖动
changecount(/host/vfs.file.contents["/sys/class/net/eth0/operstate"],1h)>5 

如果 eth0 的运行状态(up/down/unknown)在一小时内变化超过 5 次,则此触发器会触发。
函数:changecount
数据监控项:vfs.file.contents

检测高入站流量
min(/host/net.if.in[eth0,bytes],5m)>100K

如果在最近五分钟内,eth0 上接收的字节数始终超过 100 KB,则此触发器会触发。很可能有人正在下载大文件。
函数:min
数据监控项:net.if.in[eth0,bytes]

检测磁盘空间不足
max(/host/vfs.fs.size[/,free],5m)<10G

如果可用磁盘空间持续(5 分钟)低于 10 GB,则触发器会触发。

您还可以定义一个恢复表达式:

min(/host/vfs.fs.size[/,free],10m)>40G

只有当可用磁盘空间持续(10 分钟)高于 40 GB 时,问题才会恢复
函数:min
数据监控项:vfs.fs.size

检测磁盘空间不足(动态阈值)
last(/template/hrStorageFree[{#SNMPVALUE}])<last(/template/hrStorageSize[{#SNMPVALUE}])*0.1

如果可用存储空间(以分配单位计)降至 10% 以下,则触发器会触发。请注意,这里使用了另一个监控项的值来获取自适应的触发器阈值,适用于通过自动发现发现的各种大小的存储。 函数:last

检测 CPU 高负载
last(/host/system.cpu.load[all,avg1])>5

当平均处理器负载在一分钟内一直高于 5 时,此触发器会触发。

变体:

min(/host/system.cpu.load[all,avg1],5m)>2 and time()<060000
min(/host/system.cpu.load[all,avg1],5m)>2 and not (dayofweek()=7 and time()>230000) and not (dayofweek()=1 and time()<010000)

此类触发器会分析 5 分钟的数据,并且仅在 CPU 负载从未低于 2 时触发。此外,这些触发器会在以下情况下触发:

  • 仅在夜间(00:00-06:00)
  • 除每周切换时的 2 小时外的任意时间(周日 23:00 - 周一 01:00)
(last(/host/system.cpu.load[all,avg1])>5) + (last(/host2/system.cpu.load[all,avg1])>5) + (last(/host3/system.cpu.load[all,avg1])>5)>=2

如果三台主机中至少有两台的处理器负载过高,则此触发器会触发。
函数:lastmindayofweektime
数据监控项:system.cpu.load

比较 CPU 负载
avg(/Zabbix server/system.cpu.load,1h)/avg(/Zabbix server/system.cpu.load,1h:now-1d)>2

如果今天的平均负载超过昨天同一小时的平均负载(使用时间偏移 now-1d)两倍以上,则触发器会触发。
函数:avg
数据监控项:system.cpu.load

比较 CPU 长期负载
trendavg(/host/system.cpu.load,1M:now/M)>1.1*trendavg(/host/system.cpu.load,1M:now/M-1M)

如果主机上的 CPU 负载在上个月增长超过 10%,则此触发器会触发。
函数:trendavg
数据监控项:system.cpu.load

您还可以在触发器配置中使用事件名称字段来构建有意义的告警消息,例如接收类似以下内容的消息:

"Exchange 服务器的负载在 7 月相较于 6 月增长了 24%(0.69 对比 0.56)"

事件名称必须定义为:

Load of {HOST.HOST} server increased by {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% in {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) comparing to {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})

对于这类问题,在触发器配置中允许手动关闭也很有用。

检测包含特殊字符的字符串
last(/host/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}

如果 /tmp/hello 的内容等于 {$HELLO_MACRO} 中定义的字符串,则触发器会触发:

{$HELLO_MACRO} = \" //hello ?\"

或者,您也可以直接与该字符串进行比较:

last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""

请注意,当直接比较字符串时,特殊字符(\\")会被转义。

函数:last
数据监控项:vfs.file.contents

有一个其他人可能会觉得有用的触发器表达式示例吗?
请使用我们的建议表单提交您的示例(包括表达式和上下文),将其发送给 Zabbix 开发人员。