15. 监控磁盘IO使用率 傷城~ 2022-03-21 16:40 390阅读 0赞 计算机有三大件: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 = 'test@163.com' 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=admin@admin.com 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 --------------------
还没有评论,来说两句吧...