Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式。

现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
前面介绍了zabbix的邮件报警的部署过程,这里继续说下zabbix的微信报警环境的部署。

废话不多说了,下面记录了微信报警的操作过程:

接下来详细记录如下:

1)微信企业号的申请过程

2)微信企业号登陆后的相关设置

3)zabbix结合微信报警脚本设置

------------------------------------------------------------------------------------------------------------------
一、微信企业号的申请过程(现在企业号已经升级为企业微信):

注册地址:
https://qy.weixin.qq.com/

如下:填写用户信息登陆

扫面二维码,完成身份验证

扫描二维码

------------------------------------------------------------------------------------------------------------------
二、微信企业号登陆后的相关设置

首次登陆,查看通讯录-组织架构,可以直接添加成员,也可以添加子部门,然后在子部门里新增成员

点击“修改部门”会查看到部门ID号,后面微信脚本里会用到!

可以将成员添加到子部门中

账号是不同于微信号,最好是字母加数字

成员添加成功后,别忘了后面要关注本企业号

接着”设置“企业号Logo,这个一定要设置,不然后面发信息会报错,算是一个BUG吧.

注意:设置里面的”进入认证系统“,认证是需要收费的,所以这里不进行认证。忽略这个设置。

注意:添加的用户一定要扫描下面”设置“->”企业号信息“里的二维码,关注这个企业号

接着到”应用中心”里创建一个应用

记住这个monit-test应用的ID号,后面微信脚本里会用到

最后,需要进行“设置”->“权限管理”的操作,新建一个管理组

留下下面的CorpID和Secret,后面的微信脚本里会用到!

由于上面monit-manager管理组没有设置管理员,接下来还要设置一个管理员!
点击”系统管理组“设置管理员

邮箱验证方式添加

登陆上面的管理员邮箱,按照邮件提示进行密码登陆设置

先扫描二维码进行绑定,然后设置密码

这样,以后登陆这个企业号,要先使用这个管理员的微信进行扫描,扫描后在微信里的企业小助手里确认登陆,然后再进行用户名和密码登陆。

登陆后,发现系统管理员已经设置成功了。

-----------------------------------------------------------------------------------------------------
二、接下来进行zabbix的微信配置

设置微信脚本如下:在alertscripts路径下编写脚本
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts

需要调用微信接口,那么如何调用微信接口呢?
调用微信接口需要一个调用接口的凭证:access_token
通过 :CropID 、Secret 才能获取到access_token,但是获取到的token有效期为两分钟。

微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug

打开上面url,使用上面monitops企业号的monit-manager管理组的CorpID和Secret号获得调用接口凭证access_token,如下:

 zabbix发送微信报警的脚本可以用Shell脚本或python脚本,二者任选其一(推荐python脚本)

(一)Shell脚本调用
使用:
curl -s -G url 获取 AccessToken
使用:
curl --data url 传送凭证调用企业号接口

zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容

[root@Zabbix-server alertscripts]# cat weixin.sh

  1. #!/bin/bash
  2. #########################################################################
  3. # File Name: wechat.sh
  4. # Author: shaonbean
  5. # Email: shaonbean@qq.com
  6. # Created Time: Sun 24 Jul 2016 05:48:14 AM CST
  7. #########################################################################
  8. # Functions: send messages to wechat app
  9. # set variables
  10. CropID='wx76c41a935c66acf9'
  11. Secret='RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
  12. GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
  13. #get acccess_token
  14. Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $4}')
  15. PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
  16. #
  17. function body() {
  18. local int AppID=1
  19. local UserID="test001"
  20. local PartyID=3
  21. local Msg=$(echo "$@" | cut -d" " -f3-)
  22. printf '{\n'
  23. printf '\t"touser": "'"$UserID"\"",\n"
  24. printf '\t"toparty": "'"$PartyID"\"",\n"
  25. printf '\t"msgtype": "text",\n'
  26. printf '\t"agentid": "'" $AppID "\"",\n"
  27. printf '\t"text": {\n'
  28. printf '\t\t"content": "'"$Msg"\""\n"
  29. printf '\t},\n'
  30. printf '\t"safe":"0"\n'
  31. printf '}\n'
  32. }
  33. /usr/bin/curl --data-ascii "$(body $! $2 $3)" $PURL

注意:
上面脚本中标注的几处:
CorpID和Secret分别是上面企业公众号的管理组monit-manager的ID
UseID:用户账号。这里只需要填写一个账号即可。zabbix的web界面里发信是按照应用ID,只要关注这个微信企业号内的用户都会收到报警邮件。
AppID:应用ID
PartyID:部门ID号

-----------------------------------------

为什么要这样写脚本?

因为微信企业号开放的端口有固定的格式限制

企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

-----------------------------------------------------------------------------------------------------------------------

