• zabbix添加微信报警


    1、相关资源导航
    https://blog.csdn.net/zyj81092211/article/details/122917786

    2、环境介绍
    zabbix版本:6.0
    kubernetes版本:v1.23.4
    rancher版本:v2.6.3
    容器相关环境配置可参考如下
    https://blog.csdn.net/zyj81092211/article/details/123068347

    3、获取企业微信信息

    注:调用逻辑是:根据CropID找企业,根据AgentId和Secret找到具体应用,根据Toparty找到要发送信息的具体部门

    (1)登陆或注册企业微信
    https://work.weixin.qq.com/
    在这里插入图片描述
    (2)获取企业ID(CropID)
    我的企业-》企业信息-》企业ID
    在这里插入图片描述
    (3)自建应用获取应用信息(AgentId和Secret)
    应用管理-》应用-》自建
    在这里插入图片描述
    信息会发送到企业微信客户端
    在这里插入图片描述
    (4)获取部门ID(Toparty)
    在这里插入图片描述
    4、设置微信插件
    在这里插入图片描述

    在这里插入图片描述
    5、shell告警脚本
    注:更换脚本中企业微信信息,url是用来传递服务器登记信息的,没有可以不写

    #!/bin/bash
    # -*- coding: utf-8 -*-
    # zabbix notification confirmation script
    
    #自建应用信息
    Toparty=xxx   #部门id
    AgentID=xxx     #应用id
    Secret='xxx'  
    
    #修改为企业CropID
    CropID='xxx'
    GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
    
    #获取Token
    #Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')
    Gtoken=$(/usr/bin/curl -s -G $GURL | sed 's/,/\n/g' | grep -i access_token | awk -F \" '{print $4}')
    
    #发送消息接口
    PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
    
    #报警信息主题,zabbix传入
    Title="$1"
    
    #报警信息正文内容,zabbix传入
    Message="$2"
    
    #发送消息函数(构建json发送)
    JSON_BODY(){
        printf "%s\n" "{"
        printf "\t%s\n" "\"toparty\":\"$Toparty\","
        printf "\t%s\n" '"msgtype": "textcard",'
        printf "\t%s\n" "\"agentid\":\"$AgentID\","
        printf "\t%s\n" "\"textcard\": {"
        printf "\t\t%s\n" "\"title\":\"$Title\","
        printf "\t\t%s\n" "\"description\":\"$Message\","
        printf "\t\t%s\n" "\"url\":\"$url\","
        printf "\t%s\n" "}"
        printf "%s\n" "}"
    }
    
    #函数中URL构建
    IP=$(echo "$Message" | grep '告警地址' | awk -F : '{print $2}')
    url="xxx"
    
    #发送报警信息
    curl -s -H "Content-Type: application/json" -X POST -d "$(JSON_BODY $1 $2)" $PURL
    
    
    • 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
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    6、python脚本(可选)

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # zabbix notification confirmation script
    # python2.7 or above
      
    import requests
    import json
    import os
    import sys
      
    Toparty = "xxx"   #部门id
    AgentID = xxx     #应用id
      
    #修改为企业CropID和Secret
    CropID = 'xxx'
    Secret = 'xxx'
      
    #获取Token
    Gtoken ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+ CropID + "&corpsecret=" + Secret
    headers = {'Content-Type': 'application/json'}
    json_data = json.loads(requests.get(Gtoken).content.decode())
    token = json_data["access_token"]
      
    #消息发送接口
    Purl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token
      
    #消息发送函数
    def msg(title,message,url):
        weixin_msg = {
             "toparty" : Toparty,
             "msgtype" : "textcard",
             "agentid" : AgentID,
             "textcard" : {
                 "title" : title,
                 "description" : message,
                 "url" : url,
              }
          }
        print requests.post(Purl,json.dumps(weixin_msg),headers=headers)
      
    if __name__ == '__main__':
        title = sys.argv[1]        #获取第一个参数
        message = sys.argv[2]      #获取第二个参数
        a1=message.find("告警地址:")+len("告警地址:")
        a2=message.find("监控项目:")
        url="url"+message[a1:a2]
       #print(a1)
       #print(a2)
       #print message[a1:a2]
        msg(title,message,url)
    
    • 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
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    7、将脚本挂载到容器中
    现将脚本上传到nfs存储中并加执行权限
    在这里插入图片描述
    挂载到容器中/usr/lib/zabbix/alertscripts目录
    在这里插入图片描述
    8、创建报警媒介
    在这里插入图片描述
    选择脚本并添加参数
    在这里插入图片描述

    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    
    • 1
    • 2

    内置参数说明
    https://www.zabbix.com/documentation/6.0/en/manual/appendix/macros/supported_by_location

    配置信息模板
    在这里插入图片描述
    主题

    {TRIGGER.STATUS}: {TRIGGER.NAME}
    
    • 1

    消息

    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    事件ID:{EVENT.ID}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    主题

    {TRIGGER.STATUS}: {TRIGGER.NAME}
    
    • 1

    消息

    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件ID:{EVENT.ID}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    9、创建报警动作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    问题发生操作
    在这里插入图片描述
    在这里插入图片描述
    主题

    {TRIGGER.STATUS}: {TRIGGER.NAME}
    
    • 1

    消息

    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    事件ID:{EVENT.ID}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    问题恢复操作
    在这里插入图片描述
    在这里插入图片描述
    主题

    {TRIGGER.STATUS}: {TRIGGER.NAME}
    
    • 1

    消息

    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    监控取值:{ITEM.LASTVALUE}
    告警等级:{TRIGGER.SEVERITY}
    当前状态:{TRIGGER.STATUS}
    告警信息:{TRIGGER.NAME}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件ID:{EVENT.ID}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    10、为用户创建报警媒介
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    11、测试
    执行下面命令,让多核CPU 使用率达到100%

    for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/dev/null & done
    
    • 1

    问题报警
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    问题恢复
    在这里插入图片描述

    在这里插入图片描述
    12、企业微信API查看(可选)
    在这里插入图片描述
    在这里插入图片描述
    如何获取token
    在这里插入图片描述
    发送应用消息。里面有消失示例
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【Linux--进程间通信】
    前端项目开发流程
    Python获取MP3文件的ID3标签信息
    民安智库(第三方市场调查公司)企业如何开展员工满意度调查
    linux配置静态ip ip和网关不在同一个网段
    【笔试强训选择题】Day41.习题(错题)解析
    人工智能学习:NMIST数据分类识别-CNN网络(3)
    【SVM时序预测】基于matlab鲸鱼算法优化支持向量机SVM时序数据预测【含Matlab源码 2250期】
    AutoDWG 文件属性编辑修改控件/Attribute Modifier-X
    计算机网络:随机访问介质访问控制之ALOHA协议
  • 原文地址:https://blog.csdn.net/zyj81092211/article/details/126459453