zabbix告警信息之多渠道图文推送(微信+钉钉+邮件)

zabbix告警信息推送

实验介绍

zabbix 提供了丰富的报警媒介类型,包括短信、邮件、脚本等等,本实验就将采用自定义脚本调用微信接口,实现将告警信息以文本+监控趋势图推送至微信。

知识点
  • 了解zabbix常用告警媒介,能创建脚本将zabbix消息推送至各个接收终端
  • 掌握zabbix 监控趋势图如何获取
  • 了解钉钉、微信如何注册企业版
  • 掌握邮件、钉钉、微信接口调用方法,并能结合zabbix将告警消息推送出去

zabbix告警信息推送至微信

实现上述功能需要满足以下条件:

  • zabbix server 能够访问 微信接口
  • 注册微信企业号【注册200人以下企业微信号免费】
注册微信企业号

之所以采用微信企业号来推送消息,是因为微信企业号也指定推送接受人,相对更加安全,注册过程也非常简单,企业微信号注册地址,按照步骤一步步注册即可。

注册完成后,登陆微信企业号后台管理系统,找到“通讯录”,在公司名称处添加子部门,比如本实验中,添加了子部门“运维团队”,将需要的人员添加进去,选中“运维团队”,点击右侧虚线处,记住部门ID,后面的消息推送将会用到。

查找部门id

创建完成,再点击应用管理,微信企业号应用管理地址 , 找到“自建”,创建应用,名字可自定义,本实验中定义为“zabbix报警机器人”,可见范围选择前面所创建的“运维部门”,创建完成后,进入详情页,记住AgentIdSecret, 另外企业ID 可在“我的企业”中查找。

微信企业号接口调用

微信接口的调用,首先需要获取接口token,采用get方法,方式如下:

     def get_access_token(corp_id, corp_secret):
         """
         获取token
         :return: token
         """
         # corp_id, corp_secret 分别为企业ID、自建的应用密钥
         get_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (
             corp_id, corp_secret) 
         try:
             r = requests.get(get_token_url)
             request_json = r.json()
             access_token = request_json['access_token']
             with open('/tmp/.access_token.txt', 'w') as f:
                 f.write(access_token)
             return access_token
         except Exception as err:
             print("获取token失败,详情: " + str(err))
 

微信支持发送多种消息的类型,如文本、图片、语音、图文等等消息类型,本实验中需要发送文本以及图片类型的消息,因此最理想的是采用发送“图文消息”类型的消息,但官方称每个应用每天最多可以发送100次,因此实际上并不适用,本实验中采用文本类型+图片类型的组合模式。

发送文本消息类型

请求参数:

参数 必须 说明
touser 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
msgtype 消息类型,此时固定为:text (支持消息型应用跟主页型应用)
agentid 企业应用的id,整型。可在应用的设置页面查看
content 消息内容,最长不超过2048个字节,注意:主页型应用推送的文本消息在微信端最多只显示20个字(包含中英文)
safe 表示是否是保密消息,0表示否,1表示是,默认0

调用案例:

     def text_message(toparty, agent_id, message):
         """
         发送message 消息
         默认尝试5次,间隔1秒
         """
         times = 5
          # token 可根据前面的get_access_token 方法获取
         apiurl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % token
         while times:
             try:
                 params = {
                     "toparty": toparty,
                     "msgtype": "text",
                     "agentid": agent_id,
                     "text": {
                         "content": message
                     },
                     "safe": 0
                 }
     
                 r = requests.post(apiurl, data=json.dumps(params))
                 # 判断是否发送成功,如不成功则跑出异常,让其执行异常处理里的函数
                 request_json = r.json()
                 errmsg = request_json['errmsg']
                 if errmsg != 'ok':
                     raise
                 else:
                     print('post success %s ' % r.text)
 
                 # 消息成功发送,停止循环
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值