xinghe0 发表于 2017-4-20 11:03:01

Zabbix动态监控磁盘I/O

  最近做压测,需要监控每台服务器的磁盘I/O,由于每台服务器的磁盘名称可能不一样,所以需要用到Zabbix的LLD功能来发现磁盘并监控I/O。
参考文章
http://www.programering.com/a/MDOwYDNwATc.html
一、客户端(被监控端)
1.发现磁盘的脚本(disk_discovery.sh)
#!/bin/bash
#written by lenwood
#mail:
diskarray=(`cat /proc/diskstats |grep -E "\bd\b|\bxvd\b"|grep -i "\b$1\b"|awk '{print $3}'|sort|uniq   2>/dev/null`)
length=${#diskarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf  "\n\t]\n"
 
printf "}\n"
我把这个脚本放到zabbix-agent的/etc/zabbix/os目录下
执行结果如下:
root@ubuntu-14:/etc/zabbix/os# ./disk_discovery.sh 
{
"data":[
{"{#DISK_NAME}":"sda"}
]
}
 
说明:执行结果看到此台测试机上面只有一块磁盘sda
 
2.获取磁盘I/O信息
 
a.使用iostat收集磁盘I/O信息(这条指令是每隔一秒将磁盘信息内容写入到/tmp/iostat_output,并且后台运行)
     1.apt-get install sysstat(有些机器上面没有安装sysstat,如果有了可以忽略此步骤)
      安装完之后可以使用 iostat 展示信息如下:
      root@ubuntu-14:/etc/zabbix/os# iostat
     Linux 3.13.0-24-generic (ubuntu-14) 11/20/2015 _x86_64_(2 CPU)
 
      avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                      1.70    0.01    1.30    0.01    0.00   96.99
 
      Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
        sda               0.55         1.17        12.60    1715312   18448440
       dm-0              0.89         0.98        12.20    1440157   17864000
       dm-1              0.15         0.19         0.40     272380     584364
 
     2.nohup /usr/bin/iostat -dxkt 1 > /tmp/iostat_output 2>/dev/null
 
b.编写脚本(disk_status.sh)
 
#/bin/bash
device=$1
item=$2
 
case $item in
         rrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $2}'
            ;;
         wrqm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}'
            ;;
          rps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}'
            ;;
          wps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}'
            ;;
        rKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}'
            ;;
        wKBps)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}'
            ;;
     avgrq-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}'
            ;;
     avgqu-sz)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}'
            ;;
        await)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}'
            ;;
        svctm)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}'
            ;;
         util)
            /usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}'
            ;;
 
esac
 
3.修改zabbix-agent配置文件(zabbix-agentd.conf)
 
      1.添加用户参数
              UserParameter=disk.discovery,/bin/bash /etc/zabbix/os/disk_discovery.sh 
              UserParameter=disk.status
[*],/bin/bash /etc/zabbix/os/disk_status.sh $1 $2
      2.检查ServerActive(我的是服务器和客户端不在同一台机器上面)
              #ServerActive=127.0.0.1
              ServerActive= 服务器IP
 
二、服务端(监控端)
1.root@zabbixserv:/usr/bin# zabbix_get -s 客户端IP -p 10050 -k disk.discovery
{
"data":[
{"{#DISK_NAME}":"sda"}
]
}
2.root@zabbixserv:/usr/bin# zabbix_get -s 客户端IP -p 10050 -k disk.status
8.00
在此过程中如果没有显示数据,那么请去查看日志/var/log/zabbix-agent/zabbix-agentd.log
和/var/log/zabbix-server/zabbix-server.log(查看具体错误进行处理)。
三、在网页上进行设置模板
1.create discovery rule


 2.create Item prototypes
这里我创建了5个
 


 
以avgqu-sz为例设置如下:

 3.create graph prototypes


 
查看结果如下:


 
 
 如果是2.4.4的版本可以直接导入模板 (附件中zbx_export_disk_template.xml)
 
 
 
 
 
 
 
 
页: [1]
查看完整版本: Zabbix动态监控磁盘I/O