ZABBIX动态发现磁盘监控

管理员 zabbix1247,37222字数 2528阅读8分25秒阅读模式

linux下不同硬件或者系统版本不同识别到的块设备的名称各不相同,可能是sda、xda等等,因此通过zabbix监控磁盘普通的模板显得死板不不够灵活。通过zabbix的自动发现功能,通过脚本获取系统块设备的名称,然后保存到变量中,在通过zabbix客户端的自定义监控选项将监控的键值传给服务端。

参考https://www.ttlsa.com/zabbix/zabbix-lld-monitor-disk-io-stats/ 该文档部署,但需要修改zabbix服务端的模板文件,测试发生使用该文档提供的 zbx_parse_iostat_values.sh获得的键值在zabbix服务端呈现图像时有问题,因此使用除了需要修改zabbix客户端的配置文件中的自定义键值的获取方式外,还需要修改服务端模板文件文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

创建自动发现脚本

从网络上下载,文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

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客户端文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

使用zabbix_get测试这些自定义键值是否生效文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

zabbix_get –s 127.0.0.1 –k custom.vfs.dev.write.ms[sda1]

配置服务端

导入模板文件zbx_export_templates.xml并修改文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

configuration-templates-import 导入模板文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

导入后点击文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

编辑监控的选项文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

将原来的监控键值都删除,添加在zabbix客户端配置文件中的对应键值文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

监控磁盘每秒钟读取的字节数文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

监控磁盘每秒中写入的字节数文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

磁盘每秒钟读操作的次数文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

每秒钟写操作次数文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

磁盘每次读操作花费的毫秒文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

IO文章源自运维生存时间-https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/

写花费的毫秒

IO

添加绘图

IO

IO

IO

IO

 

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

IO

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

IO

编辑,在正则中添加sda1

IO

查看监控结果

IO

 

作者

大志@www.zhengdazhi.com,感谢投稿!

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
管理员
  • 本文由 发表于 09/03/2016 01:00:33
  • 转载请务必保留本文链接:https://www.ttlsa.com/zabbix/zabbix-dynamic-io-monitor/
评论  12  访客  12
    • mhb123
      mhb123 0

      客户端使用zabbix_get报错!!!
      zabbix_get -s 127.0.0.1 -k custom.vfs.dev.write.ms[sda1]
      zabbix_get [3552]: Check access restrictions in Zabbix agent configuration

        • 匿名
          匿名 9

          @ mhb123 看下agent.conf的Server=yourzabbixServerIP对不对

        • 匿名
          匿名 0

          将模板挂载到具体的host后,Discovery rules中报错
          Cannot create item: item with the same key “custom.vfs.dev.read.ops[{#DMNANE}]” already exists.
          Cannot create item: item with the same key “custom.vfs.dev.read.ops[{#DMNANE}]” already exists
          还望大神指点如何解决。

            • 匿名
              匿名 9

              @ 匿名 找到原因了,居然是 #DMNANE 写错了。尴尬。

                • 黯然。心碎
                  黯然。心碎 0

                  @ 匿名 什么意思呢?我现在也是这个问题 !请回复下!!

              • 匿名
                匿名 9

                将模板链接到具体的host中后,Discovery rules 中会报错:如下
                Cannot create item: item with the same key “custom.vfs.dev.read.ms[{#DMNANE}]” already exists.
                Cannot create item: item with the same key “custom.vfs.dev.read.ms[{#DMNANE}]” already exists.
                这大概是什么问题?还请大神帮忙。

                • juhuaxia
                  juhuaxia 9

                  大哥你倒是把模板传一下啊

                  • 匿名
                    匿名 9

                    请问一下整个步骤做完自动发现出现Global regular expression “Linux disks for autodiscovery” does not exist这个问题!该如何解决啊?正则是按照你上面写的。

                      • 匿名
                        匿名 9

                        @ 匿名 我也是这样的问题,求解大神!

                      • 丶执笔不语绘虚妄
                        丶执笔不语绘虚妄 1

                        您好,我问下
                        /usr/local/jdk_1.7/bin/jstat -gcutil $(pgrep java|head -1)|tail -1|awk ‘{print $6}’ 在命令行运行正常,返回正常结果。
                        当将其转换为zabbix的自定义参数
                        UserParameter=ygc.counts,sudo /usr/local/jdk_1.7/bin/jstat -gcutil $(pgrep java|head -1)|tail -1|awk ‘{print $$6}’
                        重启zabbix_agent服务后
                        zabbix_get -s 192.168.2.11 -k ygc.counts 命令不报错,也不返回任何值。
                        自定义参数配置文件如下:
                        UserParameter=ygc.counts,sudo /usr/local/jdk_1.7/bin/jstat -gcutil $(pgrep java|head -1)|tail -1|awk ‘{print $$6}’
                        UserParameter=fgc.counts,sudo /usr/local/jdk_1.7/bin/jstat -gcutil $(pgrep java|head -1)|tail -1|awk ‘{print $$8}’
                        UserParameter=jvm.memory.usage,sudo /usr/local/jdk_1.7/bin/jmap -histo $(pgrep java|head -1)|grep Total|awk ‘{print $$3}’
                        UserParameter=jvm.instances.usage,sudo /usr/local/jdk_1.7/bin/jmap -histo $(pgrep java|head -1)|grep Total|awk ‘{print $$2}’
                        UserParameter=flume.monitor
                        ,/bin/bash /opt/scripts/monitor_flume.sh $EventDrainSuccessCount
                        UserParameter=script.date,date
                        UserParameter=get.os.type, head -1 /etc/issue
                        UserParameter=test1,jstat -gcutil 1229

                        上述参数,只有
                        UserParameter=script.date,date
                        UserParameter=get.os.type, head -1 /etc/issue
                        两行能够用zabbix_get取到值。请大神帮帮忙

                        • 85757916
                          85757916 3

                          哇,好牛。

                          • 匿名
                            匿名 9

                            模版有吗

                          评论已关闭!