当前位置:   article > 正文

zabbix服务器实时状态监控,ZABBIX动态发现磁盘监控

zabbix 监控ap的状态

在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-IO-01-1024x257.png

编辑监控的选项

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

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

ZABBIX-IO-02.png

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

ZABBIX-IO-03.png

磁盘每秒钟读操作的次数

ZABBIX-IO-04.png

每秒钟写操作次数

ZABBIX-IO-05.png

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

ZABBIX-IO-06.png

写花费的毫秒

ZABBIX-IO-07.png

添加绘图

ZABBIX-IO-08-1024x302.png

ZABBIX-IO-09-1024x561.png

ZABBIX-IO-10-1024x602.png

ZABBIX-IO-11-1024x614.png

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

ZABBIX-IO-12.png

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

ZABBIX-IO-13-1024x304.png

编辑,在正则中添加sda1

ZABBIX-IO-14-1024x422.png

查看监控结果

ZABBIX-IO-15-1024x501.png

作者

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/161029
推荐阅读
相关标签
  

闽ICP备14008679号