9.20任务

20.23/24/25 告警系统邮件引擎

邮件告警脚本。

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from  subprocess import *

def sendqqmail(username,password,mailfrom,mailto,subject,content):
    gserver = 'smtp-mail.outlook.com' 
    gport = 587  

    try:
        # msg = MIMEText(unicode(content).encode('utf-8')) //如果发送的邮件有乱码,可以尝试把这行改成如下:
        msg = MIMEText(content,'plain','utf-8') 
        msg['from'] = mailfrom
        msg['to'] = mailto
        msg['Reply-To'] = mailfrom
        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)
        smtp.starttls()  
        smtp.set_debuglevel(0)
        smtp.ehlo()
        smtp.login(username,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err


def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
    sendqqmail('[email protected]','z1x2c7v2b7','[email protected]',to,subject,content)

if __name__ == "__main__":
    main()
  

发邮件的server和port需要按照自己的邮件配置。

mail.py只是一个发信的工具,最核心的部分是mail.sh。

因为所有的子脚本中用到的都是mail.sh。

log=$1
t_s=`date +%s`
t_s2=`date -d "2 hours ago" +%s`
if [ ! -f /tmp/$log ]
then
    echo $t_s2 > /tmp/$log
fi
t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
echo $t_s>>/tmp/$log
v=$[$t_s-$t_s2] #两次告警的时间差
echo $v
if [ $v -gt 3600 ]  #如果超过一个小时,我认为这是一个新的告警
then
    ./mail.py  $1  $2  $3
    echo "0" > /tmp/$log.txt
else
    if [ ! -f /tmp/$log.txt ]  #如果没有超过一个小时,我认为上一次告警你还没有解决
    then
        echo "0" > /tmp/$log.txt
    fi
    nu=`cat /tmp/$log.txt`
    nu2=$[$nu+1]
    echo $nu2>/tmp/$log.txt
    if [ $nu2 -gt 10 ]
    then
         ./mail.py  $1 "trouble continue 10 min $2" "$3"
         echo "0" > /tmp/$log.txt
    fi
fi  

这里面主要是做告警收敛。难点在于这个计时器是借助外部文件来做计数的。

视频中详细介绍了这个脚本的各中场景下的输出,不懂的时候回去看视频。


20.26 运行告警系统

root@lhy-server:/usr/local/sbin/mon/bin# crontab -e

* * * * * cd /usr/local/sbin/mon/bin; bash main.sh

这里我们为了测试可以手动运行

root@lhy-server:/usr/local/sbin/mon# cd /usr/local/sbin/mon/bin/
root@lhy-server:/usr/local/sbin/mon/bin# ls
main.sh
root@lhy-server:/usr/local/sbin/mon/bin# bash -x main.sh 
+ export send=1
+ send=1
++ /sbin/ifconfig
++ grep -A1 'enp2s0 '
++ tail -1
++ awk '{print $2}'
++ awk -F: '{print $2}'
+ export addr=192.168.0.109
+ addr=192.168.0.109
++ pwd
+ dir=/usr/local/sbin/mon/bin
++ echo /usr/local/sbin/mon/bin
++ awk -F/ '{print $NF}'
++ sed 's/\/*$//'
+ last_dir=bin
+ '[' bin == bin ']'
+ conf_file=../conf/mon.conf
+ exec

日志也好像没有问题

root@lhy-server:/usr/local/sbin/mon/bin# cat ../log/
err.log  mon.log  
root@lhy-server:/usr/local/sbin/mon/bin# cat ../log/mon.log 
2018-09-21 22:50:01 load average
22:50:01 load is 0
2018-09-21 22:51:01 load average
22:51:01 load is 0
2018-09-21 22:52:01 load average
22:52:01 load is 0
2018-09-21 22:53:01 load average
22:53:01 load is 0
2018-09-21 22:53:18 load average
22:53:18 load is 0
2018-09-21 22:59:07 load average
22:59:07 load is 0
2018-09-21 23:03:49 load average
23:03:49 load is 0
2018-09-21 23:17:17 load average
23:17:17 load is 0
2018-09-21 23:17:31 load average
23:17:31 load is 0

脚本出现问题很正常,因为我们缺少很多服务,比如502我们暂时还监控不了。

这个还需要自己摸索。

 

转载于:https://my.oschina.net/u/3866688/blog/2137520

你可能感兴趣的:(9.20任务)