• zabbix中监控数据,报错返回给钉钉查看


    ### 在钉钉中创建群聊(同组的同学创建一个群聊),在群里面添加自定义机器人

    1.通过自定义webhook接入自定义服务

    image.png

     
    webhook:记住webhook的地址
    安全设置:设置加签,只有信息内容包含签才会被机器人发送。

    2.配置钉钉告警脚本

    #### **安装python依赖模块python-requests**

    ```

    yum  install python3 python3-requests

    #### 配置钉钉告警配置脚本zabbix_ding.conf 

    ##### 首先在创建目录/etc/zabbix/创建zabbix_ding.conf 文件

    1. [root@qfedu ~]# vim /etc/zabbix/zabbix_ding.conf
    2. [config]
    3. log_path=/var/log/zabbix/zabbix_ding.log
    4. webhook=https://oapi.dingtalk.com/robot/send?access_token=c1d11ecf6704f008eb25de644ed5cead752c065c0d11f9f89b58273cf0c78a96
    5. secret=SECc26e5bc55c64d454f15a8bdcce6825b7e5bb4f6fecc38025d2845837415192d7

    ##### 在目录/var/log/zabbix中创建钉钉告警日志文件zabbix_ding.log
     

    [root@qfedu ~]# touch /var/log/zabbix/zabbix_ding.log 

    ##### 设置钉钉告警日志文件zabbix_ding.log的所有权

        [root@qfedu ~]# chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log 

    #### **配置钉钉告警执行脚本dingding.py**

    ##### 在zabbix_server.conf中配置告警脚本的路径

    vim /etc/zabbix/zabbix_server.conf


    在zabbix_server.conf中配置告警脚本的路径
    # AlertScriptsPath=/usr/lib/zabbix/alertscripts
    我这里修改为
    AlertScriptsPath=/usr/lib/zabbix/alertscripts
     

    ##### 在/usr/lib/zabbix/alertscripts目录中执行的脚本dingding.py的内容

    1. # cd /usr/lib/zabbix/alertscripts
    2. # vim dingding.py
    3. 以下内容添加至dingding.py内
    4. #!/usr/bin/env python3
    5. # coding:utf8
    6. #
    7. import configparser
    8. import os
    9. import time
    10. import hmac
    11. import hashlib
    12. import base64
    13. import urllib.parse
    14. import requests
    15. import json
    16. import sys
    17. config = configparser.ConfigParser()
    18. config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
    19. log_path = config.get('config', 'log_path')
    20. api_url = config.get('config', 'webhook')
    21. api_secret = config.get('config', 'secret')
    22. log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    23. # 钉钉机器人文档说明
    24. # https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    25. def get_timestamp_sign():
    26.     timestamp = str(round(time.time() * 1000))
    27.     secret = api_secret
    28.     secret_enc = secret.encode('utf-8')
    29.     string_to_sign = '{}\n{}'.format(timestamp, secret)
    30.     string_to_sign_enc = string_to_sign.encode('utf-8')
    31.     hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    32.     sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    33.     return timestamp, sign
    34. # 获取加签后的链接
    35. def get_signed_url():
    36.     timestamp, sign = get_timestamp_sign()
    37.     webhook = api_url + "×tamp=" + timestamp + "&sign=" + sign
    38.     return webhook
    39. # 定义消息模式
    40. def get_webhook(mode):
    41.     if mode == 0:  # only 关键字
    42.         webhook = api_url
    43.     elif mode == 1 or mode == 2:  # 关键字和加签 或 # 关键字+加签+ip
    44.         webhook = get_signed_url()
    45.     else:
    46.         webhook = ""
    47.         print("error! mode:   ", mode, "  webhook :  ", webhook)
    48.     return webhook
    49. def get_message(text, user_info):
    50.     # 和类型相对应,具体可以看文档 :https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    51.     # 可以设置某个人的手机号,指定对象发送
    52.     message = {
    53.         "msgtype": "text",  # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
    54.         "text": {
    55.             "content": text  # 消息内容
    56.         },
    57.         "at": {
    58.             "atMobiles": [
    59.                 user_info,
    60.             ],
    61.             "isAtAll": False  # 是否是发送群中全体成员
    62.         }
    63.     }
    64.     return message
    65. # 消息发送日志
    66. def log(info):
    67.     if os.path.exists(log_path):
    68.         log_file = open(log_path, "a+")
    69.     else:
    70.         log_file = open(log_path, "w+")
    71.     log_file.write(info)
    72. def send_ding_message(text, user_info):
    73.     # 请求的URL,WebHook地址
    74.     # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
    75.     webhook = get_webhook(1)
    76.     # 构建请求头部
    77.     header = {
    78.         "Content-Type": "application/json",
    79.         "Charset": "UTF-8"
    80.     }
    81.     # 构建请求数据
    82.     message = get_message(text, user_info)
    83.     # 对请求的数据进行json封装
    84.     message_json = json.dumps(message)
    85.     # 发送请求
    86.     info = requests.post(url=webhook, data=message_json, headers=header).json()
    87.     code = info["errcode"]
    88.     errmsg = info["errmsg"]
    89.     if code == 0:
    90.         log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
    91.     else:
    92.         log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
    93.         print(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
    94.         exit(3)
    95. if __name__ == "__main__":
    96.     text = sys.argv[3]
    97.     user_info = sys.argv[1]
    98.     send_ding_message(text, user_info)

    ##### 设置脚本目录的所有权
     

    chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/

    ##### 给脚本x权限后测试

    1. chmod +x dingding.py 
    2. ./dingding.py  user subject mesages

    ### 配置脚本告警

    #### 创建媒介

    告警-->媒介-->创建媒介类型

    ##### 报警媒介类型


     

    1. {ALERT.SENDTO}
    2. {ALERT.SUBJECT}
    3. {ALERT.MESSAGE}

    ##### 消息模版

    以下消息模板会自动填充

    #### 为用户添加报警媒介

    #### 创建动作

    1. 主题:服务器报警
    2. 消息:
    3. 告警主机:{HOST.NAME}
    4. 告警地址:{HOST.IP}
    5. 监控项目:{ITEM.NAME}
    6. 监控取值:{ITEM.LASTVALUE}
    7. 告警等级:{TRIGGER.SEVERITY}
    8. 当前状态:{TRIGGER.STATUS}
    9. 告警信息:{TRIGGER.NAME}
    10. 告警时间:{EVENT.DATE} {EVENT.TIME}
    11. 事件ID:{EVENT.ID}
    12. ```
    13. ```
    14. 主题:服务器已恢复
    15. 消息:
    16. 告警主机:{HOST.NAME}
    17. 告警地址:{HOST.IP}
    18. 监控项目:{ITEM.NAME}
    19. 监控取值:{ITEM.LASTVALUE}
    20. 告警等级:{TRIGGER.SEVERITY}
    21. 当前状态:{TRIGGER.STATUS}
    22. 告警信息:{TRIGGER.NAME}
    23. 告警时间:{EVENT.DATE} {EVENT.TIME}
    24. 事件ID:{EVENT.ID}
    25. ```

  • 相关阅读:
    成都扬帆际海教育咨询有限公司—跨境电商店铺怎么装修?
    软件测试需要学习什么?好学吗?需要学多久?到底是报班好还是自学好?
    记录一次在欧拉(openEuler22.03LTS-SP4)系统下安装(踩坑)Freeswitch1.10.11的全过程
    大事件!请注意!AIGC正在疯狂“污染”学术界
    DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优
    ETL 与 ELT:哪一个适合您的业务?
    Web Worker
    SpringBoot集成nacos实现统一配置中心
    系统篇: linux 下实现 U 盘自动挂载
    ModelScope平台
  • 原文地址:https://blog.csdn.net/weixin_69654831/article/details/134429821