将weixin.sh脚本放入zabbix默认执行路径alertscripts下,权限一定要设置成zabbix进程的启动用户!
[root@Zabbix-server alertscripts]# pwd
/usr/local/zabbix/alertscripts
[root@Zabbix-server alertscripts]# chown zabbix.zabbix /usr/local/zabbix/alertscripts/weixin.sh
[root@Zabbix-server alertscripts]# chmod 755 /usr/local/zabbix/alertscripts/weixin.sh

手动测试脚本能否正常发信,测试的账号由于在脚本里已经写明(test001),观察到微信能正常收到测试信息:
[root@Zabbix-server alertscripts]# ./weixin.sh  test heiheihei
{"errcode":0,"errmsg":"ok"}
[root@Zabbix-server alertscripts]# ./weixin.sh  test hahaha
{"errcode":0,"errmsg":"ok"}

-------------------------------------
python脚本调用:

安装simplejson    (也可以直接下载,地址:https://pan.baidu.com/s/1o8dHQIY    提取密码:yd72)
[root@Zabbix-server src]# pwd
/usr/local/src
[root@Zabbix-server src]#
[root@Zabbix-server src]# wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
[root@Zabbix-server src]# tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2
[root@Zabbix-server src]# python setup.py build
[root@Zabbix-server src]# python setup.py install
*********************************************************************************
注意:在上面build和install过程中,如果出现下面的WARNING提示,不用管,不影响结果!
WARNING: The C extension could not be compiled, speedups are not enabled.
Plain-Python installation succeeded.
*********************************************************************************

下载wechat.py脚本
[root@Zabbix-server src]# git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
[root@Zabbix-server src]# cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
[root@Zabbix-server src]# cd /usr/local/zabbix/alertscripts/
[root@Zabbix-server alertscripts]# chmod 755 wechat.py
[root@Zabbix-server alertscripts]# chown zabbix:zabbix wechat.py
[root@Zabbix-server alertscripts]# mv wechat.py weixin.py

修改weixin.py脚本
[root@Zabbix-server alertscripts]# cat weixin.py

  1. #!/usr/bin/python
  2. #_*_coding:utf-8 _*_
  3.  
  4. import urllib,urllib2
  5. import json
  6. import sys
  7. import simplejson
  8.  
  9. reload(sys)
  10. sys.setdefaultencoding('utf-8')
  11.  
  12. def gettoken(corpid,corpsecret):
  13. gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
  14. print gettoken_url
  15. try:
  16. token_file = urllib2.urlopen(gettoken_url)
  17. except urllib2.HTTPError as e:
  18. print e.code
  19. print e.read().decode("utf8")
  20. sys.exit()
  21. token_data = token_file.read().decode('utf-8')
  22. token_json = json.loads(token_data)
  23. token_json.keys()
  24. token = token_json['access_token']
  25. return token
  26.  
  27. def senddata(access_token,user,subject,content):
  28.  
  29. send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
  30. send_values = {
  31. "touser":"test001",
  32. "toparty":"3",
  33. "msgtype":"text",
  34. "agentid":"1",
  35. "text":{
  36. "content":subject + '\n' + content
  37. },
  38. "safe":"0"
  39. }
  40. # send_data = json.dumps(send_values, ensure_ascii=False)
  41. send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
  42. send_request = urllib2.Request(send_url, send_data)
  43. response = json.loads(urllib2.urlopen(send_request).read())
  44. print str(response)
  45.  
  46. if __name__ == '__main__':
  47. user = str(sys.argv[1])
  48. subject = str(sys.argv[2])
  49. content = str(sys.argv[3])
  50.  
  51. corpid = 'wx76c41a935c66acf9'
  52. corpsecret = 'RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs'
  53. accesstoken = gettoken(corpid,corpsecret)
  54. senddata(accesstoken,user,subject,content)

上面脚本中涉及了微信企业号中的用户(任意一个即可,如上的test001),应用ID,部门ID,corpid和secret

修改weixin.py脚本权限
[root@Zabbix-server alertscripts]# chown zabbix.zabbxix weixin.py
[root@Zabbix-server alertscripts]# chmod 755 weixin.py

手动测试weixin.py脚本,可以使用用户账号或应用ID去测试,观察微信是否能收到信息:
[root@Zabbix-server alertscripts]# ./weixin.py test001 test hahaha
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}
[root@Zabbix-server alertscripts]# ./weixin.py 1 test zabbix-微信报警
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx76c41a935c66acf9&corpsecret=RRuppCYAGgmYacNneRoRKXc1ESptSS4wKboZXcYOPrwspJqX1oU_Qs5U9jgcFQqs
{u'errcode': 0, u'errmsg': u'ok'}

接着开始登陆zabbix,添加报警设置(跟邮件报警的配置差不多)

