72.告警系統郵件引擎 運行告警系統

20.23/20.24/20.25 告警系統郵件引擎python

20.26 運行告警系統linux

 

 

 

 

 

20.23/20.24/20.25 告警系統郵件引擎git

 

 

 

 

 

郵件首先要有一個mail.py,如下。vim

由於咱們以前zabbix的時候作過,就能夠直接拷貝過來bash

mail.sh內容 //其中mail.py內容到這裏下載https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py服務器

!mail.sh的做用是報警收斂!.net

!mail.py的做用是發送郵件!debug

  log=$1日誌

t_s=`date +%s`code

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  

 

 

 

 

 

實例:

[root@axinlinux-01 ~]# cp /usr/lib/zabbix/alertscripts/mail.py /usr/local/sbin/mon/mail/

[root@axinlinux-01 ~]# cd !$

cd /usr/local/sbin/mon/mail/

[root@axinlinux-01 mail]# ls

mail.py

[root@axinlinux-01 mail]# vim 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' #1.咱們須要關注這個,發郵箱的服務器的域名。若是是qq的就是smtp.qq.com(qq好的好像不太好用?)

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]

##定義QQ郵箱的帳號和密碼,你須要修改爲你本身的帳號和密碼(請不要把真實的用戶名和密碼放到網上公開,不然你會死的很慘)

sendqqmail('郵箱名','郵箱密碼','郵箱名',to,subject,content) #163郵箱名,密碼

 

if __name__ == "__main__":

main()

 

 

#####腳本使用說明######

#1. 首先定義好腳本中的郵箱帳號和密碼

#2. 腳本執行命令爲:python mail.py 目標郵箱 "郵件主題" "郵件內容"

以上,搞定mail.py。而後咱們還須要mail.sh,複製上面的內容。作mail.sh的目的是告警收斂,由於在子腳本中定義了一分鐘告警一次,總不能一分鐘發一次把。也就是從第一次的告警開始,作一個時間標記,若是這一分鐘沒有回覆,那下一分鐘不告警。等到好比第十分鐘尚未回覆,這個時候在告警一次,提醒十分鐘了尚未回覆。就是這麼個目的,也就是報警收斂

 

log=$1 #$1做爲咱們的第一個參數。當你發郵件的時候,好比咱們在disk子腳本中定義的發郵件的時候,每次都要找到一個跟監控項目對應的日誌,/bin/bash ../mail/mail.sh $addr\_disk $r ../log/disk.tmp這個是咱們定義disk的時候。監控disk的時候就是這樣寫,ip地址下劃線後面跟log($addr\_disk $r ../log/disk.tmp)。其餘的子腳本也都同樣,名字都是在子腳本里自定義的(像什麼load、disk、502等等)

t_s=`date +%s` #定義了一個時間戳

t_s2=`date -d "2 hours ago" +%s` #定義了兩個小時之前的時間戳

if [ ! -f /tmp/$log ] #若是$1log這個日誌不存在(就是咱們ip地址下劃線後面跟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] #這個$v是跟上面那個時間戳的比值差。桑一次的時間戳跟這一次的時間戳作一個對比,看看他們的時間差是多少(時間戳以秒爲單位),相差幾秒。也就是一個計時器

echo $v

if [ $v -gt 3600 ] #好比$V大於一個小時了

then

./mail.py $1 $2 $3 #直接調用mail.py告警(也就是發郵件)。三個參數 發送給誰 主題 內容

echo "0" > /tmp/$log.txt #而且生成一個新的日誌,也就是計數器吧。一次告警記一個數。在咱們定義的3600這個使勁週期以內,告警一次相加一次)。

而且進入清0,進入下一個週期。也就是沒必要判斷這個文件存在仍是不存在

else

if [ ! -f /tmp/$log.txt ] #若是計數器的文件不存在

then

echo "0" > /tmp/$log.txt #不存在清0(建立)

fi

nu=`cat /tmp/$log.txt` #nu。查看計數器裏面的數字

nu2=$[$nu+1] #nu2。在nu的基礎上加1

echo $nu2>/tmp/$log.txt #把加1的數值寫入到這個日誌裏去。寫入的目的是,每次都能查看這個計數器。若是用這個變量的話,下次就不能查看了

if [ $nu2 -gt 10 ] #當大於10的時候(也就是大於10分鐘的時候,由於一分鐘一次)。

then

./mail.py $1 "trouble continue 10 min $2" "$3" #大於10的時候,在報一警。不到10就計數。這樣就達到了報警收斂的做用(也就是大於10報警,不大於10計數)

echo "0" > /tmp/$log.txt #告完警,再從新計數(清0)

fi

fi  

總結mail.sh:

場景一,mail.sh一次都沒有執行過的時候。(好比新的機器,剛加入這個監控腳本)第一次發生異常告警。就從一開始的log=$1開始。$1就是表明的子腳本中定義的(好比,disk子腳本里定義的$addr\_disk $r)。而後就是兩個時間戳(當前的與2個小時之前的),目的是下面有定義3600,讓3600這個條件成立,成立後就直接報警啦)。由於第一次執行這個腳本發生異常,必需要報警

場景二,第一次報完警開始計數(10分鐘)

 

 

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

20.26 運行告警系統:

 

 

 

咱們在要給主腳本作一個任務計劃。由於,腳本是每分鐘運行一次的

[root@axinlinux-01 mail]# crontab -e

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

咱們必需要進入到這個bin目錄下,而後再執行這個main.sh腳本

相關文章
相關標籤/搜索