路漫漫其修远兮
吾将上下而求索

zabbix学习:微信报警配置

1、说明

        感觉这个是最实用的报警方式,总算实现了,现在总结下,我是在以前邮件报警的基础上面做的实验,也就是说zabbix的web界面,server端,agent端都是能够正常工作的,并且有检测agent端80端口的监控项,action等配置。

2、企业微信配置    

        以前注册过一个订阅号,但是微信限制在48小时内如果用户没有给公众号发送过消息,公众号不能主动给用户推送消息,后来才找到可以用企业微信来进行发送消息,企业微信里面的用户可以无限制的互相发送消息。个人也可以注册企业微信

注册企业微信:https://work.weixin.qq.com

企业微信后台:https://work.weixin.qq.com/wework_admin/loginpage_wx

注册好后进入管理界面,可以自己先熟悉下各个选项的作用

  • 创建应用

选择应用管理 – 应用 – 自建 – 创建应用   这样后面的消息都是这个应用发出来的,应用点进去右上角可以选择是否启用。点击编辑,可以将人员添加进这个应用

  • 获取token

从下面的api文档中获取access token

https://work.weixin.qq.com/api/doc/90000/90135/91039

从下面的api文档中获取发送应用消息说明

https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

  • 自己微信关注企业微信号

我的企业 – 微信插件 – 邀请关注   然后自己的微信扫二维码,这样微信可以接收企业微信的消息,

可以选择应用消息从发送到企业微信还是自己的微信,设置:企业微信 – 设置 – 新消息通知 – 仅在企业微信中接收消息 – 设置关闭,企业微信 – 设置 – 新消息通知 – 仅在企业微信中接收应用 – 设置关闭,这样就会发送消息到微信

到这里,微信微信设置就可以了

现在企业微信和企业邮箱合并管理了

有个问题,如果我的账号使用的邮箱是contact,则邮箱有新邮件,微信就会提醒,而且免打扰不管用。这里设置我的账号使用andy邮箱,而设置公共邮箱为contact,这样微信不会经常有邮件提醒。通过邮箱管理大师收邮件。应用可以正常发消息不受影响

3、python脚本

import json
import time
import requests


class WeChat:
    def __init__(self):
        self.corpId = 'wwb6468feb4235ae8r'
        self.corpSecret = 'mSeg3DdYcqvonf2FkuDG3ELufxCyyhV2FjpR1UNr_sA'
        self.toUser = 'andy'
        self.agentId = 1000002
        self.accessToken = ''
        self.lastTime = ''

    def _get_access_token(self):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'
        values = {
            'corpid': self.corpId,
            'corpsecret': self.corpSecret
        }
        req = requests.post(url, params=values)
        data = json.loads(req.text)
        print("new token: ", data['access_token'])
        return data['access_token']

    def get_access_token(self):
        if self.accessToken == '':
            self.accessToken = self._get_access_token()
            self.lastTime = str(time.time())
            return self.accessToken

        if time.time() - float(self.lastTime) < 7200:
            return self.accessToken
        else:
            self.accessToken = self._get_access_token()
            self.lastTime = str(time.time())
            return self.accessToken

    def send_data(self, message):
        url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.get_access_token()
        send_values = {
            'touser': self.toUser,
            'msgtype': 'text',
            'agentid': self.agentId,
            'text': {
                'content': message
            },
            'safe': 0
        }

        send_msg = bytes(json.dumps(send_values), 'utf-8')
        respone = requests.post(url, send_msg)
        respone = respone.json()
        return respone['errmsg']


if __name__ == '__main__':
    wx = WeChat()
    print(wx.send_data("hello"))

下面是腾讯接口定义

image.png

服务端所有的自定义脚本都放在此目录下面:/usr/local/zabbix_server/etc/zabbix_server.conf.d
具体的脚本查看gitlab
第一参数是用户id,第二个参数是部门id,第三个参数是消息内容
经过测试默认部门id为1,但是有问题,这里部门id固定为2        
        
[root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#chmod +x WeChatSendMassage.py
[root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#./WeChatSendMassage.py "andyblog" 2 456    #测试成功,手机能成功收到消息,
{u'errcode': 0, u'errmsg': u'ok'}
[root@localhost /usr/local/zabbix_server/etc/zabbix_server.conf.d]#./WeChatSendMassage.py "andyblog|log" 2 456    #两个人接收,测试成功,手机能成功收到消息,
修改完要重启服务

编辑server端配置文件,修改自定义脚本文件位置
[root@localhost /usr/local/zabbix_server/etc]#vim zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix_server/etc/zabbix_server.conf.d

重启server端服务
# service zabbix_server restart
Shutting down zabbix_server:                               [  OK  ]
Starting zabbix_server:                                    [  OK  ]

注意,如果刚开始用root用户在命令行测试成功后,需将日志文件的属主和属组更改为zabbix,不然正常工作,zabbix用户无法写入日志会报错

4、zabbix设置

添加媒介,为脚本,输入的第一个参数为用户,多个用户用|分割,第二个参数经过测试固定为2,第三个参数要是信息的内容

image.png

一共添加了三个媒介,脚本都一样,只是参数不同,代表发送给不同人

WeChatSendMassage.py
andy|bob
2
{ALERT.MESSAGE}

在用户中将媒介添加进去

image.png

在action中添加一个action,这里因为一共人监控几个组,某几个组的,只要是high类型的都发送消息给某个人

image.png

下面的是微信的信息内容,信息的标题不重要

{TRIGGER.STATUS}: {TRIGGER.NAME}
告警状况:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}

image.png

image.png

在operation中设置发送信息,媒介设置为通过微信,就可以测试了

经过测试发现还挺稳定的,都能收到信息

121686168659835352.jpg

参考文章1

未经允许不得转载:江哥架构师笔记 » zabbix学习:微信报警配置

分享到:更多 ()

评论 抢沙发

评论前必须登录!