赞
踩
在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
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
subget_vmname_by_id
{
$vmname=`cat/etc/qemu-server/$_[0].conf|grepname|cut-d\:-f2`;
$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"ifnot$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}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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]
1
zabbix_get–s127.0.0.1–kcustom.vfs.dev.write.ms[sda1]
配置服务端
导入模板文件zbx_export_templates.xml并修改
configuration-templates-import 导入模板
导入后点击
编辑监控的选项
将原来的监控键值都删除,添加在zabbix客户端配置文件中的对应键值
监控磁盘每秒钟读取的字节数
监控磁盘每秒中写入的字节数
磁盘每秒钟读操作的次数
每秒钟写操作次数
磁盘每次读操作花费的毫秒
写花费的毫秒
添加绘图
对需要监控磁盘的主机链接模板
查看正则配置,改配置默认在导入模板后会有,需要修改
编辑,在正则中添加sda1
查看监控结果
作者
大志@www.zhengdazhi.com,感谢投稿!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。