一、告警系統郵件引擎: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