zabbix自動發現規則之磁盤IO監控

本文章介紹zabbix自動發現規則之磁盤IO監控的案例實踐。python

主機名:mysql-slave
mysql

首先在zabbix_agent下定義一個獲取磁盤IO信息的腳本:
ios

cat /etc/zabbix/scripts/disk_io.sh
#!/bin/bash
Disk=$1
Option=$2
case $Option in
rrqm)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $2}'
;;
wrqm)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $3}'
;;
rps)
iostat -dxk 1 2|grep "\b$Disk\b"|tail -1|awk '{print $4}'
;;
wps)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $5}'
;;
rKBps)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $6}'
;;
wKBps)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $9}'
;;
await)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $10}'
;;
svctm)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $11}'
;;
util)
iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $12}'
;;
esac

簡單說一下這個iostat的指令:web

iostat是I/O statistics(輸入/輸出統計)的縮寫,用來動態監視系統的磁盤操做活動。sql

iostat[參數][時間][次數]shell

命令功能json

經過iostat方便查看CPU、網卡、tty設備、磁盤、CD-ROM 等等設備的活動狀況, 負載信息。bash

命令參數app

-C 顯示CPU使用狀況ide

-d 顯示磁盤使用狀況

-k 以 KB 爲單位顯示

-m 以 M 爲單位顯示

-N 顯示磁盤陣列(LVM) 信息

-n 顯示NFS 使用狀況

-p[磁盤] 顯示磁盤和分區的狀況

-t 顯示終端和CPU的信息

-x 顯示詳細信息

-V 顯示版本信息

disk屬性值說明:

rrqm/s: 每秒進行 merge 的讀操做數目.即 delta(rmerge)/s

wrqm/s: 每秒進行 merge 的寫操做數目.即 delta(wmerge)/s

r/s: 每秒完成的讀 I/O 設備次數.即 delta(rio)/s

w/s: 每秒完成的寫 I/O 設備次數.即 delta(wio)/s

rsec/s: 每秒讀扇區數.即 delta(rsect)/s

wsec/s: 每秒寫扇區數.即 delta(wsect)/s

rkB/s: 每秒讀K字節數.是 rsect/s 的一半,由於每扇區大小爲512字節.(須要計算)

wkB/s: 每秒寫K字節數.是 wsect/s 的一半.(須要計算)

avgrq-sz:平均每次設備I/O操做的數據大小 (扇區).delta(rsect+wsect)/delta(rio+wio)

avgqu-sz:平均I/O隊列長度.即 delta(aveq)/s/1000 (由於aveq的單位爲毫秒).

await: 平均每次設備I/O操做的等待時間 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)

svctm: 平均每次設備I/O操做的服務時間 (毫秒).即 delta(use)/delta(rio+wio)

%util: 一秒中有百分之多少的時間用於 I/O 操做,或者說一秒中有多少時間 I/O


定義自動發現規則的key

cat /etc/zabbix/scripts/disk_scan.py
import subprocess
import json
args="cat /proc/diskstats|awk '{print $3}'|grep -E '^[a-z]+$'|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split('\n'):
    if len(disk) != 0:
    disks.append({'{#DISK_NAME}':disk})
print json.dumps({'data':disks},indent=4,separators=(',',':'))


zabbix_agent配置文件

cat /etc/zabbix/zabbix_agentd.conf.d/userparameter_io.conf
UserParameter=disk.io[*], sudo /etc/zabbix/scripts/disk_io.sh $1 $2
UserParameter=disk.scan[*], python /etc/zabbix/scripts/disk_scan.py $1


zabbix web界面建立模板

建立模板

1p.png


設置模板名稱,所屬組和主機(自定義)

2p.png


建立Discovery

3p.png


設置Discovery

注意,這裏的key 是在zabbix_agent設置的disk.scan 的disk_scan.py腳本返回值

11p.png


建立item

4p.png


設置item

5p.png


建立完item,以下:

6p.png


返回mysql-slave主機界面查看item

7p.png


查看最新數據

8p.png


建立Graph

9p.png



查看Graphs

10p.png

相關文章
相關標籤/搜索