zabbix 微信告警

1.要用微信企业号发送告警,首先要申请微信企业号

   申请地址:https://qy.weixin.qq.com/,  

   参考:http://www.cnblogs.com/hanyifeng/p/5368102.html

2.申请好了企业号后,登陆,通讯录---组织架构(分组)---新增成员

3.部门ID记住(重要)

4.应用中心--新建应用

5.应用名称,功能介绍及应用课件范围

 

6.现在去设置-->功能设置-->权限管理,最重要的是CorpID,Secret 两个密钥,后期脚本里会利用它俩生成一个token ,然后利用token 去发送消息

 

7.微信消息发送脚本,

shell脚本

#!/bin/bash
#########################################################################
# File Name: wechat.sh
# Author: shaonbean
# Email: shaonbean@qq.com
# Created Time: Sun 24 Jul 2016 05:48:14 AM CST
#########################################################################
# Functions: send messages to wechat app
# set variables
CropID='wx53c1fe6d7584c1eed1'
Secret='EnuiCmS2XOktkZni_HyRmX9TEhv6sL2yrGeDvP1x7agp0NiKBqaXFX3e1W_eO4eenO'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
#get acccess_token
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=1                        #企业号中的应用id
local UserID="smi"                    #部门成员id,zabbix中定义的微信接收者
local PartyID=3                          #部门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 $! $2 $3)" $PURL
#http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式
#测试:

 pyhto脚本

#!/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])

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

8.在zabbix服务器测试 一下,脚本包含及授权权限zabbix.用户及组

[root@zabbix ~]# vim /usr/local/zabbix_server/etc/zabbix_server.conf    # 脚本路径
AlertScriptsPath=/usr/local/zabbix_server/share/zabbix/alertscripts        
[root@zabbix alertscripts]# ./webchat.sh test test
{u'errcode': 0, u'errmsg': u'ok'}
[root@zabbix alertscripts]# chown zabbix.zabbix webchat.sh

9.登录zabbix--管理--报警媒介类型--创建媒介类型

脚本名称:webchat.sh  【脚本路径在zabbix_server.conf文件中配置】

脚本参数:

{ALERT.SENDTO}        # 接收人

{ALERT.SUBJECT}      # 标题

{ALERT.MESSAGE}     # 发送内容

10.添加完成后,创建用户

 11.报警媒介--添加--类型(选择媒介)--收件人(1)--表示发给邮件管理组

12.创建报警动作

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!\n

---------------------------------------\n
详细信息:\n
告警主机:{HOSTNAME1}\n
告警时间:{EVENT.DATE} {EVENT.TIME}\n
告警等级:{TRIGGER.SEVERITY}\n
告警信息:{TRIGGER.NAME}\n
告警项目:{TRIGGER.KEY1}\n
问题详情:{ITEM.NAME}:{ITEM.VALUE}\n
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}\n
事件ID:{EVENT.ID}\n

恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!\n

---------------------------------------\n
详细信息:\n
告警主机:{HOSTNAME1}\n
告警时间:{EVENT.DATE} {EVENT.TIME}\n
告警等级:{TRIGGER.SEVERITY}\n
告警信息:{TRIGGER.NAME}\n
告警项目:{TRIGGER.KEY1}\n
问题详情:{ITEM.NAME}:{ITEM.VALUE}\n
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}\n
事件ID:{EVENT.ID}\n

 

 

参考文档

http://www.jianshu.com/p/09a5a21b6b47

http://www.cnblogs.com/hanyifeng/p/5368102.html

http://xumingjiang.blog.51cto.com/703960/1885229

posted @ 2017-01-03 20:35  sunmmi  阅读(276)  评论(0)    收藏  举报