报错是这么冒出来的。Zabbix 5.0 监控 CentOS 7 的 200 台机器,某台根分区到 96% 前端变红却没有告警,触发器表达式写的是 vfs.fs.size[/,pfree].last() > 90,最近七天 Events 里一条 Problem 都没有。
这类报错背后常见的原因有几处,逐个排除就行。表达式用 pfree 是剩余百分比,判断大于 90 永远不成立,方向写反了。少数情况下是动作里限定了严重性大于等于高,而该触发器只到警告级别,事件被过滤。
还有一种情况,这台主机还挂在维护期里,维护未结束前事件被抑制。
动手时先确认指标语义与最近值
zabbix_get -s 10.0.0.11 -k vfs.fs.size[/,pused]
随后把表达式改成已用百分比
last(/web01/vfs.fs.size[/,pused])>90
接着核对动作的严重性条件
curl -s -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"action.get","params":{"output":"extend"},"auth":"TOKEN","id":1}' http://10.0.0.5/api_jsonrpc.php
等前面都确认过,再确认主机不在维护期
前端 配置-主机 里看 Maintenance 一栏是否为空
别只看报错消失,验证要多做一步。手工把阈值降到当前值以下后 Events 立刻出现 Problem,Reports 的 Action log 里状态是 sent,邮箱收到对应通知。
提醒一点。pfree 和 pused 混用是 Zabbix 里最常见的低级错;动作里的严重性过滤比触发器更隐蔽,查不到事件先看 Action log 有没有 sent。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
