设置Zabbix微信告警机器人

40次阅读
没有评论

共计 3026 个字符,预计需要花费 8 分钟才能阅读完成。

前言:原地址https://www.xjd05.me/2024/03/zabbix.html 域名快到期了,博文迁移过来,原作者也是本人。

注意:多图预警!!!多图预警!!!多图预警!!!多图预警!!!

一、注册一个企业微信账号并设置

搜索企业微信官网 https://work.weixin.qq.com/,直接注册就行,这里我已经注册好了,登录企业微信管理后台https://work.weixin.qq.com/wework_admin/loginpage_wx 见下图:

1.1 记录企业 ID

设置 Zabbix 微信告警机器人

创建应用

设置 Zabbix 微信告警机器人

记录部门 ID

设置 Zabbix 微信告警机器人

1.2 打开记录记录 AgentId 和 Secret

设置 Zabbix 微信告警机器人

上面这个页面,拉到最下面开发者接口,网页授权及 JS-SDK—设置可信域名,根据你的提示验证域名(建议使用这种云提供商自带的 DNS,没有是话只能用海外未备案的了)

设置 Zabbix 微信告警机器人

配置企业可信 IP(把服务器 IP 填进去)

设置 Zabbix 微信告警机器人

1.3 测试企业微信接口调试工具

https://developer.work.weixin.qq.com/resource/devtool 网页地址可能会变,变了就在企业微信—开发者中心找,这里获取的 token 记录一下
设置 Zabbix 微信告警机器人

二、创建 Python 监控脚本并测试企业微信机器人

vim /usr/lib/zabbix/alertscripts/wechat.py
#!/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 = 'wwa1da242f211cdf47'
                self.__secret = 'rIrN51FEjgW6T2bdmSaEoOIB5UbaBTgddQkuC8cca1w'


        # 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':"1000002",
                        '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 个地方需要修改,都是之前要求记录的地方,找到他们修改成之前获取的信息:

    self.__corpid = 'wwa1da242f211cdf47'                     #公司的 corpid
    self.__secret = 'rIrN51FEjgW6T2bdmSaEoOIB5UbaBTgddQkuC8cca1w'    #应用的 secret
    'toparty':1,                                      #部门 id
    'agentid':"1000002",                                #应用 id

修改权限:

chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py
chmod 777 /usr/lib/zabbix/alertscripts/wechat.py

测试脚本:

在企业微信后台创建一个了测试账号

设置 Zabbix 微信告警机器人
root@HW-XJD:/usr/lib/zabbix/alertscripts#  ./wechat.py ddmm test test   #ddmm 是我创建的测试账号
{u'msgid': u'3yzdAQ61LCLTa8NCVqmn2anCu0FeX9rTisS0Z-YarJAJW8eHHqg_OJZHytsEq4bX-Xg7qtF2LfdPrpBxl1RO2g', u'errcode': 0, u'errmsg': u'ok'}
#这结果显示测试正常 #

查看手机端企业微信内的应用“报警机器人”,收到如下图信息

设置 Zabbix 微信告警机器人

而且还可以关联个人微信:

设置 Zabbix 微信告警机器人

三、zabbix-web 端设置企业微信告警

3.1 创建报警媒介

设置 Zabbix 微信告警机器人

3.2 关联告警媒介到用户收件人(PS:这截图的收件人有问题,要填员工账号,这个测试账号 ddmm 不行)

设置 Zabbix 微信告警机器人
设置 Zabbix 微信告警机器人

3.3 告警—动作—创建触发器动作

设置 Zabbix 微信告警机器人
设置 Zabbix 微信告警机器人
设置 Zabbix 微信告警机器人

以下是我的告警信息模板(可根据需要自己修改):

告警信息:----------
故障级别:{TRIGGER.SEVERITY}
时间:{EVENT.DATE} {EVENT.TIME}
监控项:{TRIGGER.NAME}
当前状态:{TRIGGER.STATUS}
问题详情:{ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}

主机信息:----------
名称:{HOST.NAME}
地址:{HOST.IP}
DNS:{HOST.DNS}
连接:{HOST.CONN}


请尽快处理。此消息为自动发送,请不要回复!

下了一台 agent 主机,查看效果:

设置 Zabbix 微信告警机器人
正文完
 0
xjd
版权声明:本站原创文章,由 xjd 于2024-09-26发表,共计3026字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)