#!/usr/bin/python
# -*- coding: UTF- -*-
#Function: 微信报警python版(带波动图)
#Environment: python 2.7. import urllib2,chardet
import sys,json,re def send_alter(): #发送报警到微信
AppID = ***** #应用ID
UserID = ***** #用户ID,以|间隔可发送多人
PartyID = #组ID GURL = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + CropID + '&corpsecret=' + Secret
Request = urllib2.Request(GURL)
Response = urllib2.urlopen(Request)
access_token = eval(Response.read())['access_token']
PURL = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
data = {
"touser" : UserID,
"toparty": PartyID,
"msgtype": "text",
"agentid": AppID,
"text": {
"content": Msg
},
"safe":
}
encode_data = json.dumps(data, encoding='utf-8', ensure_ascii=False) #要将数据encode在json.dumps,不然微信无法识别
wx_req = urllib2.Request(PURL, encode_data) f = open('/home/zabbix/test','w')
print >> f, urllib2.urlopen(wx_req).read() def get_return(data):
request = urllib2.Request(zabbix_url + 'api_jsonrpc.php',data)
for key in zabbix_header:
request.add_header(key,zabbix_header[key]) try:
result = urllib2.urlopen(request)
except HTTPError, e:
print 'The server couldn\'t fulfill the request, Error code: ', e.code
except URLError, e:
print 'We failed to reach a server.Reason: ', e.reason
else:
response=json.loads(result.read())
return response
result.close() def get_authcode(): #获取zabbix的auth_code
auth_data = json.dumps(
{
"jsonrpc":"2.0",
"method":"user.login",
"params":
{
"user":zabbix_user,
"password":zabbix_passwd
},
"id":
})
return get_return(auth_data)['result'] def get_imgurl(): #获取监控项波动图片地址
ItemID = re.search('(告警监控项:.*\()(.*)(\))', sys.argv[]).group()
png_url = zabbix_url + "chart.php?period=3600&isNow=1&itemids%5B0%5D=" + ItemID + "&type=0&profileIdx=web.item.graph&profileIdx2=29123&width=1387"
return png_url if __name__ == '__main__': defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding) CropID='*******'      #这两个要在微信企业号里找
Secret='********'      #企业号里找 zabbix_url = 'http://****/zabbix/'   #zabbix路径 new_details = '<a href=\"' + get_imgurl() + '\">点击查看图片</a>'
Msg = re.sub('DETAILS', new_details, sys.argv[]) send_alter()

推荐的动作格式:

产生告警!
告警主机: {HOST.NAME}
告警时间: {EVENT.DATE}
告警监控项: {ITEM.NAME}({ITEM.ID})
告警触发器: {TRIGGER.NAME}
告警状态: {TRIGGER.STATUS}
告警级别: {TRIGGER.SEVERITY}
告警详情: DETAILS 监控项值:
.{ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}):{ITEM.VALUE1}
.{ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}):{ITEM.VALUE2}
.{ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}):{ITEM.VALUE3}
事件 ID: {EVENT.ID} #推荐动作

接收到的信息:

点击查看图片会直接看到报警监控项的波动图(需要事先访问过该zabbix后台并留下cookie),如图:

Zabbix 微信报警Python版(带监控项波动图片)的更多相关文章

  1. Zabbix微信报警脚本及写触发记录

    一.Zabbix微信报警 默认路径:/usr/lib/zabbix/scripts/weixin.py #!/usr/bin/python # -*- coding: utf-8 -*- import ...

  2. zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本

    微信个人告警脚本 微信个人告警:使用个人微信,发送到微信群组,微信好友 两个脚本执行: 1)能连接网络2)先执行server.py,扫描登录微信,登录之后没有报错,打开新终端查看端口是否起来了3)在z ...

  3. filebeat+logstash通过zabbix微信报警

    一.安装软件: 1.在要收集日志的机器上安装filebeat: 1).下载安装: cd /usr/local/src wget https://artifacts.elastic.co/downloa ...

  4. Zabbix 3.4.11版本 自定义监控项

    一.实验思路过程 创建项目.触发器.图形,验证监控效果: Template OS Linux 模板基本涵盖了所有系统层面的监控,包括了我们最关注的 几项:ping.load.cpu 使用率.memor ...

  5. Centos7下zabbix部署(三)自定义监控项

    引言 在前面的博客中我们介绍了zabbix自带的模板,并且完成了我们的一些比较常用的监控,现在我们如果想要监控我们磁盘的IO,这时候zabbix并没有给我们提供这么一个模板,所以我们需要自己来创建一个 ...

  6. 通过脚本发送zabbix微信报警

    实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...

  7. (五)zabbix微信报警

    1.注册微信企业号 1)注册微信企业号 https://work.weixin.qq.com 2)通讯录添加用户 3)记住部门id 4)创建应用 5)点击刚创建的应用,记住Agentld和secret ...

  8. Zabbix-自带监控项与Kye

    开启主机自动发现 ⦁选择配置 ->自动发现 ->创建自动发现->ip范围必须连续,不连续的话逗号分开 ⦁更新间隔 -> 2s ->更新 ⦁检查 -> 选择新的 -& ...

  9. Zabbix微信报警触发

    (1)         企业应用-创建应用 1.除了对个人添加微信报警之外,还可以添加不同管理组,接受同一个应用推送的消息, 成员账号,组织部门ID,应用Agent ID,CorpID和Secret, ...

随机推荐

  1. Mybatis 动态使用update语句

    update pf_product_audio_t <trim prefix="set" suffixOverrides=","> <if t ...

  2. Mock摆脱后端拖拉(借鉴官网)(一)

    mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试.mock有如下功能 根据数据模板生成模板数据 模拟ajax请求,生成请求数据 基于html模板生成模拟数据 下载安装 n ...

  3. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  4. python入门学习笔记(一)

    写在开头:         A:python的交互式环境                                                                         ...

  5. Nginx下编译PHP+Mysql

    先说一下PHP在Apache和Nginx下所扮演的角色 apache一般是把php当做自己的一个模块来启动的. 而nginx则是把http请求变量(如get,user_agent等)转发给 php进程 ...

  6. java字符串以及字符类型基础

    介绍一下java字符集和字符的编码方式, 首先要区分一下字符集和字符编码.所谓的字符集 类似于unicode,GB2312,GBK,ASCII等等.因为一开始只有26个英文字母需要 编一下号.所有用下 ...

  7. 静态编译程序 依赖于 Qt 和 Opencv 静态库 会出现 jpeg jpg 图像格式保存崩溃的情况,这是什么原因?

    双方依赖的 jpeg 静态库源码版本冲突,重新静态编译库,都采用一致版本即可.

  8. python语言中的AOP利器:装饰器

    一.前言 面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java ...

  9. mongodb副本集中其中一个节点宕机无法重启的问题

    2-8日我还在家中的时候,被告知mongodb副本集中其中一个从节点因未知原因宕机,然后暂时负责代管的同事无论如何就是启动不起来. 当时mongodb的日志信息是这样的: 实际上这里这么长一串最重要的 ...

  10. 为你的APK进行数字签名

    摘要: 我们需要为 APK进行数字签名,这样才能发布到 Google Play商店.解决方法很简单,使用 Java的keytool命令创建证书并在 Gradle构建文件的 signingConfigs ...