zabbix报警,zabbix告警收敛

4747 793 2023-01-22

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

本文讲述了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:

print

            "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告警收敛。

国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。

上一篇:综合性能测试设备公司(电气性能综合测试仪)
下一篇:智能电网架构的目标原则和智能电网架构的演进路线探讨
相关文章

 发表评论

暂时没有评论,来抢沙发吧~