#!/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. eslint规则

    碰到eslint报错, 把错误的提示拷贝在这里Ctrl + F找到复制到eslint.js里面就行了. "off"或者0,不启用这个规则 "warn"或者1,出 ...

  2. centos7下安装vsftpd

    安装步骤: 创建ftp目录 cd / mkdir ftpfile 创建指定登陆用户并不让他拥有登陆系统的权限(设置指定登陆shell) useradd ftpuser -d /ftpfile/ -s ...

  3. datatables行编辑中,某个字段用户显示和用于行编辑名称不同时的处理。

    比如tag这个字段,对应服务端bean的tag,但是在页面显示时需要为String类型的tagName,那么在行编辑时可以用以下的方式处理.

  4. Flex进度条

    Flex中,进度条的皮肤,以及使用Timer让它自动增加~ mxml中: <mx:ProgressBar id="proBar" verticalCenter="0 ...

  5. Linux常用命令(精选)

    chmod -R 777 文件夹名       // -R表示递归给文件及文件夹内文件更改权限,r(4),w(2),x(1),chmod -a+rwx / chmod -u+w -g+r -o +x ...

  6. java并发 - 自底向上的原理分析

    [TOC] 事先声明,我只是java并发的新手,这篇文章也只是我阅读<java并发编程的艺术>一书(内容主要涉及前3章)的一些总结和感悟.希望大家能多多讨论,对于错误的地方还请指出. 0. ...

  7. oracle报表功能

    需求是将指定的批量sql语句执行的结果通过脚本导出成txt或者能用excel打开的文件. oracle导出文件可以通过spool命令实现,通过bat脚本登录sqlplus,然后引入sql文件即可,源码 ...

  8. R语言数据框中,用0替代NA缺失值

    1.用0替代数据框中的缺失值NA 生成数据框: > m <- matrix(sample(c(NA, :), , replace = TRUE), ) > d <- as.da ...

  9. Java 多线程入门

    进程与线程 在学习Java多线程之前,先简单复习一下进程与线程的知识. 进程:进程是系统进行资源分配和调度的基本单位,可以将进程理解为一个正在执行的程序,比如一款游戏. 线程:线程是程序执行的最小单位 ...

  10. python项目使用jsonschema进行参数校验

    python项目使用jsonschema进行参数校验 最近想要给一个新的openstack项目加上参数校验,过完年回来准备开工的时候,发现其他人已经在做了,对应的patch是:https://revi ...