zoukankan      html  css  js  c++  java
  • Zabbix通过微信进行告警

    背景

    • 现实生产环境中,我们通常使用邮件和短信接受zabbix报警信息,但是邮件经常被工作人员搁置在角落中甚至被设置为垃圾邮件被过滤掉,短信需要额外的花费。
    • 复杂环境中非核心告警使用短信报警会使运维成本增加很多。
    • 微信是大家很常用的交流工具,其提供了很好的第三方接口,我们可以加以利用,不仅能解决告警信息处理的及时性也能降低运维成本。
      微信的第三方接口要求我们先申请一个企业号——传送门:https://qy.weixin.qq.com/

    具体实现

    一、如何操作企业号?

    1.通讯录添加企业成员

    我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。
    注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字

    2.应用中心创建应用

    我们要在这里创建应用,因为要通过应用发送消息给部门成员
    注意:这里要记住一个值,应用ID

    3.给部门设置管理员

    设置--->功能设置---->权限管理---->新建管理组
    管理员必须事先已经关注了企业号,并且已经设置好邮箱地址


    确定管理员可以读取通讯录,可以使用应用发消息。
    注意:我们需要管理员的CorpID和Secret

    二、如何调用微信接口?

    我们要准备这些东西:

    • 一个微信企业号
    • 企业号已经被部门成员关注
    • 企业号里有一个可以发消息的应用,一个授权管理员,可以使用该应用给成员发消息

    我们要取到这些信息:

    • 成员账号
    • 组织部门ID
    • 应用ID
    • CropID Secret

    调用微信接口需要一个调用接口的凭证:access_token
    通过 :CropID 、Secret才能获取到access_token,但是获取到的token有效期为两分钟

    微信企业号接口调试工具传送门:https://open.work.weixin.qq.com/wwopen/devtool/interface/combine

    Shell脚本
    使用:

    curl -s -G url         获取 AccessToken
    

    使用:

    curl --data url     传送凭证调用企业号接口
    

    zabbix会传递三个参数给脚本,$1是消息接收账号,$2报警标题,$3报警内容

    #!/bin/bash
    
    CropID='ax1a56e07fc*******'
    Secret='XTzhuelr6-jmwGiIVxhjE95wW2uEILiv*************'
    GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" 
    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
        local UserID=$1
        local PartyID=1
        local Msg=$(echo "$@" | cut -d" " -f3-)
        printf '{
    '
        printf '	"touser": "'"$UserID"'",
    '
        printf '	"toparty": "'"$PartyID"'",
    '
        printf '	"msgtype": "text",
    '
        printf '	"agentid": "'" $AppID "'",
    '
        printf '	"text": {
    '
        printf '		"content": "'"$Msg"'"
    '
        printf '	},
    '
        printf '	"safe":"0"
    '
        printf '}
    '
    }
    	
    /usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
    

    三、脚本为什么要这样写?

    因为微信企业号开放的端口有固定的格式限制
    企业号支持的格式:http://qydev.weixin.qq.com/wiki/index.php?title=消息类型及数据格式

    将脚本放入zabbix默认执行路径下:

    mv weixin.sh /usr/lib/zabbix/alertscripts/
    chown zabbix.zabbix weixin.sh
    chmod +x weixin.sh
    

    四、服务器端如何配置?

    1、添加报警的媒介:

    2、为用户添加媒介:

    3、添加触发器动作


    至此,已经全部设置完毕,手机上即可收到微信!

    最终结果展示

    收到的微信告警如下图所示:

    本文来自博客园,作者:sunnydoy,转载请注明原文链接:https://www.cnblogs.com/sunnydou/p/15105314.html

  • 相关阅读:
    这一次搞懂Spring自定义标签以及注解解析原理
    为什么要谨慎使用Arrays.asList、ArrayList的subList?
    【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常
    小心使用 Task.Run 解惑篇
    小心使用 Task.Run 续篇
    为什么要小心使用 Task.Run
    Visual Studio 调试技巧之即时窗口的妙用
    审计系统的一剂良方——事件溯源
    [C#.NET 拾遗补漏]13:动态构建LINQ查询表达式
    再聊 Blazor,它是否值得你花时间学习
  • 原文地址:https://www.cnblogs.com/sunnydou/p/15105314.html
Copyright © 2011-2022 走看看