Zabbix自定义监控(三) 告警收敛

如何利用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


每两分钟收集一次,若有告警风暴,只收一个告警,不用再收几百条告警了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270