1)创建报警媒介(这里我选用python脚本:weixin.py,如果选用shell脚本,就改换weixin.sh。其他设置都不变!)

注意下面要填写的脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

2)创建用户weixin(密码一栏可以选择跟之前的超级管理员zabbix一样的密码;用户类型也可以设置成超级管理员)

这里最好使用微信企业号的应用ID,这样发的报警信息,在企业号内的用户都能收到。或者添加任意一个用户账号(比如test-001),切不可添加多条,否则就会收到重复信息。

3)创建动作

注意严格下面的微信发送格式:
上面的默认接收人填写:{TRIGGER.STATUS}: {TRIGGER.NAME}

默认信息和恢复信息要填写一样的内容,如下:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}

如下,在“条件”里可自主选择添加“主机”和“模板”(具体可参考上一篇的“zabbix邮件报警”的此步设置)

下面的“操作”(具体说明可参考上一篇的“zabbix邮件报警”的此步设置)。
下面设置的报警信息只发送给weixin用户就行了,没有发生给用户组。

注意:“操作”底部的“条件“做如下设置(时间已确认=非确认),这个别忘了!

这样,就顺利创建了一个名为“weixin”的动作

测试,将其中一台被监控机器(192.168.1.25)的zabbix-agent服务关掉,观察微信是否能正常收到报警信息:
经测试,报警信息(3次)和恢复后的信息(1次),微信都能正常收到。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
要追加用户的微信监控,只需要将用户添加到相关应用关联到的对应部门里即可!其他配置都不需要动。

分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署的更多相关文章

  1. 企业级分布式监控系统-Zabbix基础

    1.基础分部 1.1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 1.2监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/ ...

  2. 分布式监控系统--zabbix

    1Zabbix简介 Zabbix 是一个企业级的分布式开源监控方案. 2.监控系统架构 C/S架构 客户端/服务器端,这种架构适合规模较小,处于同一地域的环境 C/P/S 客户端/代理端/服务器端/, ...

  3. 企业级分布式监控系统--zabbix

    目录 1.Zabbix简介 2.zabbix安装 3.工作原理 4.监控功能 5.监控系统架构 6.Zabbix系统架构 7.Zabbix组件构成 8.zabbix监控环境中基本概念 正文 回到顶部 ...

  4. Zabbix 4.0.24 完整安装

    依赖包安装: yum install net-snmp* libssh-devel libssh2-devel -y Zabbix server安装: wget https://cdn.zabbix. ...

  5. 【Zabbix】分布式监控系统Zabbix【二】

    一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...

  6. 【Zabbix】分布式监控系统Zabbix【一】

    一.Zabbix功能及特性简介 Zabbix可以获取cpu,内存,网卡,磁盘,日志等信息 1.Zabbix数据收集方式: a.Agent客户端(Agent客户端支持多平台部署) b.如果是无法安装客户 ...

  7. 分布式监控系统之Zabbix基础使用

    前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...

  8. 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  9. 分布式监控系统Zabbix-3.0.3-新版微信报警(企业微信取代企业号)

    一般来说,Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是现在越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人 ...

  10. 分布式监控系统Zabbix-3.0.3-完整安装记录(0)

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

随机推荐

  1. andriod 资源文件之存取操作

    来自:http://blog.csdn.net/jianghuiquan/article/details/8569235 <?xml version="1.0" encodi ...

  2. App开发流程之图像处理工具类

    先罗列一下工具类中提供的方法: /** * 根据原始view和毛玻璃样式,获取模糊视图,并自动作为原view的subview(如果不需要作为子视图,自行调用removeFromSuperview) * ...

  3. JAVA基础学习day15--集合二 TreeSet和泛型

    一.TreeSet 1.1.TreeSet Set:hashSet:数据结构是哈希表.线程是非同步的.        保证元素唯一性的原理:判断元素的HashCode值是否相同.         如果 ...

  4. 基础学习day02--标识符、关键字、数据类型与运算符

    一.标识符和关键字   关键字: 就是被java语言赋予了特殊含义的单词. 特点就是所有的关键字都是小写.   标识符: 就是给包.类.接口.方法.变量名起的名字. 规则:1.以数字.字母._以及$符 ...

  5. C语言中的字符和字符串

    C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...

  6. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

  7. Gradle深入与实战(转)

    转自:NO END FOR LEARNINGhttp://benweizhu.github.io/blog/2015/01/31/deep-into-gradle-in-action-1/ 什么是构建 ...

  8. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  9. cocos2d-x之多个移动的小球

    MoveBalls.hpp: #ifndef MoveBalls_hpp #define MoveBalls_hpp #include <stdio.h> #include "c ...

  10. cocos2d-x之使用plist文件初试

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } FileUtils *fu=FileUtils::getInstan ...