1、配置脚本
在被监控端编写自动发现和监控磁盘IO脚本
脚本目录/etc/zabbix/zabbix_agentd.d/script
 
[root@baiwang_database1 zabbix]# mkdir script
[root@baiwang_database1 zabbix]# cd script/
• 配置磁盘发现脚本
[root@baiwang_database1 script]# vi disk_discovery.sh
内容如下
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\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"
• 配置抽取磁盘io信息的脚本
[root@baiwang_database1 script]# vi disk_status.sh
内容如下
#/bin/sh
Device=$1
DISK=$2
case $DISK in
         "rrqm") iostat -dxkt 1 3 |grep "\b$Device\b"|tail -1|awk '{print $2}'
                   ;;
         "wrqm") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $3}'
                   ;;
         "read.ps") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $4}'
                   ;;
         "write.ps") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $5}'
                   ;;
         "rKB.ps") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $6}'
                   ;;
         "wKB.ps") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $7}'
                   ;;
         "avgrq-sz") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $8}'
                   ;;
         "avgqu-sz") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $9}'
                   ;;
         "await") iostat -dxkt 1 3|grep "\b$Device\b" |tail -1|awk '{print $10}'
                   ;;
         "r_await") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $11}'
                   ;;
         "w_await") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $12}'
                   ;;
         "svctm") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $13}'
                   ;;
         "util") iostat -dxkt 1 3 |grep "\b$Device\b" |tail -1|awk '{print $14}'
                   ;;
     "tps") iostat -dk 1 2|grep "\b$Device\b" |tail -1|awk '{print $2}'
                ;;
esac
• 赋予脚本执行权限
[root@baiwang_database1 script]# chmod a+x disk_discovery.sh
[root@baiwang_database1 script]# chmod a+x disk_status.sh
 
④本地测试脚本
[root@baiwang_database1 script]# sh disk_discovery.sh
{
         "data":[
                   {"{#DISK_NAME}":"sda"}
         ]
}
[root@baiwang_database1 script]# sh disk_status.sh sda util
18.20
[root@baiwang_database1 script]# sh disk_status.sh sda await
13.38
[root@baiwang_database1 script]# sh disk_status.sh sda w_await
13.25
[root@baiwang_database2 script]# sh disk_status.sh sda tps
93.00
测试取数正常
⑤创建zabbix配置文件
# cat disk_io.conf
#!/bin/bash
UserParameter=disk.discovery[*],/etc/zabbix/scripts/disk_discover.sh
UserParameter=disk.status[*],/etc/zabbix/scripts/disk_status.sh $1 $2
2、创建监控模板
2.1 创建模板名称
配置à模板à创建模板
 
2.2 创建自动发现
 
点击创建自动发现规则
键值disk.discovery
 
 
更新后,在自动发现的项里创建监控项,触发器,图形等
 
(下图为后来补充的图)
 
下面开始创建
2.3 创建监控项
配置参数如下所示
{#DISK_NAME}每个写IO的平均耗时(毫秒)
disk.status[{#DISK_NAME},w_await]
信息类型:浮点数
单位: ms
        
{#DISK_NAME}平均每次设备I/O请求的操作时间(毫秒)
disk.status[{#DISK_NAME},svctm]
信息类型:浮点数
单位: ms
 
{#DISK_NAME}平均每次IO请求的数据块大小
disk.status[{#DISK_NAME},avgrq-sz]
信息类型:浮点数
单位: KB
 
{#DISK_NAME}平均每次IO请求的队列长度
disk.status[{#DISK_NAME},avgqu-sz]
信息类型:浮点数
单位:
 
{#DISK_NAME}平均每次设备I/O等待和操作的时间(毫秒)
disk.status[{#DISK_NAME},await]
信息类型:浮点数
单位: ms
 
{#DISK_NAME}每秒写入设备的大小
disk.status[{#DISK_NAME},wKB.ps]
信息类型:浮点数
单位:
 
 {#DISK_NAME}每秒合并到设备的写入请求数
disk.status[{#DISK_NAME},wrqm]
信息类型:浮点数
单位:
 
{#DISK_NAME}每秒写I/O设备次数
disk.status[{#DISK_NAME},write.ps]
信息类型:浮点数
单位:
 
 {#DISK_NAME}每秒读I/O设备次数
disk.status[{#DISK_NAME},read.ps]
信息类型:浮点数
单位:
 
 {#DISK_NAME}每秒读取设备大小
disk.status[{#DISK_NAME},rKB.ps]
信息类型:浮点数
单位:KB
 
 {#DISK_NAME}每秒合并到设备的读取请求数
disk.status[{#DISK_NAME},rrqm]
信息类型:浮点数
单位:
 
{#DISK_NAME}每秒IO请求操作占比(util)
disk.status[{#DISK_NAME},util]
信息类型:浮点数
单位: %
 
{#DISK_NAME}每个读请求平均所需时间(毫秒)
disk.status[{#DISK_NAME},r_await]
信息类型:浮点数
单位:ms
 
{#DISK_NAME}设备每秒I/O的请求次数
disk.status[{#DISK_NAME},tps]
信息类型:浮点数
 
 
 
 
创建完成后,如下
 
2.4 创建触发器
 
2.5 创建图形
{#DISK_NAME} IO队列长度
{#DISK_NAME} I/O时间占比util
{#DISK_NAME} I/O 请求处理时间
{#DISK_NAME} I/O 读写大小
{#DISK_NAME} I/O 请求次数
{#DISK_NAME} I/O 每秒请求的块平均大小
 
创建每秒io时间图形
 
 
创建每秒io 次数图形
 
 
创建io 读写大小的图形
 
后面略…………………………
创建完成后如下
 
3、测试自动发现脚本
登录zabbix server 10.249.100.251测试脚本是否能取到数值
[root@localhost ~]# ip a|grep inet
    inet 127.0.0.1/8 scope host lo
    inet 10.249.100.251/24 brd 10.249.100.255 scope global eno16777728
[root@localhost ~]# zabbix_get -s 10.249.2.185 -k disk.discovery
{
         "data":[
                   {"{#DISK_NAME}":"sda"}
         ]
}
[root@localhost ~]# zabbix_get -s 10.249.2.185 -k "disk.status[sda,w_await]"
30.75
[root@localhost ~]# zabbix_get -s 10.249.2.185 -k "disk.status[sda,util]"
8.60
[root@master script]# sh disk_discovery.sh
{
         "data":[
                   {"{#DISK_NAME}":"sda"}
         ]
}
 
测试其他客户端
[root@localhost ~]# # zabbix_get -s 10.249.4.143 -k disk.discovery
{
         "data":[
                   {"{#DISK_NAME}":"sda"},
                   {"{#DISK_NAME}":"sdb"},
                   {"{#DISK_NAME}":"sdc"}
         ]
}
[root@localhost ~] # zabbix_get -s 10.249.4.143 -k "disk.status[sdc,r_await]"
2.09
[root@localhost ~] # zabbix_get -s 10.249.4.143 -k "disk.status[sdc,write.qps]"
0.45
4、配置zabbix客户端
 
 
5、效果展示
 
 
到此配置完毕。
如果zabbix安装了grafana插件,显示会更加美观