一、配置CPU使用率的监控及触发项
1.添加CPU监控项
在【数据采集】栏中——点击【主机】——点击一台Zabbix客户端的【监控项】——右上方点击【创建监控项】,在【监控项】栏填写以下信息:
-
填写【名称】为
CPU使用率
; -
选择【键值】为
system.cpu.util[<cpu>,<type>,<mode>,<logical_or_physical>]
,表示CPU 使用率百分比,返回浮点数;其中,<type>
替换为idle
,其余默认,即最终填写的键值内容为:system.cpu.util[,idle]
;system.cpu.util
:用于监控 CPU 使用率的监控项键值,具体参数含义如下:<cpu>
:CPU 核心编号,通常是一个整数。可以使用all
表示所有 CPU 核心的平均值。<type>
:CPU 使用类型,包括user
、system
、idle
、nice
、iowait
等。user
:用户态 CPU 使用率。表示应用程序在用户空间运行所消耗的 CPU 时间。system
:系统态 CPU 使用率。表示内核空间运行(包括系统调用和中断处理)所消耗的 CPU 时间。idle
:空闲 CPU 时间。表示 CPU 未被使用的时间。nice
:低优先级进程(由nice
命令设置的优先级)消耗的 CPU 时间。iowait
:等待 I/O 操作完成所消耗的 CPU 时间。irq
:硬中断处理消耗的 CPU 时间。softirq
:软中断处理消耗的 CPU 时间。steal
:被虚拟化环境中的其他虚拟机窃取的 CPU 时间。guest
:虚拟机中运行客户操作系统所消耗的 CPU 时间。
<mode>
:监控模式,包括avg1
、avg5
、avg15
,分别表示 1 分钟、5 分钟、15 分钟的平均值。<logical_or_physical>
:指定是逻辑 CPU 还是物理 CPU。可以使用logical
或physical
。
-
填写【单位】为
%
; -
填写【更新间隔】为
10s
(测试时间短,可以更快看到效果);

填写完成后,点击【测试】,然后点击【获取值】,测试能否获取到值:

在【预处理】栏中,点击【预定步骤】的【添加】,选择【名称】为 JavaScript
,填写【参数】为 return 100 - value
,因为前面获取的值是CPU的空闲值,所以要用100减掉空闲值才是使用值:
然后点击【测试】,然后点击【获取值】,测试能否获取到值:

如果zabbix客户端的监控项默认已存在监控CPU,即键值为
system.cpu.util[,user]
,那就不需要手动再添加了,这里zabbix已自动存在CPU的监控,后续直接使用默认监控的项来处理:
2.添加CPU触发器
在【数据采集】栏中——点击【主机】——点击刚刚Zabbix客户端的【触发器】——右上方点击【创建触发器】,在【触发器】栏填写以下信息:
-
填写【名称】为
CPU使用率在1分钟之内平均超过90%
; -
选择【严重性】为
告警
; -
添加【表达式】:
- 【监控项】选择
Linux: CPU user time
; - 【功能】选择
avg()-周期T内的平均值
; - 【最后一个(T)】填写
1m
(表示时间1分钟); - 【结果】选择
>
,并填写90
,即最终填写的表达式内容为:
avg(/zabbix_agent-51-65/system.cpu.util[,user],1m)>90
该表达式用于监控某个主机的 CPU 用户态使用率。如果在过去1分钟内,CPU 用户态使用率的平均值超过了 90%,则触发一个告警。
- 【监控项】选择

3.测试CPU使用率触发严重性
在配置的Zabbix客户端10.22.51.65
后台,使用压测工具 stress
命令,测试将CPU执行到超过 90%
的占用率:
# 启动 8 个 CPU 计算任务
stress --cpu 8
# 直接将内存提高到将近100%(建议用这条更快)
stress --cpu $(nproc)
解释说明:
--cpu $(nproc)
:这个部分使用nproc
命令来获取系统的 CPU 核心数,并启动相同数量的 CPU 工作线程来达到高 CPU 使用率。
在Zabbix界面上,点击【监测】——【问题】,会发现显示一条新问题:
点击 CPU使用率在1分钟之内平均超过90%
问题,选择【历史记录】中的 Linux: CPU user time
:

显示图形界面如下:
也可以在【监测】的【最新数据】中找到对应的主机查看CPU图形。
二、配置告警媒介
1.配置Email告警媒介
电子邮件以我自己的QQ邮箱为例。
在【告警】栏中——点击【媒介】——点击自带的名称【 Email (HTML)】,在【报警媒介类型】栏填写以下信息:
- 填写【SMTP服务器】(SMTP服务器的地址,这里使用的是QQ);
- 填写【电子邮件】(发件人的邮箱地址);
- 填写【SMTP HELO】(最好与发件人的域名相匹配);
- 选择【认证】;
- 输入【用户名称】(SMTP服务器的用户名);
- 输入【密码】(SMTP服务器的密码);
- 勾选【已启用】。
在【消息模板】栏中,对【消息类型】中的【问题】和【问题恢复】模板进行编辑:
-
点击编辑【问题】模板:
-
编辑【主题】内容如下:
服务器:{ HOSTNAME1} 发生: { TRIGGER.NAME} 故障!
-
编辑【消息】内容如下:
<table cellspacing="0" style="border-right: 1px solid #FFC007;border-bottom: 1px solid #FFC007;min-width: 300px;font-family: 微软雅黑; font-size: 13px;"> <tr> <td style="width: 55px;font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> 告警主机</td> <td style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> { HOST.CONN}/{ HOST.DESCRIPTION}</td> </tr> <tr> <td style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> 告警时间</td> <td style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> { EVENT.DATE} { EVENT.TIME}</td> </tr> <tr> <td style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> 告警等级</td> <td style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> { TRIGGER.SEVERITY}</td> </tr> <tr> <td style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> 告警信息</td> <td style="background-color:#FFC007; border-left:1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;"> { TRIGGER.NAME} 故障!</td> </tr>
-