文档章节

72.告警系统邮件引擎 运行告警系统

a
 axin-linux
发布于 09/21 20:05
字数 1660
阅读 4
收藏 0

20.23/20.24/20.25 告警系统邮件引擎

20.26 运行告警系统

 

 

 

 

 

20.23/20.24/20.25 告警系统邮件引擎

 

 

 

 

 

邮件首先要有一个mail.py,以下。

因为我们之前zabbix的时候做过,就可以直接拷贝过来

mail.sh内容 //其中mail.py内容到这里下载https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py

!mail.sh的作用是报警收敛!

!mail.py的作用是发送邮件!

  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}'`

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

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
a
粉丝 4
博文 75
码字总数 142878
作品 0
济南
私信 提问
告警系统邮件引擎&运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 告警邮件引擎的核心,conf主配置文件调用到的都是mail.sh 告警邮件引擎的核心需要定义调用mail.py的sh脚本,因为之前做zabbix的时候,做过mail.py的脚本...

影夜Linux
07/19
0
0
74:告警系统邮件引擎 运行告警系统

1、告警系统邮件引擎: 因为之前做zabbix的时候,用过mail.py,这里直接调用就可以了: 但是告警邮件引擎核心,conf主配置文件调用到的都是mail.sh,所以这里需要定义调用mail.py的sh脚本: mail...

芬野de博客
10/02
0
0
告警系统邮件引擎 运行告警系统

告警系统邮件引擎 因为之前做zabbix的时候,做过mail.py的脚本,在这里,直接调用进行使用就可以。 但是告警邮件引擎核心,conf主配置文件调用到的都是mail.sh ,所以这里需要定义调用mail....

lyy549745
07/18
0
0
20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 因为之前做zabbix的时候,做过mail.py的脚本,在这里,直接调用进行使用就可以。 但是告警邮件引擎核心,conf主配置文件调用到的都是"mail.sh" ,所以这...

JasonYan86
03/28
0
0
20.23 20.24 20.25 告警系统邮件引擎20.26 运行告警系统

20.23 20.24 20.25 告警系统邮件引擎 把之前zabbix设置好的邮件拷贝到mail目录下 cd /usr/local/sbin/mon/mail vim mail.sh 这个脚本的目的是做告警收敛的,就是服务没有恢复超过一定时间才会...

cwliang
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
31
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
13
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部