环境:没有Agent,只能通过SNMP监控时,需要获取多核CPU的平均使用率。
ZABBIX的使用SNMP监控CPU使用率时,由于设备都是多核CPU,监控的都是单独某一核心的使用率,但单独某一核使用率过高触发告警实际意义不大。
所以写了一个“外部检查”查询CPU的每个核心的使用率,然后再计算该设备CPU的总体的一个使用率。
- cd /usr/local/share/zabbix/externalscripts/
- vim /usr/local/share/zabbix/externalscripts/sqlcpuload.sh
- sqlcpuload.sh脚本内容如下
- cd /home/zabbix/scripts/cpu/$1 || mkdir /home/zabbix/scripts/cpu/$1
- cd /home/zabbix/scripts/cpu/$1
- cat /home/zabbix/scripts/cpuload.sql | sed -e "s/CNGDCOP01/$1/g" > cpuloadT.sql
- mysql -uzabbixapi -ppassword < cpuloadT.sql | awk '{ sum += $4; } END {print sum/(NR-1)}'
- rm -rf cpuloadT.sql
- cpuload.sql查询脚本如下(实际环境可以只保留需要的平均值一栏,理论上可以缩短一丢丢查询时间)
- USE zabbix;
- SELECT
- FROM_UNIXTIME(trends_uint.clock,'%Y-%m-%d %H:00:00') AS `日期______ 时间____`,
- trends_uint.value_min AS `最小值`,
- trends_uint.value_avg AS `平均值`,
- trends_uint.value_max AS `最大值`
- FROM
- trends_uint
- WHERE trends_uint.itemid = ANY(
- SELECT items.itemid FROM items WHERE items.hostid=
- ANY(SELECT `hosts`.hostid FROM `hosts`WHERE `hosts`.`host` =
- 'CNGDCOP01'
- )
- AND items.key_ LIKE 'hrProcessorLoad[%' AND items.key_ NOT LIKE 'hrProcessorLoad[{%')
- and UNIX_TIMESTAMP(now())-trends_uint.clock < 7200
- order by trends_uint.itemid,trends_uint.clock desc
上面查询的该监控项的趋势数据里的最新的平均值,为的是节约查询时间。
如果数量监控数据不大,但要求比较实时,可以把trends_uint换成history_uint,缩短数据更新时间。(当然如果环境允许直接安装agent就不用这么麻烦了)
下面是官网对趋势数据的说明
---------------------------------
运行结果如下
zabbix模板中添加监控项和触发器
-------最后测试OK
来源: http://www.cnblogs.com/gocd/p/7586974.html