首先创建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页面添加自动发现
创建模板iostat
在该模板下创建探索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}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_avgrq-sz on {#DISK_NAME} | io.avgrq-sz[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_await on {#DISK_NAME} | io.await[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_rMBps on {#DISK_NAME} | io.rMBps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_rps on {#DISK_NAME} | io.rps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_svctm on {#DISK_NAME} | io.svctm[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_util on {#DISK_NAME} | io.util[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_wMBps on {#DISK_NAME} | io.wMBps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 | |
IO_wps on {#DISK_NAME} | io.wps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已启用 |
启用所选的停用所选的删除所选的 |
根据需要可以将几个key值放在一个图形里。
例如:
名称
宽
高
图形类别
正常层积的Pie爆发的
展示图标
展示工作时间
展示触发器
百分比线(左)
百分比线(右)
纵轴Y最小值MIN
计算的固定的项目
纵轴最大值
计算的固定的项目
项目
名称 功能 绘图风格 纵轴Y侧 颜色 动作 1: iostat: IO_await on {#DISK_NAME} 所有 最小 平均 最大 线 填满的区域 粗线 点 虚线 梯度线 左侧 右 2: iostat: IO_svctm on {#DISK_NAME} 所有 最小 平均 最大 线 填满的区域 粗线 点 虚线 梯度线 左侧 右
到此为止。自动发现做完了。可以自己再创建触发器来设置阀值。。。
可以通过server的输出日志来解决错误。
转载于:https://blog.51cto.com/linuxbo/1709786