zabbix IO 监控
-
需要设置discovery - 从主机上识别出同一类型的多个设备,如识别多个网卡,多个盘符,这里要做的是识别多个磁盘;
-
需要设置item prototypes - 基础是discovery功能,识置一个类似模板,针对”磁盘“,同时为多个磁盘添加item;
会引用到discovery得到的结果,在key和name上都会用到 -
界面设置
- 需要添加key的程序,io.scandisk的脚本,网上查的, python语句
<root@linux0 ~>$ cat /etc/zabbix/zabbix_agentd.d/disk_scan.conf
UserParameter=io.scandisk[*],/usr/bin/python /usr/local/sbin/disk_scan.py $1
<root@linux0 ~>$ cat /usr/local/sbin/disk_scan.py
import subprocess
import json
args="cat /proc/diskstats|awk '{print $3}'|grep -E '^[a-z]+$'|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split('\n'):
if len(disk) != 0:
disks.append({'{#DISK_NAME}':disk})
print json.dumps({'data':disks},indent=4,separators=(',',':'))
<root@linux0 ~>$ python !$ #运行结果;
python /usr/local/sbin/disk_scan.py
{
"data":[
{
"{#DISK_NAME}":"sda"
},
{
"{#DISK_NAME}":"sdb"
}
]
}
- 得到的结果是json语句,显示的结果就是两个磁盘名称;需要使用的名字是
{#DISK_NAME}
;
设置item prototypes
- 界面设置,添加一个item prototypes,名字引用了Disk_NAME,key也引用了DISK_NAME
- 需要设置一个applications, 到时discovery的项目会出现在相应的项目上;
-
数据类型是重点,如果类型不对,将不会得到结果,得到0, 或提示数据类型不对,这里处理了很久;
-
尝试过将结果变成整形都失败: 使用awk去掉小数点,但结果应该是字符形;再使用awk后面加0强行转换成数字形式,但是显示都是0; 再在数据库修改数据类型,但是不管用,最终决定的是web界面这个选项;
-
key得到的结果是0.00这种形式,一定需要使用浮点型;
-
最终的key设置,脚本设置,跟网上不一样,网上都把结果输出成文本,再从文本得到结果,命令一直在后台运行;但我觉得zabbix自动定期会使用这个key得到结果,不需要这么复杂,下面是可以生效的; 可以增加自己想增加的数据,只设置了3个;
-
下面的$1是指界面设置的DISK_NAME;而后面awk命令,本来是
$3
的,但是这样会被认为的界面传过来的第三个参数;为区别,需要设置成$$3
这个样子;这个应该是内部机制;
<root@linux0 ~>$ cat /etc/zabbix/zabbix_agentd.d/disk_scan.conf
UserParameter=io.scandisk[*],/usr/bin/python /usr/local/sbin/disk_scan.py $1
UserParameter=io.read[*], iostat -kd |grep "\b$1\b" |awk '{print $$3}'
UserParameter=io.write[*], iostat -kd |grep "\b$1\b" |awk '{print $$4}'
UserParameter=io.util[*], iostat -kdx |grep "\b$1\b"| awk '{print $$14}'
- 得到的数据
- 命令行的测试
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.read[sda]'
11.94
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.write[sda]'
55.24
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.util[sda]'
0.06
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.util[sdb]'
0.01
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.write[sdb]'
54.55
<root@linux1 ~>$ zabbix_get -s 192.168.3.16 -k 'io.read[sdb]'
0.07