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脚本

相关文章
相关标签/搜索