Zabbix 監控磁盤IO狀態
系統信息
[root@SZVMAPZABBIX02-UAT ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.7 (Santiago) [root@SZVMAPZABBIX02-UAT ~]# uname -a Linux SZVMAPZABBIX02-UAT 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:37 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux [root@SZVMAPZABBIX02-UAT ~]#
一、監控原理
基本原理:通過分析/proc/diskstats文件,來對IO的性能進行監控。解釋如下:
+++++++++++++++++++++++++++對/proc/diskstats的解釋++++++++++++++++++++++++++
[root@SZVMAPZABBIX02-UAT scripts]# cat /proc/diskstats | grep sda | head -1 8 0 sda 18478 6919 738754 128827 212536 231189 3549992 8932028 0 3756735 9060752 [root@SZVMAPZABBIX02-UAT scripts]#
第一至第三個域,分別是主設備號,次設備號,設備名稱
第4個域:讀完成次數 ----- 讀磁盤的次數,成功完成讀的總次數。
第5個域:合並讀完成次數, 第9個域:合並寫完成次數。為了效率可能會合並相鄰的讀和寫。從而兩次4K的讀在它最終被處理到磁盤上之前可能會變成一次8K的讀,才被計數(和排隊),因此只有一次I/O操作。這個域使你知道這樣的操作有多頻繁。
第6個域:讀扇區的次數,成功讀過的扇區總次數。
第7個域:讀花費的毫秒數,這是所有讀操作所花費的毫秒數(用__make_request()到end_that_request_last()測量)。
第8個域:寫完成次數 ----寫完成的次數,成功寫完成的總次數。
第9個域:合並寫完成次數 -----合並寫次數。
第10個域:寫扇區次數 ---- 寫扇區的次數,成功寫扇區總次數。
第11個域:寫操作花費的毫秒數 --- 寫花費的毫秒數,這是所有寫操作所花費的毫秒數(用__make_request()到end_that_request_last()測量)。
第12個域:正在處理的輸入/輸出請求數 -- -I/O的當前進度,只有這個域應該是0。當請求被交給適當的request_queue_t時增加和請求完成時減小。
第13個域:輸入/輸出操作花費的毫秒數 ----花在I/O操作上的毫秒數,這個域會增長只要field 9不為0。
第14個域:輸入/輸出操作花費的加權毫秒數 ----- 加權, 花在I/O操作上的毫秒數,在每次I/O開始,I/O結束,I/O合並時這個域都會增加。這可以給I/O完成時間和存儲那些可以累積的提供一個便利的測量標准。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二、配置Key
本次介紹的方法是比較簡單的,並沒有設置自動發現本地磁盤,我們就假設我們的設備有兩個磁盤sda、sdb,如果你的設備是單個磁盤的話也很簡單,你只需要把sdb的Items禁用掉就可以了,后期會增加自動發現本地磁盤的方法。
cat /data/zabbix/etc/zabbix_agentd.conf UserParameter=disk.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}' UserParameter=disk.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}' UserParameter=disk.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}' UserParameter=disk.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}' UserParameter=disk.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}' UserParameter=disk.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}' UserParameter=disk.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}' UserParameter=disk.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}' UserParameter=nginx.status[*],/data/zabbix/scripts/ngx-status.sh $1
三、導入模版
模版在附件處,請下載
------------------------------------------分割線------------------------------------------
四、結果展示