在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客戶端的配置 文件中的自定義鍵值的獲取方式外,還需要修改服務端模板文件
創建自動發現腳本
從網絡上下載,
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
查看監控結果
作者
大志@www.zhengdazhi.com