github地址

https://github.com/JPOPS/Monitor/tree/master/zabbix-police

简书地址

http://www.jianshu.com/p/b29cf0682b58

架构图

zabbix设置

1、zabbix actions

ActionsDefault subject

Default subject

{EVENT.ID}_1

• Recovery subject

{EVENT.ID}_0

• Recovery message

triggervalue|{TRIGGER.VALUE}#hostname|
{HOSTNAME1}#ipaddress|
{IPADDRESS}#hostgroup|
{TRIGGER.HOSTGROUP.NAME}#tri ggernseverity|
{TRIGGER.NSEVERITY}#triggername|
{TRIGGER.NAME}#triggerkey|
{TRIGGER.KEY1}#triggeritems|
{ITEM.NAME}#item value|
{ITEM.VALUE}#eventid|{EVENT.ID}

Media types

subject

http://www.jianshu.com/p/b29cf0682b58PIP http://www.jianshu.com/p/e39a82c4edc3
Redis http://www.jianshu.com/p/2c686e077253
police.py
$ cat /soft/zabbix/share/zabbix/alertscripts/police.py #!/usr/local/python2.7.8/bin/python#coding:utf-8import redis
import syssubject=sys.argv[1]r = redis.StrictRedis(host='127.0.0.1', port=6379) r.set(subject,subject)
allpolice.py–(dbread.pyoperation.pydingding.py)x

$ cat /data/dingding/allpolice.py

#!/usr/local/python2.7.8/bin/python #coding:utf-8
import MySQLdb
import redis
import sys
from dbread import *
from operation import *
from dingding import *
import datetime,time
sendtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) accesstoken = gettoken()
users=['ethnicity']
#zabbix IDactionid
actionid=134
#redisid
r = redis.StrictRedis(host='127.0.0.1', port=6379)
subjectlist=r.keys() for i in subjectlist: r.delete(i) r.flushdb()
#
originallist=[]
for subject in subjectlist: a=alerts_eventid(str(actionid),subject) originallist.append(a) problem=mergeproblem(originallist) normal=mergenormal(originallist)
# messagelist=compressproblem(problem) if len(messagelist) != 0:
for content in messagelist:
print sendtime
for user in users: senddata(accesstoken,user,content)
#
messagelist=compressnormal(normal)
if len(messagelist) != 0:
for content in messagelist:
print sendtime
for user in users: senddata(accesstoken,user,content)
dbread.py–idzabbix
$ cat /data/dingding/dbread.py#!/usr/local/python2.7.8/bin/python #coding:utf-8
#*****
import MySQLdb
import datetime,time
import sys
#actionidsubject
def alerts_eventid(actionid,subject):
try: conn=MySQLdb.connect(host='xxxxxxxxxxxxxxx',user='xxxxxxxxxxxxxxxxx',passwd='xxxxxxxxxxxxxxxxxxxx',db='xxxxxxxxxxxxxx ',port=3306)
#hostzabbixip
#userzabbix
#passwdzabbix
#dbzabbix
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()
event=data[0]
messagelist=[]
message=event[8]
messageone=message.split('#')
for i in messageone:
messagelist.append(i.split('|'))
print messagelist
messagedict=dict(messagelist)
return messagedict
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
$ cat /data/dingding/operation.py#!/usr/local/python2.7.8/bin/python #coding:utf-8
#
def mergeproblem(originallist): problemlist=[]
normalist=[]
Unknown=[]
triggerkeylist=[]
sorts=[]
alarminfo=[]
#or
if origina['triggervalue']=='1' : problemlist.append(origina)
if origina['triggerkey'] not in triggerkeylist: triggerkeylist.append(origina['triggerkey']) else :
for triggerkey in triggerkeylist:
for problem in problemlist:
if problem['triggerkey']==triggerkey: sorts.append(problem) alarminfo.append(sorts)
sorts=[]
return alarminfo
#
def mergenormal(originallist): normallist=[]
Unknown=[]
triggerkeylist=[]
sorts=[]
alarminfo=[]
#or
if origina['triggervalue']=='0' : normallist.append(origina)
if origina['triggerkey'] not in triggerkeylist: triggerkeylist.append(origina['triggerkey']) else :
for triggerkey in triggerkeylist:
for normal in normallist:
if normal['triggerkey']==triggerkey: sorts.append(normal) alarminfo.append(sorts)
sorts=[]
return alarminfo
#
def compressproblem(alarminfo):
currenttime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
messagelist=[]
for info in alarminfo:
hostlist=''
hostgroup=''
infonum=len(info)
for host in info:
triggername=host['triggername']
hostinfo=host['hostname']+':'+host['ipaddress']+'\n'
if host['hostgroup'] not in hostgroup:
hostgroup+=host['hostgroup']+'\n'
hostlist+=hostinfo
if infonum >= 3 and infonum <= 6: message='\n'+':'+str(infonum)+'\n'+hostlist+':\n'+hostgroup+':\n'+triggername+'\n'+':\n'+currenttime messagelist.append(message)
elif infonum > 6:
message='\n'+',!\n\n'+':'+str(infonum)+'\n'+':\n'+triggername+'\n'+':\n'+currenttime messagelist.append(message)
return messagelist
#
def compressnormal(alarminfo):
currenttime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
messagelist=[]
for info in alarminfo:
hostlist=''
hostgroup=''
infonum=len(info)
for host in info:
triggername=host['triggername']
hostinfo=host['hostname']+':'+host['ipaddress']+'\n'
if host['hostgroup'] not in hostgroup:
hostgroup+=host['hostgroup']+'\n'
hostlist+=hostinfo
if infonum >= 3 and infonum <= 6: message='\n'+':'+str(infonum)+'\n'+hostlist+':\n'+hostgroup+':\n'+triggername+'\n'+':\n'+currenttime messagelist.append(message)
elif infonum > 6:
message='\n'+'!\n\n'+':'+str(infonum)+'\n'+':\n'+triggername+'\n'+':\n'+currenttime messagelist.append(message)
return messagelist

