告警系統郵件引擎python
首先在、建立、/usr/local/sbin/mon/maillinux
mail.sh內容git
1. //其中mail.py內容到這裏下載https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
web
Python腳本內容vim
#!/usr/bin/env pythonbash
#-*- coding: UTF-8 -*-ide
import os,sys測試
reload(sys)spa
sys.setdefaultencoding('utf8').net
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('15521787110@163.com','740183413abc','15521787110@163.com',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
腳本中最重要的就是第一次告警中的時間戳和以後進行計時每十分鐘進行 問題檢測,若是問題仍是在則繼續發郵件
主要邏輯是,當告警從未出現時發送第一次郵件告警。發送了第一次告警後每十分鐘內
查看告警是否恢復,不恢復繼續發送郵件
郵件的內容用$一、$二、$3表示。具體內容在
子腳本監控項中定義
3.執行告警系統:
寫到 執行任務中:每分鐘執行
crontab -e
* * * * * cd /usr/local/sbin/mon/bin; bash main.sh
測試腳本的時候先把配置文件的監控502=1改成0