1.拷贝脚本(discover_disk.pl在末尾)至zabbix安装目录的bin目录下(/main/server/zabbix/bin/)并赋予权限
chmod +x /main/server/zabbix/bin/discover_disk.plchown zabbix.zabbix /main/server/zabbix/bin/discover_disk.pl#脚本运行需要perl,若没有安装则使用yum安装yum install perl -y
2.设置agentd
拷贝以下内容至zabbix_agentd.conf末尾,重启zabbix_agentd# diskio discoveryUserParameter=discovery.disks.iostats,/main/server/zabbix/bin/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}'
3.导入模板
在zabbix web界面导入模版zbx_export_templates.xml
#模板下载
zbx_export_templates(http://image.wohenniucha.com/upload/2018/05/zbx_export_templates.xml)
#给主机添加该模板即可
4.附脚本discover_disk.pl
#!/usr/bin/perl# Zabbix 2 - disk autodiscovery for linux# all disks listed in /proc/diskstats are returned# special processing on LVMs# special processing on Proxmox VE disks (VM id and VM name are returned)# rq : in Zabbix, create a regexp filter on which disks you want to monitor on your IT System# ex : ^(hd[a-z]+|sd[a-z]+|vd[a-z]+|dm-[0-9]+|drbd[0-9]+)$# ^(loop[0-9]+|sr[0-9]*|fd[0-9]*)$# Custom keys :#UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$4}'#UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$7}'#UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$8}'#UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$11}'#UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$12}'#UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep "$1" | head -1 | awk '{print $$13}'#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}'# Discovery items creation :#Disk {#VMNAME}:{#DMNAME} io spent custom.vfs.dev.io.ms[{#DISK}]#Disk {#VMNAME}:{#DMNAME} read bw custom.vfs.dev.read.sectors[{#DISK}]#Disk {#VMNAME}:{#DMNAME} read io custom.vfs.dev.read.ops[{#DEV}]#Disk {#VMNAME}:{#DMNAME} write bw custom.vfs.dev.write.sectors[{#DISK}]#Disk {#VMNAME}:{#DMNAME} write io custom.vfs.dev.write.ops[{#DEV}]# give disk dmname, returns Proxmox VM namesub 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 "{";print ""data":[";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/$//; #remove trailing $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 "); print