15. 监控磁盘IO使用率

计算机有三大件:CPU、内存和磁盘,这三者中往往是磁盘会“拖后腿”。在生产环境,作为数据库角色的服务器磁盘建议拿4块硬盘做磁盘阵列RAID10,这样既保证数据读写速度也保证数据的安全。

本案例要求写一个监控磁盘IO使用率的脚本,实时查看IO使用情况,防止因为磁盘IO效率低而导致MySQL查询慢的问题。

具体要求如下:

1)磁盘IO使用超过90就记录日志并邮件告警;

2)假设记录日志的目录是 /data/iolog/ ;

3)找出导致磁盘IO使用率过高的进程。

邮件脚本如下:

#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mine.text import MIMEText
import sys
mail_host = 'stmp.163.com'
mail_user = '[email protected]'
mail_pass = 'your_mail_password'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
    me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content,'plain','utf-8')
    msg['Subject'] = subject
    msg['From'] = me
    msg['to'] = to_list
    try:
        s = smtplib:SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me,to_list,msg.as_string())
        s.close()
        return True
    except Exception,e:
        print str(e)
        return False
if __name__ == "__main__"
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

参考脚本如下:

#!/bin/bash
#监控磁盘IO使用率并告警

#定义收件人邮箱
mail="/usr/local/sbin/mail.py"
mail_user=[email protected]

if ! which iostat &>/dev/null
then
    yum install -y sysstat
fi

if ! which iotop &>/dev/null
then
    yum install -y iotop
fi

logdir=/data/iolog

dt=`date +%F`           #以日期作为日志名字

#获取IO,取5次平均值
get_io()
{
    iostat -dx 1 5 > $logdir/iostat.log
    sum=0
    
    for ut in `grep "^$1" $logdir/iostat.log |awk '{print $NF}' |cut -d '.' -f 1`
    do
        sum=$[$sum+$ut]
    done
    echo $[$sum/5]
}

while ture
do
    for d in `iostat -dx |egrep -v '^$|Device:|CPU\}' |awk '{print $1}'
    do
        io=`get_io $d`
        
        if [ $io -gt 90 ]
        then
            date >> $logdir/$dt
            cat $logdir/iostat.log >> $logdir/$dt
            iotop -obn2 >> $logdir/$dt
            echo "###################" >> $logdir/$dt
            
            python $mail $mail_user "磁盘IO使用率超过90%" "`cat $logdir/$dt`" 2>/dev/null
        fi
    done
    sleep 10
done

你可能感兴趣的:(#,Shell脚本)