前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix 随笔:企业微信小程序告警篇

Zabbix 随笔:企业微信小程序告警篇

作者头像
IT小白Kasar
发布2022-02-16 18:46:30
3.7K2
发布2022-02-16 18:46:30
举报
文章被收录于专栏:个人技术随笔个人技术随笔

本文利用企业微信的方式告警。不过该方式有一个比较重要的前提,Zabbix Server 需要有访问外网的能力,接收端也需要有访问互联网的能力。

正文

本文环境为 python3,python2 的环境自行测试,如遇到问题可以及时与我联系。

本文环境

  • Zabbix Server 6.0 LTS RC2
  • Python 3

企业微信部分

登录企业微信后台
记住 corpid
记住 corpid

在应用管理菜单选择创建应用

创建应用
创建应用
填写好名称
填写好名称

这里需要设置可见范围

选择部门/成员
选择部门/成员

创建完成后,可以查看AgentId,Secret 需要登录客户端或者移动客户端查看

记住 AgentId
记住 AgentId
点击发送
点击发送
进入客户端,点击消息里的前往查看
进入客户端,点击消息里的前往查看
记住 Secret
记住 Secret
进入通讯录菜单,点击红框符号
进入通讯录菜单,点击红框符号
记住这里的部门 ID
记住这里的部门 ID

那么自此我们应该得到的有四个信息

  • corpid
  • corpsecret
  • agentid
  • 部门 ID

代码部分

根据上述的部分我们需要修改脚本四个信息

代码语言:javascript
复制
#!/usr/bin/python2
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys

reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  gettoken_url
    try:
        token_file = urllib2.urlopen(gettoken_url)
    except urllib2.HTTPError as e:
        print e.code
        print e.read().decode("utf8")
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token
def senddata(access_token,user,subject,content):
    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"$1",   
        "toparty":"修改成您的部门 ID",        
        "msgtype":"text",     
        "agentid":"修改成您的 agentid",  
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
    send_data = json.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib2.Request(send_url, send_data)
    response = json.loads(urllib2.urlopen(send_request).read())
    print str(response)

if __name__ == '__main__':
    user = str(sys.argv[1])     
    subject = str(sys.argv[2])  
    content = str(sys.argv[3])  

    corpid =  '修改成你的corpid'     
    corpsecret = '修改成你的corpsecret'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)
代码语言:javascript
复制
#!/usr/bin/python3
#_*_coding:utf-8 _*_
import urllib.request
import json
import sys