$ cat /data/dingding/dingding.py

#!/usr/local/python2.7.8/bin/python
# coding: utf-8
#python2zabbix
#*****
import urllib,urllib2
import json
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#import sys
def gettoken():
CorpID='xxxxxxxxxxxxxxxxxxxx'
CorpSecret='xxxxxxxxxxxxxxxxxxxx' GURL="https://oapi.dingtalk.com/gettoken?corpid="+CorpID+"&corpsecret="+CorpSecret token_file = urllib2.urlopen(GURL)
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,content): PURL="https://oapi.dingtalk.com/message/send?access_token="+access_token send_values = {
# "touser": "01174309736541088",
"touser": "@all",
"agentid": "37166352",
"msgtype": "text",
"text": {
"content": content
},
"safe" : "0" }
headers = {
"Content-Type": "application/json" }
send_data = json.dumps(send_values, ensure_ascii=False) send_request = urllib2.Request(PURL, send_data, headers=headers) response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':

crontab

##zabbix*/5 * * * * /usr/local/python2.7.8/bin/python /data/dingding/allpolice.py && rm -rf /data/dingding/*.pyc>> /data/dingding/send.log

zabbix报警收敛相关推荐

  1. 线上使用zabbix报警脚本(含图片)

    分享一个线上使用的自定义zabbix报警脚本,脚本思路大致如下: 1.使用爬虫获取报警图片(前提是要获得报警的item) 2.将图片与邮件内容整合 3.发送邮件 4.日志记录 脚本内容如下: #!/u ...

  2. 从Python脚本判断服务器不可达,到Zabbix报警

    1.Python脚本获取不可达服务器的IP: 脚本基于Python3.3.6,Python2.x版本的queue模块应该是Queue,导入模块时:"from Queue import Que ...

  3. python发邮件11002_【python发送zabbix报警邮件,SSL版本】mailman.py

    [python发送zabbix报警邮件,SSL版本]mailman.py#!/usr/local/bin/python3 # # via  @ 20150210 # SSL only ''' 用法: ...

  4. zabbix报警方式,邮件报警和微信报警。

    整理csdn时候发现了一篇2016年整理zabbix报警不知道当时啥情况没有发布出去,凑个数重新发布 最近这些天都在弄Zabbix不再只是简单的监控物理硬件,服务端口,流量图等.让Zabbix的功能发 ...

  5. Zabbix报警机制 、 Zabbix进阶操作 、 监控案例

    一.zabbix报警机制 (邮件 短信 微信 即时消息 ) 概念介绍: 自定义的监控项默认不会自动报警 首页也不会提示错误 需要配置触发器与报警动作才可以自定报警 触发器(trigger) –表达式, ...

  6. Zabbix报警 More than 100 items having missing data for more than 10 minutes

    Zabbix报警 转载于:https://blog.51cto.com/john88wang/1545492

  7. zabbix报警Too many processes on zabbix server

    zabbix报警Too many processes on zabbix server 2016年09月19日 16:49:30 郑子明 阅读数 12930 版权声明:本文为博主原创文章,未经博主允许 ...

  8. python3 发送zabbix报警信息

    一.前言 此程序主要是调用中台封装好的短信接口,进行发送zabbix报警信息 二.主程序 main.py from encryption import encryption from config i ...

  9. 通过微信企业号发送zabbix报警

    采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...

最新文章

  1. C/C++中constkeyword
  2. 基于C++实现五子棋AI算法思想
  3. Java基础学习总结(120)——JVM 参数使用详细说明
  4. linux服务器无法登录,linux服务器账号密码正确无法登录-Go语言中文社区
  5. Android多线程的使用
  6. 微服务和数据库到底是什么关系?
  7. matlab hadamard(哈达玛变换)变换
  8. 最牛ai波士顿动力上台阶_波士顿动力的位置如何使美国成为人工智能的关键参与者...
  9. 实对称矩阵的特征值求法_机器学习和线性代数 - 特征值和特征向量
  10. DDC传输协议以及显示器EDID结构介绍
  11. PLSQLDeveloper下载使用
  12. Coinbase、BlockFi相继开启上市准备工作,但SEC准备好了吗?
  13. vmware虚拟机添加物理网卡与虚拟网卡
  14. 微服务下蓝绿发布、滚动发布、灰度发布等方案
  15. (13.1.3.9)PMBOK之三:十大知识领域之采购管理
  16. 量子化学计算机程序,量子化学程序gaussian原理与功能.ppt
  17. 两台linux 机器互联,Red Hat Linux9.0下两台机器怎么互联
  18. context deadline exceeded
  19. 推荐50个超实用的 Chrome 扩展,建议收藏!
  20. wpf 的 Window或UserControl绑定自己后台属性

热门文章

  1. 在centos7中下载搜狗输入法
  2. python计算圆周率100万位要多久_Super Pi-计算10000位圆周率需要多少时间?
  3. windows 文件在linux下运行显示no such file or directory
  4. switch语句中的break与continue
  5. 基于单片机(STC89C52)的数字频率计
  6. 认真学习MySQL中的二进制日志(binlog)与中继日志(Relay log)
  7. 移芯平台EC616上按键唤醒
  8. 智能优化算法之松鼠算法(Squirrel search algorithm)
  9. 瑞吉外卖项目:新增菜品与菜品分页查询
  10. XCon 2022 | 赛宁主动防御体系惊喜登场