实时警报通知:微信告警通知的重要性解析
793
2023-01-22
本文讲述了zabbix报警,zabbix告警收敛。
zabbix 告警有三种方式:
1、邮件 2、短信 3、微信
最常用的就是邮件报警。
使用第三方SendEmail邮件报警。
1、将sendEmail-v1.56.tar.gz报警小程序上传至服务端。
[root@localhost bin]# cd
[root@localhost ~]# ls
anaconda-ks.cfg sendEmail-v1.56 sendEmail-v1.56.tar.gz
[root@localhost ~]# cd sendEmail-v1.56
[root@localhost sendEmail-v1.56]# ls
CHANGELOG README README-BR.txt sendEmail sendEmail.pl TODO
[root@localhost sendEmail-v1.56]# cp -p sendEmail /usr/local/bin/
2、先测试是否可以发邮件
[root@localhost bin]# sendEmail -f gf502148677@163.com -t gf502148677@tom.com -s smtp.163.com -xu gf502148677@163.com -xp ******** -u "Test email" -m "Hi gf'com, this is a test email."
Feb 08 03:10:18 localhost sendEmail[3335]: Email was sent successfully!
1
2
上面命令中:
-f 发信人账号
-t 收信人账号
-s 邮件服务器
-xu 发信人账号
-xp 发信人授权码(切记一定是授权码!!!不是密码)
-u 邮件主题
-m 邮件正文
具体可以参考该小程序的README。
3、导入发邮件的脚本,脚本可以评论。
[root@localhost ~]# chmod +x SendEmail.sh
并修改下面变量名。
4、测试脚本
[root@localhost ~]# ./SendEmail.sh gf502148677@tom.com "测试环境" "这是封测试邮件"
5、首先web下添加该报警媒介。“管理”->“报警媒介类型”
6、配置报警的用户。“管理”->“用户”
7、修改配置文件。将报警脚本放到下面的目录下
[root@localhost ~]# mv ./SendEmail.sh /var/lib/zabbixsrv/alertscripts/
8、对web1的登录用户人数进行监控。创建超过3人报警的触发器。
“配置”->“主机”->“web1右边触发器”
添加该触发器。
点击“配置”->“动作”->“创建动作”
9、查看user_num的图形
10、登录人数再增加一人,触发报警机制
11、减少1人
如何利用zabbix进行自定义监控,相信看过我文章的同学已经摸清了套路。但是在丰富监控的同时,我们也发现告警越来越多,尤其是发生大面积网络中断时,一时间上百台机器同时发送告警,就造成了告警风暴,那怎么让这类告警只发送一次呢?
首先梳理下告警流程:
告警基本是有监控项数据收集——>告警触发——>发送用户,几个基本环节。从图中可以看出告警触发后,又细分了动作-用户-媒介-脚本几部分,主要的作用是通过动作判断哪类告警是需要收敛的,在关联用户、媒介、脚本,通过脚本处理,最终合并为一个告警邮件发送到收件人
脚本的逻辑思路是:将告警风暴推入redis缓存,经过压缩合并后再发送。具体的代码如下:
推入redis脚本
#!/usr/bin/env python
#coding:utf-8
import redis
import sys
subject=sys.argv[1]
r = redis.StrictRedis(host='127.0.0.1', port=6379)
r.set(subject,subject)
告警合并和发送脚本
#!/usr/bin/env python
#coding:utf-8
import MySQLdb
import redis
import os,sys
import datetime,time
import re
#在zabbix 可以找到告警收敛的动作ID(actionid)
actionid=XXX
#连接redis,并读取所有事件id
r = redis.StrictRedis(host='127.0.0.1', port=6379)
sendtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
usermail='/home/app/mysh/tomaillist.txt'
mailtitle='测试告警收敛'
problemfile='/tmp/problemtmp.txt'
okfile='/tmp/oktmp.txt'
#定义通过actionid和subject获取数据库告警具体信息,并返回
def alerts_eventid(actionid,subject):
try:
conn=MySQLdb.connect(host='127.0.0.1',user='zabbix',passwd='zabbix',db='zabbix',port=3306)
cursor = conn.cursor()
cursor.execute("SET NAMES utf8");
sql ="SELECT * FROM alerts where actionid = '%s' and subject = '%s' ;" % (actionid,subject)
cursor.execute(sql)
data = cursor.fetchall()
cursor.close()
conn.close()
for rowin data:
message = row[8]
return message
except MySQLdb.Error, e:
"Mysql Error %d: %s" % (e.args[0], e.args[1])
def classification(subjectlist):
for subjectin subjectlist:
if 'PROBLEM' in subject:
a=alerts_eventid(str(actionid),subject)
with open(problemfile, 'a+')as f:
f.write(str(a))
else:
a = alerts_eventid(str(actionid), subject)
with open(okfile, 'a+')as f:
f.write(str(a))
def sendmail(filename):
for linein open(usermail):
line = line.strip('\r\n')
print '发送给',line
os.system("cat %s | sed s/'\r'//g | mail -s %s %s" % (filename,mailtitle,line))
if os.path.exists(filename):
os.remove(filename)
if __name__ =="__main__":
subjectlist=r.keys()
for iin subjectlist:
r.delete(i)
if subjectlist:
classification(subjectlist)
if os.path.exists(problemfile):
print sendtime,'发送告警邮件\n'
sendmail(problemfile)
elif os.path.exists(okfile):
print sendtime,'发送恢复邮件\n'
sendmail(okfile)
else:
print sendtime,'无告警邮件\n'
CentOS自带python2.7,安装几个依赖框架即可。最后定制个定时任务crontab -e
*/2 * * * * python sendalert.py >> send.log
每两分钟收集一次,若有告警风暴,只收一个告警,不用再收几百条告警了。
上文就是小编为大家整理的zabbix报警,zabbix告警收敛。
国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。
发表评论
暂时没有评论,来抢沙发吧~