zabbixモニタio
dd ioテスト
書き込み25 G
time dd if=/dev/zero of=/opt/iotest/test.dbf bs=8k count=3000000
読み取り
time dd if=/opt/iotest/test.dbf of=/dev/null bs=8k
cd/usr/local/zabbix/etc/zabbix_agentd.conf.d
cat vfsiojohn.conf
UserParameter=vfsiojohn.discovery,/usr/bin/python/usr/local/zabbix/bin/disk_discovery.py
UserParameter=disk.status[*],/usr/local/zabbix/bin/disk_status.sh $1 $2
cat /usr/local/zabbix/bin/disk_discovery.py
cat /usr/local/zabbix/bin/disk_status.sh
バックグラウンドスクリプトの実行
cd/tmp && nohup/usr/bin/iostat -dxkt 1 >/tmp/iostat_output 2>/dev/null &
ansible.sh
ansible -i hosts all -m script -a '/etc/ansible/iostatkill.sh'
ansible -i hosts all -m shell -a 'cd/tmp && echo `/usr/bin/iostat -dxkt`>iostat_output'
ansible -i hosts all -m shell -a 'nohup/usr/bin/iostat -dxkt 1 >/tmp/iostat_output 2>/dev/null &'
cat /etc/ansible/iostatkill.sh
kill -9 `pgrep iostat`
システムにioモニタリングテンプレートが付属しているのはちょっと問題があります
さもないとデータが正確ではありません
書き込み25 G
time dd if=/dev/zero of=/opt/iotest/test.dbf bs=8k count=3000000
読み取り
time dd if=/opt/iotest/test.dbf of=/dev/null bs=8k
cd/usr/local/zabbix/etc/zabbix_agentd.conf.d
cat vfsiojohn.conf
UserParameter=vfsiojohn.discovery,/usr/bin/python/usr/local/zabbix/bin/disk_discovery.py
UserParameter=disk.status[*],/usr/local/zabbix/bin/disk_status.sh $1 $2
cat /usr/local/zabbix/bin/disk_discovery.py
#/usr/bin/python
#This script is used to discovery disk on the server
import subprocess
import json
args="cat /proc/diskstats |grep -E '\ssd[a-z]\s|\sxvd[a-z]\s|\svd[a-z]\s'|awk '{print $3}'|sort|uniq 2>/dev/null"
t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]
disks=[]
for disk in t.split('
'):
if len(disk) != 0:
disks.append({'{#DISK_NAME}':disk})
print json.dumps({'data':disks},indent=4,separators=(',',':'))
cat /usr/local/zabbix/bin/disk_status.sh
#/bin/sh
device=$1
item=$2
case $item in
rrqm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $2}'
;;
wrqm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}'
;;
rps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}'
;;
wps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}'
;;
rKBps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}'
;;
wKBps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}'
;;
await)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}'
;;
svctm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}'
;;
util)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}'
;;
esac
バックグラウンドスクリプトの実行
cd/tmp && nohup/usr/bin/iostat -dxkt 1 >/tmp/iostat_output 2>/dev/null &
ansible.sh
ansible -i hosts all -m script -a '/etc/ansible/iostatkill.sh'
ansible -i hosts all -m shell -a 'cd/tmp && echo `/usr/bin/iostat -dxkt`>iostat_output'
ansible -i hosts all -m shell -a 'nohup/usr/bin/iostat -dxkt 1 >/tmp/iostat_output 2>/dev/null &'
cat /etc/ansible/iostatkill.sh
kill -9 `pgrep iostat`
システムにioモニタリングテンプレートが付属しているのはちょっと問題があります
さもないとデータが正確ではありません