Zabbix 自動發現並監控磁盤IO、報警


引言

Zabbix並沒有提供模板來監控磁盤的IO性能,所以我們需要自己來創建一個,由於一台服務器中磁盤眾多,如果只有一兩台可以手動添加,但服務集群達到幾十那就非常麻煩,因此需要利用自動發現這個功能,自動發現后自動添加對服務器磁盤的監控,而且添加磁盤后也會自動添加到監控,實現自動化運維的效果,接下來我們就來看看怎么自動發現磁盤並自動監控磁盤的IO性能,再設置觸發器,IO達到閾值后發出報警

iostat簡介

iostat主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。所以在使用iostat監控系統IO負載的時候,不要直接iostat取結果,而是iostat -dxkt 1 2取結果,否則得到的數據根本不正確

iostat安裝

yum -y install sysstat

iostat常用參數說明

-c      # 僅顯示CPU統計信息.與-d選項互斥.
-d      # 僅顯示磁盤統計信息.與-c選項互斥.
-p      # 可以報告出每塊磁盤的每個分區的使用情況
-k      # 以K為單位顯示每秒的磁盤請求數,默認單位塊.
-t      # 在輸出數據時,打印搜集數據的時間.
-V      # 打印版本號和幫助信息.
-n    顯示NFS(network filesystem)報告
-x      # 輸出擴展信息.

iostat命令輸出說明1

[root@centos181002 ~]# iostat Linux 3.10.0-957.el7.x86_64 (centos181002) 2019年03月17日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.67 0.00 9.07 0.02 0.00 90.23 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 55.56 65.91 27144.77 174751 71974361 sdb 0.04 1.03 0.00 2720 0 scd0 0.01 0.39 0.00 1028 0 dm-0 54.83 61.23 27144.00 162342 71972313 dm-1 0.03 0.93 0.00 2460 0 ## avg-cpu段: %user: 在用戶級別運行所使用的CPU的百分比. %nice: nice操作所使用的CPU的百分比. %sys: 在系統級別(kernel)運行所使用CPU的百分比. %iowait: CPU等待硬件I/O時,所占用CPU百分比. %idle: CPU空閑時間的百分比. ## Device段: tps 每秒I/O數(即IOPS。磁盤連續讀和連續寫之和) Blk_read/s 每秒從設備讀取的數據大小,單位是block/s(塊每秒) Blk_wrtn/s 每秒寫入設備的數量,單位是block/s Blk_read 從磁盤讀出的塊的總數 Blk_wrtn 寫入磁盤的塊的總數 

iostat命令輸出說明2

[root@centos181002 ~]# iostat dxkt Linux 3.10.0-957.el7.x86_64 (centos181002) 2019年03月17日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.65 0.00 9.05 0.56 0.00 89.73 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn rrqm/s:每秒讀請求被合並次數 wrqm/s:每秒寫請求被合並次數 r/s:每秒完成的讀次數 w/s:每秒完成的寫次數 rkB/s:每秒讀數據量(kb) wkB/s:每秒寫數據量(kb) avgrq-sz:平均每次IO請求的扇區大小 avgqu-sz:平均每次IO請求的隊列長度(越短越好) await:平均每次IO請求等待時間(毫秒),一般的系統IO等待時間應該低於5ms,如果大於10ms就比較大了。 這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短 反之差值越大,隊列時間越長,說明系統出了問題。 r_await:讀的平均耗時(毫秒) w_await:寫入平均耗時(毫秒) svctm:平均每次IO請求處理時間(毫秒) 如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好 如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。 %util:IO隊列非空比例,該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了 

環境

