在linux下不同硬件或者系统版本不同识别到的块设备的名称各不相同,可能是sda、xda等等,因此通过zabbix监控磁盘普通的模板显得死板不不够灵活。通过zabbix的自动发现功能,通过脚本获取系统块设备的名称,然后保存到变量中,在通过zabbix客户端的自定义监控选项将监控的键值传给服务端。
参考http://www.ttlsa.com/zabbix/zabbix-lld-monitor-disk-io-stats/ 该文档部署,但需要修改zabbix服务端的模板文件,测试发生使用该文档提供的 zbx_parse_iostat_values.sh获得的键值在zabbix服务端呈现图像时有问题,因此使用除了需要修改zabbix客户端的配置文件中的自定义键值的获取方式外,还需要修改服务端模板文件
创建自动发现脚本
从网络上下载,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | vim /etc/zabbix/scripts/discover_disk.pl #!/usr/bin/perl # give disk dmname, returns Proxmox VM name sub get_vmname_by_id { $vmname=`cat /etc/qemu-server/$_[0].conf | grep name | cut -d \: -f 2`; $vmname =~ s/^\s+//; #remove leading spaces $vmname =~ s/\s+$//; #remove trailing spaces return $vmname } $first = 1; print "{\n"; print "\t\"data\":[\n\n"; for (`cat /proc/diskstats`) { ($major,$minor,$disk) = m/^\s*([0-9]+)\s+([0-9]+)\s+(\S+)\s.*$/; $dmnamefile = "/sys/dev/block/$major:$minor/dm/name"; $vmid= ""; $vmname = ""; $dmname = $disk; $diskdev = "/dev/$disk"; # DM name if (-e $dmnamefile) { $dmname = `cat $dmnamefile`; $dmname =~ s/\n$//; #remove trailing \n $diskdev = "/dev/mapper/$dmname"; # VM name and ID if ($dmname =~ m/^.*--([0-9]+)--.*$/) { $vmid = $1; #$vmname = get_vmname_by_id($vmid); } } #print("$major $minor $disk $diskdev $dmname $vmid $vmname \n"); print "\t,\n" if not $first; $first = 0; print "\t{\n"; print "\t\t\"{#DISK}\":\"$disk\",\n"; print "\t\t\"{#DMNAME}\":\"$dmname\",\n"; print "\t\t\"{#VMNAME}\":\"$vmname\",\n"; print "\t\t\"{#VMID}\":\"$vmid\"\n"; print "\t}\n"; } print "\n\t]\n"; print "}\n"; # chmod 755 /etc/zabbix/scripts/discover_disk.pl |
ZABBIX客户端设置
| # diskio discovery UserParameter=discovery.disks.iostats,/etc/zabbix/scripts/discover_disk.pl #读扇区的次数 UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}' #写扇区次数 UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}' #合并读完成次数 UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 |awk '{print $$4}' #合并写完成次数 UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}' #读花费的毫秒数 UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}' #写操作花费的毫秒数 UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}' |
重启zabbix客户端
使用zabbix_get测试这些自定义键值是否生效
| zabbix_get –s 127.0.0.1 –k custom.vfs.dev.write.ms[sda1] |
配置服务端
导入模板文件zbx_export_templates.xml并修改
configuration-templates-import 导入模板
导入后点击

编辑监控的选项
将原来的监控键值都删除,添加在zabbix客户端配置文件中的对应键值
监控磁盘每秒钟读取的字节数

监控磁盘每秒中写入的字节数

磁盘每秒钟读操作的次数

每秒钟写操作次数

磁盘每次读操作花费的毫秒

写花费的毫秒

添加绘图




对需要监控磁盘的主机链接模板

查看正则配置,改配置默认在导入模板后会有,需要修改

编辑,在正则中添加sda1

查看监控结果

转载请标明出处【ZABBIX动态发现磁盘监控】。
《www.micoder.cc》
虚拟化云计算,系统运维,安全技术服务.
最新评论