告警系统邮件引擎

首先在、创建、/usr/local/sbin/mon/mail

mail.sh内容

1. //其中mail.py内容到这里下载https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py


Python脚本内容


#!/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.163.com'

    gport = 25

    try:

        msg = MIMEText(unicode(content).encode('utf-8'))

        msg['from'] = mailfrom

        msg['to'] = mailto

        msg['Reply-To'] = mailfrom

        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)

        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]','740183413abc','[email protected]',to,subject,content)

if __name__ == "__main__":

    main()


2.在/usr/local/sbin/mon/mail/mail.sh 创建邮件脚本

vim /usr/local/sbin/mon/mail/mail.sh

脚本内容:

#!/bin/bash

 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}'`    //将日志中最后一行的第一段赋值给t_s2

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  

脚本中最重要的就是第一次告警中的时间戳和之后进行计时每十分钟进行 问题检测,如果问题还是在则继续发邮件


主要逻辑是,当告警从未出现时发送第一次邮件告警。发送了第一次告警后每十分钟内

查看告警是否恢复,不恢复继续发送邮件

邮件的内容用$1、$2、$3表示。具体内容在

子脚本监控项中定义

3.执行告警系统:

写到 执行任务中:每分钟执行

crontab -e

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



测试脚本的时候先把配置文件的监控502=1改为0