需要说明的是本文中使用的脚本及zabbix等工具并不是公司官方指定的工具,脚本等文档也并非公司工程师作品。这篇文章仅作zabbix监控disk相关话题的一篇讨论。任何问题可以发表评论或者发邮件至hui.huang@memblaze.com
zabbix简介
zabbix是一个基于PHP的监控IT监控平台。https://www.zabbix.com/, 具有非常多的自动化监控功能。对于NVMe SSD等磁盘来说,网上见到的监控普遍比较老,或者有些问题。在此分享一个自己写的脚本。并附上使用教程。
zabbix监控流程简介
测试环境
zabbix :4.2(server及agent均为4.2)
zabbix agent :4.2
zabbix agent(被监控的硬盘所在设备环境):centos7.4/python3.7
zabbix server (zabbix web及zabbix server所在服务器为lamp环境):centos7.4/MariaDB MariaDB Server5.5.60/PHP 5.4.16
以上列出来的都是要装的,zabbix环境如何这里暂时不做赘述。如有需要,另外收集反馈后通过文章解答。
Python脚本
#!/root/anaconda3/bin/python
#get result of iostat
#sys.argv[2] have to select from ['rrqmps', 'wrqmps', 'riops', 'wiops', 'rmbps', 'wmbs', 'avgrq-sz', 'avgqu-sz', 'await', 'rawait', 'wawait', 'svctm', 'util']
import subprocess
import sys
import re
resdir={}
res = subprocess.Popen('iostat -x -m 1 4', stdout=subprocess.PIPE, shell=True)
try:
soures = res.communicate(timeout=3)
except subprocess.TimeoutExpired:
res.kill()
soures = res.communicate()
finalres = soures[0].decode().split('\n')
nvmelist = []
for elei in finalres:
if re.match(sys.argv[1], elei) is not None:
nvmelist.append(elei)
nvmeres=nvmelist[-1].split(' ')
while '' in nvmeres:
nvmeres.remove('')
resname = ['device', 'rrqmps', 'wrqmps', 'riops', 'wiops', 'rmbps', 'wmbps','avgrq-sz', 'avgqu-sz', 'await', 'rawait', 'wawait', 'svctm', 'util']
resdir = dict(zip(resname, nvmeres))
x=sys.argv[2]
print(resdir[x])
脚本比较简单,费劲的是如何配置。
zabbix agent 端
- 上传脚本 iostatres.py to /etc/zabbix
- 编辑agent配置文件 /etc/zabbix/zabbix_agentd.conf
在结尾添加下面这句话
UserParameter=disk.iostat[*],/etc/zabbix/iostatres.py $1 $2
修改权限
AllowRoot=1
修改timeout时间
Timeout=10 - 重启zabbix-agent
systemctl restart zabbix-agent
zabbix-server side
- 用zabbix-get先测下能不能用,下面192.168.28.176是agent的IP
zabbix_get -s 192.168.28.176 -k disk.iostat[nvme0n1,wmbps]
- 如果能拿到正确的数值,可以用fio跑个纯写之类的测试,看下带宽数据是不是能取上来
- 登录zabbix-web后台,添加或者建立模板,下面这是个监控device号为nvme0n1的模板。
- iostat-nvme0n1.xml