def gettoken(corpid,corpsecret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
    print  (gettoken_url)
    try:
        token_file = urllib.request.urlopen(gettoken_url)
    except urllib.error.HTTPError as e:
        print (e.code)
        print (e.read().decode("utf8"))
        sys.exit()
    token_data = token_file.read().decode('utf-8')
    token_json = json.loads(token_data)
    token_json.keys()
    token = token_json['access_token']
    return token

def senddata(access_token,user,subject,content):

    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
    send_values = {
        "touser":"$1",   
        "toparty":"修改成您的部门 ID",        
        "msgtype":"text",     
        "agentid":"修改成您的 agentid",  
        "text":{
            "content":subject + '\n' + content
           },
        "safe":"0"
        }
#    send_data = json.dumps(send_values, ensure_ascii=False)
    send_data = json.dumps(send_values, ensure_ascii=False).encode('utf-8')
    send_request = urllib.request.Request(send_url, send_data)
    response = urllib.request.urlopen(send_request)
    msg = response.read()
    print ("returned value : " + str(msg))


if __name__ == '__main__':
    user = str(sys.argv[1])     
    subject = str(sys.argv[2])  
    content = str(sys.argv[3])  

    corpid =  '修改为你的corpid'     
    corpsecret = '修改成你的corpsecret'
    accesstoken = gettoken(corpid,corpsecret)
    senddata(accesstoken,user,subject,content)
修改后
修改后
复制脚本到您的系统

默认 CentOS 7 为 python2,CentOS 8 为 python3 创建一个 wechat.txt 文件,这么做是避免 Windows 与 Linux 的编码格式问题

代码语言:javascript
复制
touch wechat.txt 
vim wechat.txt

完成修改后,将文件后缀改为py结尾

代码语言:javascript
复制
mv wechat.txt wechat.py
测试脚本

先给执行权限,随后执行脚本查看状态

代码语言:javascript
复制
chmod +x wechat.py
./wechat.py 1 1 1 
测试脚本成功
测试脚本成功

Zabbix部分

查询告警脚本目录

默认配置该目录是注释的(如下图),建议将注释取消掉,然后重启 Zabbix Server 服务。

代码语言:javascript
复制
cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath
移动脚本到指定目录
代码语言:javascript
复制
mv wechat.py /usr/lib/zabbix/alertscripts
修改完成
修改完成

Zabbix 前端部分

创建告警媒介路径为 管理 –> 报警媒介类型 –> 创建报警媒介类型

报警媒介配置

首先类型选择脚本,名称自己定义,脚本名称为放入指定目录的脚本名称,一定要对应,脚本参数和 python 里的顺序一一对应,python 里有三个参数 分别是 user <–> {ALERT.SENDTO}, subject <–> {ALERT.SUBJECT},content <–> {ALERT.MESSAGE},后面的宏为固定值。

前端的变量与后端脚本有紧密联系,如果 Python 脚本传参部分(sys.argv[])只有两个,就只需要写两个即可。

进入到 Message templates 里面(这里的作用为消息通知模板,包含一些变量,也就是需要告警包含哪些内容,不填写会出现告警失败),创建通知模板,点击添加,默认就有一些自带的模板,这里也可以不用设置,在后面的动作里可以创建自定义消息模板,关于美化可以参考后续文章美化篇。

最终效果
最终效果
测试脚本可用性

进入告警媒介类型选项,找到刚刚创建的企业微信小程序,点击测试

这里收件人、主题、消息都可以随便写,然后点击测试

当出现下图结果即为正常

模拟告警流程测试

用户部分授权

路径为 管理 –> 用户 –> 点击 Admin 用户 –> 报警媒介 –> 添加 选择类型为刚才创建的告警类型媒介,收件人随便填写,启用和告警级别根据自身情况填写。

点击红框即可进入用户设置选项
点击红框即可进入用户设置选项

找到报警媒介,点击添加,类型找到之前告警媒介类型里的企业微信小程序,收件人随便填写,这步骤不做告警产生的时候会报错,提示无用户定义,告警发送失败

创建动作

路径为 配置 –> 动作 –> 触发器动作 –> 创建动作

找到触发器动作
找到触发器动作
创建动作
创建动作

进入动作里,条件有很多类型可以选择,根据自身情况灵活定制,本文以主机群组为条件。

在操作细节里不具体展开,步骤在后续告警升级里会详细展开,本文以用户群组为基础,仅送到企业微信小程序为示例,这里大家可以根据实际情况调整,Custom message 部分在前面告警类型里已经创建了通知模板,这里可以不需要创建,优先级:操作细节里的自定义消息>告警类型里的模板。

这里需要注意的是模板必须存在,不然一样告警会出现失败,如果出现媒介未定义,就是整个问题。

最终效果
最终效果

模拟告警

创建虚拟主机

这里建一个无法 ping 通的主机,由于前面选择的条件为主机组,所以这里需要加入到 Zabbix Server 主机组,仅为演示,根据自身情况再调整,模板选择 ICMP Ping(在 Templates/Modules 下)

模拟告警

由于无法 ping 通,等待一段时间前端应该会出现 Unavailable by ICMP ping 的告警,也有相应的动作,灰色代表正常,如果是红色代表发送失败,具体可以分析下原因。

效果
告警和恢复效果
告警和恢复效果
手机端效果
手机端效果

如果需要在手机查看,需要关注二维码,否则只能在企业微信里查看。

需关注二维码
需关注二维码

写在最后

整个微信告警部分其实最难就是小程序部分,需要调整的参数比较多,相反机器人告警的方式比较简单,只需要调用机器人的 webhook 地址即可,后续我会补充微信机器人的告警,通过和一些网上朋友聊天,他们遇到的问题其实还是没有用心去理解这么做的一些含义,当然还有就是对 python 的不太熟悉的缘故,在测试的时候要思考一些问题发生的原因,很多问题在互联网上是可以找到的,最后路漫漫其修远兮,吾将上下而求索,祝大家新年快乐!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 本文环境
      • 企业微信部分
        • 登录企业微信后台
      • 代码部分
        • 复制脚本到您的系统
        • 测试脚本
      • Zabbix部分
        • 查询告警脚本目录
        • 移动脚本到指定目录
      • Zabbix 前端部分
        • 报警媒介配置
        • 测试脚本可用性
      • 模拟告警流程测试
        • 用户部分授权
        • 创建动作
      • 模拟告警
        • 创建虚拟主机
        • 模拟告警
        • 效果
    • 写在最后
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档