使用iostat和LLD实现zabbix监控IO性能
本文主要分为3个部分
第一部分 前言,主要说说需求和获取数据的命令
第二部分 zabbix,主要说如何利用lld获得想要监控的数据
第三部分 ansible,主要提供一个ansible playbook来分发该监控所需的文件
第一部分前言部分
最近有一个需求是对系统的IO进行监控,最后决定从iostat获取数据。
这是具体的命令:
iostat-x-d-m13
参数简单解析:
-x Display extended statistics
-d Display the device utilization report
-m Display statistics in megabytes per second instead of blocks or kilobytes per second
那么为什么要 1 3呢?
我们用
iostat-x-d-m1
多次测试,会发现第一次输出的值变动不大,第二次,第三次输出的值会有一定的变化,因此我更偏向与取第二次,第三次的值做平均
命令的输出格式如下:
Device:rrqm/swrqm/sr/sw/srMB/swMB/savgrq-szavgqu-szawaitsvctm%util
可以较好地满足我们的监控需求
第二部分 zabbix部分
接下来,我们就用zabbix的LLD来自动发现当前系统的Device值
cat /etc/zabbix/scripts/io_discovery.py
#!/bin/envpythonimportosimportcommands(status,output)=commands.getstatusoutput("iostat-x-d-m|sed-n'4,$p'|grep-v^$|awk'{print$1}'")DISKS=output.split()print'{'print'\t"data":['count=1forkeyinDISKS:print'\t{'ifcount<len(DISKS):print'\t\t"{#DISK}":"%s"},'%keyelse:print'\t\t"{#DISK}":"%s"}'%keycount+=1print'\t]'print'}'
拿到Device以后,用脚本来获取对应的数值
cat /etc/zabbix/scripts/userparameter_diskio.py
#!/bin/envpythonimportcommandsimportsysDISK=sys.argv[1]cmdline='cat/tmp/iostat.txt|grep%s'%DISK(status,output)=commands.getstatusoutput(cmdline)output_list=output.split()value=zip(*[iter(output_list)]*12)ifsys.argv[2]=="rrqmps":print((float(value[1][1])+float(value[2][1]))/2)elifsys.argv[2]=="wrqmps":print((float(value[1][2])+float(value[2][2]))/2)elifsys.argv[2]=="rps":print((float(value[1][3])+float(value[2][3]))/2)elifsys.argv[2]=="wps":print((float(value[1][4])+float(value[2][4]))/2)elifsys.argv[2]=="rspeed":print((float(value[1][5])+float(value[2][5]))/2)elifsys.argv[2]=="wspeed":print((float(value[1][6])+float(value[2][6]))/2)elifsys.argv[2]=="await":print((float(value[1][9])+float(value[2][9]))/2)elifsys.argv[2]=="svctm":print((float(value[1][10])+float(value[2][10]))/2)elifsys.argv[2]=="util":print((float(value[1][11])+float(value[2][11]))/2)
这里还需要一个crontab来生成/tmp/iostat.txt文件
* * * * * iostat -x -d -m 1 3 > /tmp/iostat.txt
接着写一个自定义配置文件
cat /etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf
UserParameter=diskio_discovery[*],python/etc/zabbix/scripts/io_discovery.pyUserParameter=diskio[*],python/etc/zabbix/scripts/userparameter_diskio.py$1$2
接下来需要在zabbix上建一个监控模板,模板在附件里面,本模板适用于zabbix3.2,其他版本请自行测试,可能需要做一些修改
都准备以后可以开始使用了
首先把相应的脚本和配置文件放到客户机上面,添加cron
接着把模板导入,在模板里面添加机器,然后restart zabbix 客户端
第三部分Ansible部分
如果你有使用ansible,这里可以提供一个playbook,用来分发脚本等工作
-hosts:客户机tasks:-name:mkdirthescriptsdirfile:path=/etc/zabbix/scriptsstate=directory-name:copyconffilescopy:src=/etc/zabbix/zabbix_agentd.d/userparameter_diskio.confdest=/etc/zabbix/zabbix_agentd.d/-name:copyio_discovery.pycopy:src=/etc/zabbix/scripts/io_discovery.pydest=/etc/zabbix/scripts/io_discovery.pymode=0755-name:copyuserparameter_diskio.pycopy:src=/etc/zabbix/scripts/userparameter_diskio.pydest=/etc/zabbix/scripts/userparameter_diskio.pymode=0755-name:addcroncron:name='addiostatcron'minute='*'hour='*'day='*'month='*'weekday='*'job='iostat-x-d-m13>/tmp/iostat.txt'state=presentnotify:-restartzabbix-agenthandlers:-name:restartzabbix-agentservice:name=zabbix-agentstate=restartedenabled=yes
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。