首先创建Discovery rules,在agent端配置对应的UserParameter,调用编写好的shell脚本,动态查找出已经挂载的磁盘分区;然后创建Item prototypes,使用vfs.dev.read[device,,]和vfs.dev.write[device,,]来监控磁盘分区的IO,包括磁盘读写速率、每秒读写扇区数、每秒读写操作数;然后创建Graph prototypes,生成磁盘IO图表。 

一、自动发现脚本

discan.sh

#!/bin/bash
#written by boge
#mail:ccyhaoran@live.cn
diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bxvd[abcdefg]\b|\bvd[abcdefg]\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"
echo disk_scan>> /tmp/disk_scan
~


chmod +x discan.sh 

做下测试:
./discan.sh

{

"data":[

{"{#DISK_NAME}":"sda"},

{"{#DISK_NAME}":"sdb"}

]

}

该脚本路径是/opt/zabbix/bin下。


二、iostat输出

需要写到定时任务的文件中去。

0 * * * * /usr/bin/iostat -m -x -d 30 120 >/tmp/iostat_output 2>&1

30秒执行一次iostat,执行120次、一个小时执行一次该脚本。


三、自定义key配置文件

该文件的路径在/opt/zabbix/etc/zabbix_agentd.conf.d下。文件名为iostat.conf


UserParameter=io.scandisk[*],/opt/zabbix/bin/disk_scan.sh $1

UserParameter=io.rps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk '{print $$4}'

UserParameter=io.wps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$5}'

UserParameter=io.rMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$6}'

UserParameter=io.wMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$7}'

UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$8}'

UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$9}'

UserParameter=io.await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$10}'

UserParameter=io.svctm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$11}'

UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$12}'

一共有9个键值

四、web页面添加自动发现

  1. 创建模板iostat

  2. 在该模板下创建探索iostat_discovery

3、创建项目原型。->针对九个键值来创建项目原型

例子:名称:IO_avgqu-sz on $1

键值:io.avgqu-sz[{#DISK_NAME}]

数据类型:建议设为浮点型。

单位:需要看iostat的输出各个属性的单位对应起来即可。

其他选项均可默认。

因为每个Userparameter都要有个项目原型与其对应。所以针对此例子需要做九个项目原型。

名称  键值 间隔 历史记录 趋势 类型 应用集状态 
IO_avgqu-sz on {#DISK_NAME}io.avgqu-sz[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_avgrq-sz on {#DISK_NAME}io.avgrq-sz[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_await on {#DISK_NAME}io.await[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_rMBps on {#DISK_NAME}io.rMBps[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_rps on {#DISK_NAME}io.rps[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_svctm on {#DISK_NAME}io.svctm[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_util on {#DISK_NAME}io.util[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_wMBps on {#DISK_NAME}io.wMBps[{#DISK_NAME}]30090365Zabbix 代理iostat已启用
IO_wps on {#DISK_NAME}io.wps[{#DISK_NAME}]30090365Zabbix 代理iostat已启用

启用所选的停用所选的删除所选的
4.创建图形原型

根据需要可以将几个key值放在一个图形里。

例如:

  • 名称

  • 图形类别

    正常层积的Pie爆发的

  • 展示图标

  • 展示工作时间

  • 展示触发器

  • 百分比线(左)

     

  • 百分比线(右)

     

  • 纵轴Y最小值MIN

    计算的固定的项目

  • 纵轴最大值

    计算的固定的项目

  • 项目



    名称功能绘图风格纵轴Y侧颜色动作

    1:iostat: IO_await on {#DISK_NAME}  所有  最小  平均  最大    线  填满的区域  粗线  点  虚线  梯度线    左侧  右   

       


    2:iostat: IO_svctm on {#DISK_NAME}  所有  最小  平均  最大    线  填满的区域  粗线  点  虚线  梯度线    左侧  右   

       

       

到此为止。自动发现做完了。可以自己再创建触发器来设置阀值。。。

可以通过server的输出日志来解决错误。