monicazhang 发表于 2017-8-20 10:22:17

ZABBIX动态发现了磁盘监控


ZABBIX动态发现磁盘监控在linux下不同硬件或者系统版本不同识别到的块设备的名称各不相同,可能是sda、xda等等,因此通过zabbix监控磁盘普通的模板显得死板不不够灵活。通过zabbix的自动发现功能,通过脚本获取系统块设备的名称,然后保存到变量中,在通过zabbix客户端的自定义监控选项将监控的键值传给服务端。参考zabbix/zabbix-lld-monitor-disk-io-stats/ 该文档部署,但需要修改zabbix服务端的模板文件,测试发生使用该文档提供的zbx_parse_iostat_values.sh获得的键值在zabbix服务端呈现图像时有问题,因此使用除了需要修改zabbix客户端的配置 文件中的自定义键值的获取方式外,还需要修改服务端模板文件
1创建自动发现脚本

vim /etc/zabbix/scripts/discover_disk.pl#!/usr/bin/perl# give disk dmname, returns Proxmox VM namesub get_vmname_by_id{$vmname=`cat /etc/qemu-server/$_.conf | grep name | cut -d \: -f 2`;$vmname =~ s/^\s+//; #remove leading spaces$vmname =~ s/\s+$//; #remove trailing spacesreturn $vmname}$first = 1;print "{\n";print "\t\"data\":[\n\n";
for (`cat /proc/diskstats`){($major,$minor,$disk) = m/^\s*(+)\s+(+)\s+(\S+)\s.*$/;$dmnamefile = "/sys/dev/block/$major:$minor/dm/name";$vmid= "";$vmname = "";$dmname = $disk;$diskdev = "/dev/$disk";# DM nameif (-e $dmnamefile) {    $dmname = `cat $dmnamefile`;    $dmname =~ s/\n$//; #remove trailing \n    $diskdev = "/dev/mapper/$dmname";    # VM name and ID    if ($dmname =~ m/^.*--(+)--.*$/) {      $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

1ZABBIX客户端设置

# diskio discoveryUserParameter=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}'


1重启ZABBIX客户端

使用zabbix_get测试这些自定义键值是否生效
zabbix_get –s 127.0.0.1 –k custom.vfs.dev.write.ms
1配置服务端

导入模板文件zbx_export_templates.xml并修改configuration-templates-import 导入模板导入后点击编辑监控的选项将原来的监控键值都删除,添加在zabbix客户端配置文件中的对应键值监控磁盘每秒钟读取的字节数监控磁盘每秒中写入的字节数磁盘每秒钟读操作的次数每秒钟写操作次数磁盘每次读操作花费的毫秒写花费的毫秒添加绘图
对需要监控磁盘的主机链接模板查看正则配置,改配置默认在导入模板后会有,需要修改编辑,在正则中添加sda1查看监控结果

原创:大志
页: [1]
查看完整版本: ZABBIX动态发现了磁盘监控