74:告警系統郵件引擎 運行告警系統

一、告警系統郵件引擎python

由於以前作zabbix的時候,用過mail.py,這裏直接調用就能夠了:vim

可是告警郵件引擎核心,conf主配置文件調用到的都是mail.sh,因此這裏須要定義調用mail.py的sh腳本:bash

mail.sh的目錄是作告警收斂目的就是1分鐘前發現問題,而後到10分鐘後,服務尚未恢復,就會告訴管理人員10分鐘了服務還未恢復:,若是不作告警收斂,在發現問題的時候直接告警就好,可是,可能會發生1分鐘前發現問題,1分鐘戶問題解決,這樣就會變成誤報,這樣會很麻煩:測試

1:首先須要在/usr/local/bin/mail/定義兩個文件:  mail.py    mail.shdebug

mail.py的內容日誌

[root@localhost_01 mail]# cat mail.py 
#!/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 = MIMEText(content,'plan','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('yzhm188@163.com','受權碼','yzhm188@163.com',to,subject,content)

if __name__ == "__main__":
    main()

mai.sh的內容以下:code

[root@localhost_01 mail]# vim mail.sh 
#!/bin/bash
log=$1   
t_s=`date +%s`
t_s2=`date -d "2 hours ago" +%s`  //定義2個小時的時間戳
#日誌不存在就建立日誌
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

#當故障存在3600秒,就會進行告警

if [ $v -gt 3600 ]
then
    ../mail/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/mail.py  $1 "trouble continue 10 min $2" "$3"
         echo "0" > /tmp/$log.txt   //郵件告警結束之後,從新開始計數
    fi
fi

註釋:腳本運用於間隔3600秒(1小時)後則再次報次故障信息,經過時間上一次和這一次的時間戳來判斷:server

註釋:核心判斷:經過計時器、計數:blog

 

二、運行告警系統crontab

執行告警系統,確定要是每分鐘,執行一次:

[root@localhost_01 mail]# crontab -e
[root@localhost_01 mail]# cat /var/spool/cron/root 
* * * * * cd /usr/local/sbin/mon/bin ; bahs main.sh
You have mail in /var/spool/mail/root

註釋:監控發送郵件的部分,儘可能少用空格,由於mail.py發送郵件是以 空格來定義三個參數的:

測試:咱們以測試系統負載爲例,修改load.sh的負載腳本,當爲0時則告警,而後運行sh /usr/local/sbin/mon/bin/main.sh,而後查看郵箱,有郵件過來:

註釋:mail.py也一次定義多個發件人:以下:

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000

相關文章
相關標籤/搜索