zabbix 报警方式之 微信公众号报警(5)

一、条件

  首先你得有一个微信公众号,并且是可以有发送消息的接口。然后你得有个脚本去调用微信的api。

  这里感谢一下微信。使我们运维人员的报警方式多了一种。。。 (同事们不要怪我哈。)

  之后可以参考下zabbix 的搭建,然后了解下脚本报警,之后再考虑报警方式的多样化。

二、申请公众号:

  1.申请页面:

  

  2.申请时记得选择团队。

  3.在组织架构中,新建二级组,并添加相关人员,注意添加人员的账号要记清楚。后期zabbix发送邮件时需要填写用户名。(悄悄告诉你,也可以填写@all 哦。)

  4.这里有个组的ID:2,这个很重要哈。

  5.新建应用,应用类型选择消息型

  6.选择部门

  7.下面是我新建的应用权限。

 

  8.现在去设置-->功能设置-->权限管理,最重要的是CorpID,Secret 两个密钥,后期脚本里会利用它俩生成一个token ,然后利用token 去发送消息,具体参见微信接口文档:http://qydev.weixin.qq.com/debug

 

  9.下面是开始微信的脚本上场了,额,具体的来源我忘记是哪个网站弄来的了。等找到后再放上链接。
三、微信脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

class WeChat(object):
        __token_id = ''
        # init attribute
        def __init__(self,url):
                self.__url = url.rstrip('/')
                self.__corpid = '你的Corpid'
                self.__secret = '你的SecretID'

        # Get TokenID
        def authID(self):
                params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
                data = urllib.urlencode(params)

                content = self.getToken(data)

                try:
                        self.__token_id = content['access_token']
                        # print content['access_token']
                except KeyError:
                        raise KeyError

        # Establish a connection
        def getToken(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'gettoken?'
                try:
                        response = urllib2.Request(url + data)
                except KeyError:
                        raise KeyError
                result = urllib2.urlopen(response)
                content = json.loads(result.read())
                return content

        # Get sendmessage url
        def postData(self,data,url_prefix='/'):
                url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
                request = urllib2.Request(url,data)
                try:
                        result = urllib2.urlopen(request)
                except urllib2.HTTPError as e:
                        if hasattr(e,'reason'):
                                print 'reason',e.reason
                        elif hasattr(e,'code'):
                                print 'code',e.code
                        return 0
                else:
                        content = json.loads(result.read())
                        result.close()
                return content

        # send message
        def sendMessage(self,touser,message):

                self.authID()

                data = json.dumps({
                        'touser':touser,
                        'toparty':"2",
                        'msgtype':"text",
                        'agentid':"2",
                        'text':{
                                'content':message
                        },
                        'safe':"0"
                },ensure_ascii=False)

                response = self.postData(data)
                print response


if __name__ == '__main__':
        a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
        a.sendMessage(sys.argv[1],sys.argv[3])

  注意:需要修改4处:

    1.14行、15行

    2.65行、67行  

  说明下,67行是你的组部门id号,agentid是你应用id号。。。。 记得修改脚本权限,属主,放到和mail.sh同级目录下。

  我们来测试下哇

[root@zabbix-6 alertscripts]# ./weixin.py hanyifeng test test
{u'errcode': 0, u'errmsg': u'ok'}

 

四、测试微信报警

  1.添加媒介这步骤就不说了,和之前添加脚本方式一样。不会的可以参考前面的文章哈。


  2.下面把10.8.0.13这台主机的zabbix-agent服务关掉。看下你的微信吧

本文章属于本作者原创,遵循开源协议,如有转载,请注明本链接的源地址。谢谢    继续更新中!!

如果遇到问题或者故障了,可以留言哈,一起学习进步。

posted @ 2016-04-08 15:17  飞走不可  阅读(26917)  评论(6编辑  收藏  举报