ZABBIX动态发现磁盘监控


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 导入模板

导入后点击

IO

编辑监控的选项

将原来的监控键值都删除,添加在zabbix客户端配置文件中的对应键值

监控磁盘每秒钟读取的字节数

IO

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

IO

磁盘每秒钟读操作的次数

IO

每秒钟写操作次数

IO

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

IO

写花费的毫秒

IO

添加绘图

IO

IO

IO

IO

 

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

IO

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

IO

编辑,在正则中添加sda1

IO

查看监控结果

IO

 

作者

大志@www.zhengdazhi.com


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM