侧边栏壁纸
  • 累计撰写 123 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Zabbix企业微信报警

梁来福
2023-08-18 / 0 评论 / 0 点赞 / 1 阅读 / 9435 字
温馨提示:
本文最后更新于 2024-05-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

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

企业微信准备

申请微信号就不多说了

机器人准备

应用管理->创建应用

image.png

主要信息

Agentld + Secret + 企业ID号 + 部门ID

示例:

Agentld:1000002
Secret:7c95nJWIzT4Jd0zDWWQXgaZm0
企业ID号:ww90ee3eaf907134f4
部门ID:2

截图展示

image.png

image.png

image.png

接口调试

进入API-开发者工具:

https://open.work.weixin.qq.com/wwopen/devtool/interface/combine

image.png

Python监控脚本

#!/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 = 'ww90ee3eaf907134fb'
                self.__secret = 'L4R46vyMPSGnCQ1jc07c95nJWIzT4Jd0zDWWQXgaZm0'
        # 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])                                              

修改

需要修改的四处信息,改为自己的

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

添加执行权限

chmod +x wechat.py

测试脚本

python2 wechat.py Lianglaifu test test 微信名字

需要注意的是:这里使用的python2

放入指定位置

将脚本放入配置文件指定位置,可自行修改

vim /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts

查看微信

image.png

创建报警媒介

管理->报警媒介类型->创建媒体类型

image.png

脚本参数

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

创建报警用户

管理->用户->创建用户

image.png

群组可以单独设置,也可以加入管理员组

image.png

配置报警动作

配置->动作->创建动作

image.png

动作以及操作根据自己需求填写

报警模版

告警

服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
告警主机:{HOST.NAME}
告警信息:{TRIGGER.NAME}
告警项目:{ITEM.NAME} 
告警时间:{EVENT.DATE}_{EVENT.TIME}
当前状态:故障  值={ITEM.VALUE}
故障已持续{EVENT.AGE},请尽快处理
事件ID:{EVENT.ID}

恢复

服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
恢复主机:{HOST.NAME}
恢复信息:{TRIGGER.NAME}
恢复项目:{ITEM.NAME}
故障时间:{EVENT.DATE}_{EVENT.TIME}
恢复时间:{EVENT.RECOVERY.DATE}_{EVENT.RECOVERY.TIME}
当前状态:{TRIGGER.STATUS}  值={ITEM.VALUE}
故障共持续{EVENT.AGE}
事件ID:{EVENT.ID}

更新

确认信息:"{ACK.MESSAGE}"
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
确认人:{USER.FULLNAME} 
时间:{ACK.DATE} {ACK.TIME} 
当前的问题是: {TRIGGER.NAME}
时间ID:{EVENT.ID}

测试

image.png

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论