在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客户端的配置文件中的自定义键值的获取方式外,还需要修改服务端模板文件
创建自动发现脚本
从网络上下载,
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
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客户端设置
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测试这些自定义键值是否生效
1
|
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,感谢投稿!
收 藏
转载请注明:成长的对话 » ZABBIX动态发现磁盘监控