引入
在openstack私有云平台部署了Zabbix后,发现承载云主机的物理机(CentOS7),zabbix监控图有些异常,如下,CPU利用率这张图默认情况应该是图像占满100%的,而这里却只有不到80%。
解决
一开始怀疑是Zabbix客户端装在Docker容器中导致取值不准确,所以更换了最新版客户端,直接安装在宿主机上,发现结果还是一样。
最后私有云厂商技术人员经过查资料发现,zabbix模板对于CPU取值有几项默认是没有加上的。
Zabbix对于获取CPU利用率的Item如下:
system.cpu.util[<cpu>,<type>,<mode>]
type - 可选项:
idle, nice, user (default), system (default for Windows), iowait, interrupt, softirq, steal, guest (on Linux kernels 2.6.24 and above), guest_nice (on Linux kernels 2.6.33 and above)
其中guest 和guest_nice 都与虚拟化有关,并且zabbix模板里面默认没有。
一般业务用途的机器这两项基本为0,所以也没什么影响,但是虚拟化的宿主机guest 项占用非常高,就出现了一开始现象。
我们在Zabbix模板中添加CPU guest time选项,然后加到Graph中,发现数据就正常了。
为什么会出现这种情况?
一般我们做监控时,抓取的CPU利用率会跟top命令作对比,但是top命令里没有guest这个选项。
查询源码发现,top只读取了/proc/stat的8个数值,而zabbix读取了/proc/stat的10个数值。因此计算出的结果是有偏差的。
参考资料
https://support.zabbix.com/browse/ZBX-10710
https://www.zabbix.com/documentation/3.4/manual/config/items/itemtypes/zabbix_agent
转载请注明:IPCPU-网络之路 » zabbix的cpu取值加起来不是100%