[root

第一步:Zabbix Agent端設置

1.安裝iostat

yum -y install sysstat

2.編寫自動發現磁盤腳本並給予執行權限

mkdir -p /etc/zabbix/scripts/
cat > /etc/zabbix/scripts/disk_discovery.sh <<\EOF
#!/bin/bash
############################################################
# $Name:         disk_discovery.sh
# $Function:     DISK DISCOVERY
# $Author:       Xiaoliu.liu 1377133225@qq.com
# $organization: Xiaoliu.liu
# $Create Date:  2019/3/17
# $Description:  Monitor DISK DISCOVERY
############################################################

disk_array=(`grep -E "(vd[a-z]$|sd[a-z]$)" /proc/partitions | awk '{print $4}'`)
length=${#disk_array[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
        printf '\n\t\t{'
        printf "\"{#DISK_NAME}\":\"${disk_array[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf  "\n\t]\n"
printf "}\n"
EOF

cat /etc/zabbix/scripts/disk_discovery.sh
chmod +x /etc/zabbix/scripts/disk_discovery.sh

3.編寫監控磁盤IO腳本

cat > /etc/zabbix/scripts/disk_io.sh <<\EOF
#!/bin/bash
############################################################
# $Name:         disk_discovery.sh
# $Function:     DISK DISCOVERY
# $Author:       Xiaoliu.liu 1377133225@qq.com
# $organization: Xiaoliu.liu
# $Create Date:  2019/3/17
# $Description:  Monitor DISK DISCOVERY
############################################################

Device=$1
DISK=$2

case $DISK in

#每秒讀請求被合並次數
rrqm_s)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $2}'
;;

#每秒寫請求被合並次數
wrqm_s)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $3}'
;;

#每秒完成的讀次數
r_s)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $4}'
;;

#每秒完成的寫次數
w_s)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $5}'
;;

#每秒讀數據量(MB)
rkb_s)
        iostat -dxmt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $6}'
;;

#每秒寫數據量(MB)
wkb_s)
        iostat -dxmt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $7}'
;;

#平均每次IO請求的扇區大小
avgrq_sz)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $8}'
;;

#平均每次IO請求的隊列長度(越短越好)
avgqu_sz)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $9}'
;;

#平均每次IO請求等待時間(毫秒)
await)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $10}'
;;

#讀的平均耗時(毫秒)
r_await)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $11}'
;;

#寫入平均耗時(毫秒)
w_await)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $12}'
;;

#平均每次IO請求處理時間(毫秒)
svctm)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $13}'
;;

#IO隊列非空比例
util)
        iostat -dxkt 1 2 | grep "\b$Device\b" | awk 'NR==2{print $14}'
;;

#IOPS
iops)
    iostat -dk 1 2 | grep "\bsda\b" | awk 'NR==2{print $2}'
;;
esac
EOF
cat /etc/zabbix/scripts/disk_io.sh
chmod +x /etc/zabbix/scripts/disk_io.sh

4.編輯zabbix_agentd的配置文件支持自定義腳本並

vim /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters=1 Include=/etc/zabbix/zabbix_agentd.d/*.conf 

5.創建disk_io的key文件

cat > /etc/zabbix/zabbix_agentd.d/disk_status.conf <<\EOF UserParameter=disk.discovery[*],/etc/zabbix/scripts/disk_discovery.sh UserParameter=disk.io[*],/etc/zabbix/scripts/disk_io.sh $1 $2 EOF cat /etc/zabbix/zabbix_agentd.d/disk_status.conf 參數說明: 其中的格式為UserParameter=<key>,<command> <key>:就是在web端添加監控腳本時的key值 <command>:就是該key值對應的執行腳本,也就是腳本執行路徑 

6.重啟Zabbix Agent服務

systemctl restart zabbix-agent.service

7.在Zabbix Server端測試

zabbix_get -s 11.11.11.62 -k 'disk.discovery[*]' [root



第二步:Zabbix Server端導入模板並關聯到主機即可。

模板下載:https://pan.baidu.com/s/10Jcwt2ScdjW_rwHdz7QBdw

提取碼: tqzw

 

鏈接:https://pan.baidu.com/s/1sJ68wDarGP6I9aqxA5d5Ww  密碼:ssq8

 
         
在被監控端上模擬磁盤寫入進行測試
1
dd if=/dev/zero of=/a.txt bs=8k count=30000


轉自:https://www.jianshu.com/p/4b1c83d50e1a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM