lygyh9985825 发表于 2015-11-23 13:43:39

Zabbix discovery disk 监控

Zabbix discovery Disk 监控
  首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!

我会在当天或者第二天及时回复,并且改进~~
  Zabbix自带的“Template OS Linux”模板支持监控已挂载的磁盘空间利用率,是利用LLD(Low-level discovery)实现的,但是却不能监控磁盘IO,下面这篇文章主要是介绍通过Discovery rule来实现对磁盘IO的监控。
  一、建立Zabbix_Agentd的key


确保之前已经修改过zabbix_agentd.conf
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
添加Zabbix_Agentd识别key的路径

好,现在我们来添加监控disk的Key
cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/
touch disk_status_key
下面是disk_status_key的内容

{
UserParameter=vfs.fs.scandisk
[*],/usr/local/zabbix/shell/disk_scan.sh $1
UserParameter=custom.vfs.dev.read.ops
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$4}'
UserParameter=custom.vfs.dev.read.ms
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$7}'
UserParameter=custom.vfs.dev.write.ops
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$8}'
UserParameter=custom.vfs.dev.write.ms
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$11}'
UserParameter=custom.vfs.dev.io.active
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$12}'
UserParameter=custom.vfs.dev.io.ms
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$13}'
UserParameter=custom.vfs.dev.read.sectors
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$6}'
UserParameter=custom.vfs.dev.write.sectors
[*],cat /proc/diskstats | egrep "\b$1\b" | head -1 | awk '{print $$10}'
}
  二、建立discovery Disk 脚本


这里我先说明一下,我这边Server中都是sda硬盘,所以在下面'diskarray'磁盘数组中填入了'sda'
有需要的同学请自行修改
cd /usr/local/zabbix/shell
touch disk_scan.sh

{
#!/bin/bash
#Written by zijin
#2014-08-05
#get local disk name
#脚本运行结果格式为
#{
#   "data":[
#         {"{#DISK_NAME}":"sda"}
#         {"{#DISK_NAME}":"sdb"}
#   ]
#}
function get_disk_name () {
diskarray=($(cat /proc/diskstats|egrep "\b$1\b"|awk '{print $3}'|sort|uniq   2>/dev/null))
#暂时只画硬盘sda的图
diskarray=(sda)
function printf_disk_name () {
length=${#diskarray[@]}
for ((i=0;i<${length};i++));do
if [ $i -lt $[${length}-1] ];then
printf "{ \"{#DISK_NAME}\":\"${diskarray[$i]}\" },\n"
else
printf "{ \"{#DISK_NAME}\":\"${diskarray[$i]}\" }\n"
fi
done
}
printf "{ \"data\":[\n"
printf_disk_name
printf "]}"
}
get_disk_name $1
exit 0
}
  三、在 Template OS Linux 中创建 discovery rule


打开Zabbix Web页面,configure-templates-Template OS Linux
点击discovery



右上角新建discovery rule
下面附图,key对应这我刚才在Include路径下设置的key
下面的Zabbix agent 也可以改成 Zabbix agent (Active),这样agent变为主动模式,使Server负载更小。

  四、在前面创建的Disk status disvovery 中添加项目原型


大家可以理解为,前一步我们创建了角色,现在我们需要添加角色所扫描的任务,也就是item,下面附图:

点击 item prototypes
点击右上角的 Create item prototype
下面是我的详细配置,有几点需要注意
1、名称中 $1 为变量
2、Units 为 B_Writ
3、Store value 为每秒速率

  我在这边创建了两个item

[*]IO InBlocks on {#DISK_NAME}
[*]IO OutBlocks on {#DISK_NAME}

  五、创建 Graphs


上一步我们已经创建了两个监控项,那么如何将监控的信息通过图形呈现出来呢?
好,下面我们来创建Graphs,并将item添加进去
单击 Graphs prototypes-Create graphs prototypes



  六、在Screen中列出graphs

页: [1]
查看完整版本: Zabbix discovery disk 监控