#!/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),如图:

最新文章

  1. Asp.Net 操作XML文件的增删改查 利用GridView
  2. webBrowser1
  3. @RequestMapping注解详解
  4. JS脚本延时
  5. 转载:在Ubuntu系统下装Win7并引导双系统
  6. 动态规划(方案还原):SGU 104 Little shop of flowers
  7. javap浅析-书籍第3章的手写稿样稿
  8. Linux crm 运行
  9. Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖
  10. 二叉查找树及B-树、B+树、B*树变体
  11. 反射入门-浅谈反射用途_根据Ado游标对象创建list集合
  12. 看这一篇就够了,css选择器知识汇总
  13. 开源作业调度框架 - Quartz.NET - 实战使用2
  14. Python3基础 print \n换行
  15. Hystrix熔断机制原理剖析
  16. 树的直径证明+HDU2196
  17. 深入了解Node模块原理
  18. Maven的Snapshot版本与Release版本
  19. 微信创建带参数二维码,并加上logo
  20. POST JSON fails with 415 Unsupported media type, SpringMVC

热门文章

  1. egametang启动配置
  2. Python比较运算符
  3. 0基础学python3心得体会 - python3学习笔记 - python3基础
  4. 枚举enum学习小记
  5. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)
  6. Dijkstra and Floyd算法
  7. FusionCharts 2D柱状图和折线图的组合图
  8. 错误:readline/readline.h:没有那个文件或目录解决方法
  9. [php] php操作xml
  10. List转换成JSON对象报错(五)