Zabbix自定义触发器,服务器负载过高告警
服务器负载过高如果没能及时发现,轻则服务变慢,重则直接宕机。
Zabbix 自带的模板往往只监控了 CPU 和内存,对系统负载的告警并不细致。
这篇文章会带着你从零开始,在 Zabbix 里创建一个自定义触发器,专门盯着服务器负载,一旦超过你设定的值就立刻告警。
整个过程包括准备监控项、编写触发器表达式、关联到主机以及模拟测试,跟着做就能完成。
先确认 Zabbix 版本和主机监控状态
在动手之前,需要确保你的 Zabbix 环境已经正常运行,并且目标服务器已经添加了 Zabbix Agent。
打开 Zabbix Web 界面,进入“配置” -> “主机”,确认你要监控的服务器状态是“已启用”且“可用”显示为绿色。
如果还没有安装 Agent,可以在被监控服务器上执行以下命令安装(以 CentOS 7 为例):
yum install -y zabbix-agent
systemctl start zabbix-agent
systemctl enable zabbix-agent
然后在 Zabbix Web 里添加主机,填写 Agent 的 IP 和端口(默认 10050)。
这一步是基础,如果主机不可用,后面的触发器也不会生效。
创建监控项获取系统负载值
Zabbix 本身有内置的键值来获取负载,但为了更灵活,我们可以直接用系统自带的 system.run 或者 Zabbix Agent 的 system.cpu.load 键值。
这里推荐使用内置键值,更稳定。
进入“配置” -> “主机”,找到你的服务器,点击“监控项”,然后点击“创建监控项”。
- 名称:
System load (1 min average per core)(可以自定义,方便识别即可) - 键值:
system.cpu.load[percpu,avg1] - 信息类型:
浮点数 - 单位:留空
- 更新间隔:
30s(根据需求调整,负载变化快可以设短一点)
点击“添加”保存。
这个监控项会每 30 秒采集一次最近 1 分钟的平均负载,并且已经除以了 CPU 核心数,所以数值直接反映每核心的负载情况。
等待一两分钟,进入“监测” -> “最新数据”,筛选你的主机和监控项名称,确认有数据产生。
如果显示“不支持”,检查 Zabbix Agent 是否允许该键值,通常默认是允许的。
编写触发器表达式,定义负载过高条件
现在有了监控项,下面创建触发器来定义什么情况算“负载过高”。
进入“配置” -> “主机”,点击“触发器”,然后“创建触发器”。
- 名称:
CPU load is too high on {HOST.NAME}(可以写成中文,例如“服务器负载过高”) - 严重性:选择“警告”或“严重”,按需
- 表达式:点击“添加”,选择刚才创建的监控项,功能选择
last(),运算符选择>,结果填2(假设你希望每核心负载超过 2 就告警)
完整的表达式类似:last(/YourHost/system.cpu.load[percpu,avg1])>2
这里的 2 是阈值,表示每核心负载超过 2 就触发。
如果你的服务器是 4 核,总负载超过 8 就会告警。
建议根据实际业务调整,一般每核心负载持续高于 1.5 就算偏高。
点击“添加”保存触发器。
关联触发器并模拟测试告警
触发器创建后会自动关联到当前主机,不需要额外操作。
但我们需要验证它是否能真正触发。
一个简单的方法是手动制造高负载。
登录到被监控服务器,执行一个消耗 CPU 的命令,例如:
stress --cpu 4 --timeout 60s
如果没有 stress 命令,可以先安装:yum install -y stress。
这条命令会启动 4 个进程占满 CPU 60 秒。
与此同时,观察 Zabbix Web 的“监测” -> “仪表板”或“问题”页面。
如果负载超过阈值,应该会看到一条新的告警,严重性为你设置的级别。
你也可以在“监测” -> “最新数据”里查看负载值是否超过了阈值。
如果一切正常,告警会出现。
如果没出现,检查触发器的表达式是否正确,以及监控项是否在持续采集数据。
常见避坑点:阈值与恢复表达式
很多新手会忽略负载阈值的单位。
使用 system.cpu.load[percpu,avg1] 时,数值已经是每核心负载,所以阈值不要设成总负载值。
比如 8 核服务器,每核心负载 1 已经表示总负载 8,所以阈值设 1 或 1.5 更合理。
另外,触发器可以添加恢复表达式。
默认情况下,当负载降回阈值以下,告警会自动恢复。
但如果你希望更精确,可以在触发器里添加恢复表达式,例如 last(/YourHost/system.cpu.load[percpu,avg1])<1.5,这样只有负载降到 1.5 以下才恢复,避免在临界值附近反复告警。
还有一点,如果服务器上运行了 Zabbix Agent 的主动模式,需要确保 system.cpu.load 键值没有被禁用。
可以在 Agent 配置文件里检查 UserParameter 或直接测试 zabbix_agentd -t system.cpu.load[percpu,avg1]。
告警效果验证与后续调整
当触发器成功触发后,你会在 Zabbix 的问题页面看到记录,同时如果配置了邮件、钉钉等媒介,也会收到通知。
建议先观察几天,根据实际业务高峰调整阈值。
如果告警太频繁,可以适当提高阈值或增加触发条件,比如持续 3 次超过阈值才告警,表达式可以写成:min(/YourHost/system.cpu.load[percpu,avg1],3m)>2,表示最近 3 分钟的最小值都大于 2 才触发,避免瞬间抖动误报。
总结一下,Zabbix 自定义触发器并不复杂,核心是选对监控项键值、设好合理的阈值,并用实际负载验证一遍。
这样就能在服务器负载真正过高时及时收到告警,留出处理时间。