zabbix如何实现微信报警 转载
现实生产环境中,我们通常使用邮件和短信接受zabbix报警信息,但是邮件经常被工作人员搁置在角落中甚至被设置为垃圾邮件被过滤掉。公司的短信接口又太贵,复杂环境中使用短息报警会使运维成本增加很多。微信提供了很好的第三方接口,我们可以利用微信报警以求降低运维成本。
微信的第三方接口要求我们先申请一个企业号——传送门:https://qy.weixin.qq.com/

如何操作企业号?
1.通讯录添加企业成员
我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。
注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字)


2.应用中心创建应用
我们要在这里创建应用,因为要通过应用发送消息给部门成员
注意:这里要记住一个值,应用ID


3.给部门设置管理员
设置--->功能设置---->权限管理---->新建管理组
管理员必须事先已经关注了企业号,并且已经设置好邮箱地址

确定管理员可以读取通讯录,可以使用应用发消息。
注意:我们需要管理员的CorpID和Secret

我们要准备这些东西:
一个微信企业号
企业号已经被部门成员关注
企业号里有一个可以发消息的应用
一个授权管理员,可以使用该应用给成员发消息
我们要取到这些信息:
成员账号
组织部门ID
应用ID
CropID
Secret
如何调用微信接口?
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟


微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug
Shell脚本原理
使用:
curl -s -G url 获取 AccessToken
使用:
curl --data url 传送凭证调用企业号接口
zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#!/bin/bash###SCRIPT_NAME:weixin.sh######send message from weixin for zabbix monitor######wuhf######V1-2015-08-25###CropID='xxxxxx'Secret='xxxxxx'GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"function body() { local int AppID=3 企业号中的应用id local UserID=$1 部门成员id,zabbix中定义的微信接收者 local PartyID=1 部门id,定义了范围,组内成员都可接收到消息 local Msg=$(echo "$@" | cut -d" " -f3-) 过滤出zabbix传递的第三个参数 printf '{\n' printf '\t"touser": "'"$UserID"\"",\n" printf '\t"toparty": "'"$PartyID"\"",\n" printf '\t"msgtype": "text",\n' printf '\t"agentid": "'" $AppID "\"",\n" printf '\t"text": {\n' printf '\t\t"content": "'"$Msg"\""\n" printf '\t},\n' printf '\t"safe":"0"\n' printf '}\n'}/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL |
为什么要这样写脚本?
因为微信企业号开放的端口有固定的格式限制
企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

将脚本放入zabbix默认执行路径下
|
1
2
3
|
mv weixin.sh /usr/local/zabbix/share/zabbix/alertscriptschown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/weixin.shchmod +x /usr/local/zabbix/share/zabbix/alertscripts/weixin.sh |
服务器端
1.创建媒介

2.创建用户

3.创建触发器动作发送内容

4.设置触发器动作发送方式

收到的微信消息:

附上python脚本
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#!/usr/bin/env python #coding: utf-8import timeimport urllib,urllib2import jsonimport sys'''1 空2 空3 内容'''"""touser否成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送toparty否部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数totag否标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数msgtype是消息类型,此时固定为:textagentid是企业应用的id,整型。可在应用的设置页面查看content是消息内容safe否表示是否是保密消息,0表示否,1表示是,默认0"""# baseurl = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'# securl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_tokenclass WeChatMSG(object): def __init__(self,content): self.gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken' self.gettoken_content = { 'corpid' : 'xxxxxxx', 'corpsecret' : 'xxxxxxxxxx' , } self.main_content = { "toparty":"1", "agentid":"3", "msgtype": "text", "text":{ "content":content, } } def get_access_token(self,string): token_result = json.loads(string.read()) access_token= token_result['access_token'] return access_token.encode('utf-8') def geturl(self,url,data): data = self.encodeurl(data) response = urllib2.urlopen('%s?%s' % (url,data)) return response.read().decode('utf-8') def posturl(self,url,data,isjson = True): if isjson: data = json.dumps(data) response = urllib2.urlopen(url,data) return response.read().decode('utf-8') def encodeurl(self,dict): data = '' for k,v in dict.items(): data += '%s=%s%s' % (k,v,'&') return dataif __name__ == '__main__': if len(sys.argv) == 4: touser,notuse,content = sys.argv[1:] else: print 'error segments, now exit' sys.exit() msgsender = WeChatMSG(content) access_token_response = msgsender.geturl(msgsender.gettoken_url, msgsender.gettoken_content) access_token = json.loads(access_token_response)['access_token'] sendmsg_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token print msgsender.posturl(sendmsg_url,msgsender.main_content) |
关于换行问题:


