因为测试文件系统的读写或者应用的读写性能需要查看磁盘的读写速度和iops.
zabbix 需要自发现磁盘并进行相应的处理才可以得到想要的值。
模版位置:https://download.csdn.net/download/YINHAOXU1/12260778
编写脚本,发现磁盘 discover_disk.py
语言:python2 当然是用其他语言也是可以的
这里贴出代码:
#!/bin/env python
#coding=utf-8
try:
import json
except:
import simplejson as json
import commands
#匹配出你的磁盘,egrep
#(status, output) = commands.getstatusoutput('''cat /proc/diskstats |awk '{print $3}'|egrep 'sd|vd|hd'|egrep -v '[0-9]'|sort -u''')
(status, output) = commands.getstatusoutput('''cat /proc/diskstats |awk '{print $3}'|egrep 'sd[a-z]$|vd[a-z]$|hd[a-z]$|leobd1d[0-9]{1,2}$'|sort -u''')
if output:
outputs = output.split('\n')
disks = []
for disk in outputs:
disks += [{'{#DISKONE}': disk}]
print json.dumps({'data':disks},sort_keys=True,indent=4)
else:
print 'discovery error'
检查: python discover_disk.py 可以看到找到了机器上的磁盘
编写获取数值的脚本 check_disk.sh
语言 shell
#!/bin/sh
while getopts "d:o:" opt
do
case $opt in
d ) disk=$OPTARG;;
o ) option=$OPTARG;;
? )
echo 'parameter is wrong!'
exit 1;;
esac
done
if [ ! "${disk}" ] || [ ! "${option}" ];then
echo "parameter is null"
exit 1
fi
if [[ ${option} == "read" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $6}'
elif [[ ${option} == "write" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $10}'
elif [[ ${option} == "readops" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $4}'
elif [[ ${option} == "writeops" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $8}'
elif [[ ${option} == "readtime" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $7}'
elif [[ ${option} == "writetime" ]];then
cat /proc/diskstats |grep "${disk} "|awk '{print $11}'
elif [[ ${option} == "util" ]];then
iostat -dxkt 1 2|grep "${disk} "|tail -1|awk '{print $14}' #这边获取iostat第二次的值
fi
检查: sh check_disk.sh -d sda -o readops 可以看到有数值。
其实脚本就是去取 cat /proc/diskstats 的值,然后通过zabbix的差值算法得到真实结果的。
脚本位置和权限
把脚本放在一个位置,确保你的zabbix进程用户有权限执行或者读取
比如我放在了/usr/lib/zabbix/alertscripts下面
默认的zabbix进程用户是zabbix
sudo -u zabbix sh /usr/lib/zabbix/alertscripts/sh check_disk.sh -d sda -o readops 测试一下
配置zabbix conf
然后我们在
[root@mds6 zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d
路径下,新建disk.conf文件,内容如下
UnsafeUserParameters=1
UserParameter=disk.discover,python /usr/lib/zabbix/alertscripts/discover_disk.py
UserParameter=disk.status[*],sh /usr/lib/zabbix/alertscripts/check_disk.sh -d $1 -o $2
注意,这里都是你的脚本真实的路径哈~
然后重启 zabbix-agent
添加自动发现
先添加一个模版,名字自己取。然后点击自动发现,进行添加自动发现规则
添加完自动发现规则后,需要自己添加监控项原型。
点击 监控项原型
一一配置即可
这里比如要 自动发现iops
然后把write的ops也创建一个监控项原型
再点击 图形原型,新建 “图形原型” iops on {#DISKONE}
通过“添加原型” 把你刚才添加的iops添加到该图形原型里。
大功告成啦,可以在 “监测中” 看到iops的图形啦