设为首页收藏本站我的广告

运维网

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
总共321条微博

每日一博

查看: 35775|回复: 18

【站长推荐】zabbix如何实现微信报警【顶】

[复制链接]

该用户从未签到

ywjack 发表于 2015-8-28 13:15:11 | 显示全部楼层 |阅读模式
【重大新闻】 现实生产环境中,我们通常使用邮件和短信接受zabbix报警信息,但是邮件经常被工作人员搁置在角落中甚至被设置为垃圾邮件被过滤掉。公司的短信接口又太贵,复杂环境中使用短息报警会使运维成本增加很多。微信提供了很好的第三方接口,我们可以利用微信报警以求降低运维成本。
       微信的第三方接口要求我们先申请一个企业号——传送门:https://qy.weixin.qq.com/

zabbix如何实现微信报警

zabbix如何实现微信报警



如何操作企业号?


1.通讯录添加企业成员


           我们要提前把成员信息添加进组织部门,必填项+手机号或者微信号,这样别人扫描二维码的时候才能成功关注企业号。

           注意:这里有两个我们要用到信息,一个组织部门的ID,一个部门成员的账号(账号是自己手动指定的,不同于微信号,最好是字母加数字)


zabbix如何实现微信报警

zabbix如何实现微信报警


zabbix如何实现微信报警

zabbix如何实现微信报警


2.应用中心创建应用

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

zabbix如何实现微信报警

zabbix如何实现微信报警

zabbix如何实现微信报警

zabbix如何实现微信报警


3.给部门设置管理员

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

zabbix如何实现微信报警

zabbix如何实现微信报警

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

zabbix如何实现微信报警

zabbix如何实现微信报警

我们要准备这些东西:

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


我们要取到这些信息:

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



如何调用微信接口?

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

zabbix如何实现微信报警

zabbix如何实现微信报警

zabbix如何实现微信报警

zabbix如何实现微信报警


        微信企业号接口调试工具传送门:http://qydev.weixin.qq.com/debug



Shell脚本原理

        使用:

        curl -s -G  url           获取 AccessToken

        使用:

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
###SCRIPT_NAME:weixin.sh###
###send message from weixin for zabbix monitor###
###wuhf###
###V1-2015-08-25###

CropID='xxxxxx'
Secret='xxxxxx'
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=3                        企业号中的应用id
        local UserID=$1                          部门成员id,zabbix中定义的微信接收者
        local PartyID=1                          部门id,定义了范围,组内成员都可接收到消息
        local Msg=$(echo "$@" | cut -d" " -f3-)  过滤出zabbix中传递的第三个参数
        printf '{n'
        printf 't"touser": "'"$User""",n"
        printf 't"toparty": "'"$PartyID""",n"
        printf 't"msgtype": "text",n'
        printf 't"agentid": "'" $AppID """,n"
        printf 't"text": {n'
        printf 'tt"content": "'"$Msg"""n"
        printf 't},n'
        printf 't"safe":"0"n'
        printf '}n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL




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

zabbix如何实现微信报警

zabbix如何实现微信报警



将脚本放入zabbix默认执行路径下
1
2
3
mv weixin.sh /usr/local/zabbix/share/zabbix/alertscripts
chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/weixin.sh
chmod +x /usr/local/zabbix/share/zabbix/alertscripts/weixin.sh





        服务器端

       1.创建媒介

zabbix如何实现微信报警

zabbix如何实现微信报警


        2.创建用户

zabbix如何实现微信报警

zabbix如何实现微信报警



        3.创建触发器动作发送内容

zabbix如何实现微信报警

zabbix如何实现微信报警


        4.设置触发器动作发送方式

zabbix如何实现微信报警

zabbix如何实现微信报警



收到的微信消息:

zabbix如何实现微信报警

zabbix如何实现微信报警

运维网 感谢您的阅读
回复过本主题
的还回复过:

该用户从未签到

wobunvj 发表于 2015-10-9 12:20:56 | 显示全部楼层
不错!值得学习,楼主继续












供应UL认证电源 桌面式5V6A开关电源适配器
[发帖际遇]: 一个袋子砸在了 wobunvj 头上,wobunvj 赚了 3 金钱. 幸运榜 / 衰神榜
  • TA的每日心情
    擦汗
    2015-11-4 14:07
  • 签到天数: 1 天

    [LV.1]初来乍到

    takill 发表于 2015-11-4 17:29:17 | 显示全部楼层
    不错,楼主写得很好

    该用户从未签到

    lvweilv 发表于 2015-12-3 15:08:54 | 显示全部楼层
    楼主,脚本测试失败,看看是哪儿的问题。谢谢

    该用户从未签到

    xiaoone 发表于 2015-12-4 14:32:34 | 显示全部楼层
    步骤非常详细!!感谢楼主的分享!!最近我看到有款OneAlert的产品,貌似也支持微信通知功能,还有个电话通知方式,能不能问下楼主,咱们Zabbix什么时候可以实现短信通知哟?并且如果微信告警比OneAlert的操作简单点就更好了!!

    该用户从未签到

    wuwp_tt 发表于 2015-12-29 15:41:04 | 显示全部楼层
    lvweilv 发表于 2015-12-3 15:08
    楼主,脚本测试失败,看看是哪儿的问题。谢谢

    APPID和PartyID看一下是否正确
    另外就是printf后面的符号是单引号'   '  ,不是 ` `
    不要全盘复制啊,还是要自己检查下
    我现在遇到的问题是,每次都重复发送,比如我配置了3个接收人,就给每个接收人发3次消息

    该用户从未签到

    wuwp_tt 发表于 2015-12-29 16:23:18 | 显示全部楼层
    确切的说,我的问题应该是这样的:

    该用户从未签到

    wuwp_tt 发表于 2015-12-29 16:23:34 | 显示全部楼层
    确切的说,我的问题是这样的
    [发帖际遇]: 乐于助人,奖励 7 . 幸运榜 / 衰神榜

    该用户从未签到

    wuwp_tt 发表于 2015-12-29 16:24:41 | 显示全部楼层
    我的问题是这样的:只要关注了这个企业号,并且在这个部门里面,不管在zabbix里面有没有添加该人员的微信账号信息,都会收到报警邮件
    [发帖际遇]: 一个袋子砸在了 头上, 赚了 2 金钱. 幸运榜 / 衰神榜

    该用户从未签到

    叫个啥名呢 发表于 2015-12-29 21:54:49 | 显示全部楼层
    内网环境怎么实现呢
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|申请友链|sitemap|手机版|小黑屋|Archiver|运维网 ( 京ICP备16008201号  

    GMT+8, 2017-11-22 11:38 , Processed in 0.273537 second(s), 84 queries , XCache On.

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表