zabbix如何实现微信报警 转载的更多相关文章
- docker-compose 修改zabbix images 添加微信报警插件 时间同步 中文乱码 添加grafana美化zabbix
我们先来看一下我们要修改得 zabbix.yaml github https://github.com/bboysoulcn/awesome-dockercompose ve ...
- zabbix监控,微信报警
微信告警 访问这个地址创建企业微信 https://work.weixin.qq.com/
- zabbix配置企业微信报警
+++++++++++++++++++++++++++++++++++++++++ 1. 工作中最长使用的就是微信,普及,开源,而且免费!!! 2. 在企业微信中要记录的值: · 部门id · 企业i ...
- 配置zabbix通过微信报警企业微信报警
如今势态: 报警的方式可谓是八仙过海各显神通,如电话报警,短信报警,邮件报警,QQ报警,微信报警等等. 电话报警:一般都是使用别的平台的工具,平台给你提供一个接口供你使用,大多数为限量收费款 短信报警 ...
- zabbix报警媒介------>微信报警
zabbix报警媒介------>微信报警 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入高级运维工程师之路:598432640 微信在我们的生活中使用的比较频繁,有 ...
- Zabbix配置微信报警通知
Zabbix告警可以通过邮件,微信,电话,短信等方式发送告警消息. 电话和短信需要向运营商购买相应的网关,需要付费: 邮件和微信是免费的,可以根据业务需要选择相应的告警模式 Zabbix版本:3.2 ...
- 通过脚本发送zabbix微信报警
实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...
- Zabbix 微信报警Python版(带监控项波动图片)
#!/usr/bin/python # -*- coding: UTF- -*- #Function: 微信报警python版(带波动图) #Environment: python import ur ...
- zabbix配置微信报警
首先我们先目睹下微信报警的效果 接下来我们正式开始操作. 一:注册企业微信. 打开企业微信注册:http://work.weixin.qq.com 根据以上提示填入相应的内容,然后注册即可. 二:登录 ...
随机推荐
- ionic一些常见问题及方法(网页链接式)
ionic 进入二级目录以后隐藏底部导航栏(tabs) http://blog.csdn.net/shenshucong520/article/details/48287811ionic三级目录乃至多 ...
- OpenGl的glMatrixMode()函数理解
glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项 ...
- Siri开源了,33%的开发者持疑虑态度,你呢?
33%的中国开发者对Siri 开放持疑虑态度? 目前来说在iOS 10中,Siri API仅仅支持六类应用程序:打车,通讯,照片搜索,支付,网络电话和锻炼.另外还有一个面向汽车制造商的特殊使用案例,让 ...
- Kafka+Storm+HDFS整合实践
在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统计分析,但是对于实时的需求Hive就不合适了.实时应用场景可以使用Storm,它是一 ...
- web双机热备添加心跳检测ip的时候填了网关导致外网ip不能上网
web双机热备添加心跳检测ip的时候填了网关导致外网ip不能上网 1 连接 机器其他机器, 通过机房做的服务器的局域网,ssh到这台的局域网ip,删除网卡配置文件的网关哪一行,重启网卡. 2 如果没有 ...
- 奥威Power-BI V11——凤凰涅槃,重磅来袭
时隔一年,奥威Power-BI重磅再推新版,在之前V10 WEB可视化前端分析工具基础上,更加注重用户体验这一块.V11站在用户的角度,以用户的视野去设计研发新版本,最终在前端框架的优化.移动设备的体 ...
- [转载]浅谈C/C++内存泄漏及其检测工具
http://dev.yesky.com/147/2356147_3.shtml 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如Sm ...
- MySQLdb模块 类操作方法
#!/usr/bin/env python #-*- coding:utf- -*- from day5 import conf import MySQLdb class MysqlHepler(ob ...
- python MySQLdb中文乱码
Python操作MySQL需要安装Python-MySQL可以从网上搜索一下,和一般的Python包一样安装 安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用,试验 ...
- DG - logical standby switchover切换过程
从11g起,主库和逻辑备库之间切换不再需要关闭任何数据库实例. 1.检查主数据库是否处于考虑切换状态 SQL> select switchover_status from v$database; ...