• 【zabbix】企业微信告警


    本篇基于我的前两章环境续写:

    1、【zabbix】docker安装zabbix、yum安装zabbix-agent

    2、【zabbix】MySQL模板创建与监控

    企业微信部分

    一、首先得有个企业微信号

    添加部门

     应用管理创建应用

     

     

     我的企业里面找到企业id,和上面两条一起,总共三条信息都要用到

    测试以下通讯是否正常,微信企业号接口调试工具:

    企业微信接口调试工具

     

    脚本准备部分 

    这里准备了两份脚本,两种发送方式,可以自选其一使用!

    在宿主机/usr/lib/zabbix/alertscripts/路径下创建weixin.py

    第一种脚本:这里要修改脚本里的这三条信息,也就是上文说到的三条信息

    1. corpid='' #企业ID

    2. appsecret='' #secret

    3. agentid=1000002 #AgentID

    1. #!/usr/bin/env python
    2. #-*- coding: utf-8 -*-
    3. #comment: zabbix接入微信报警脚本
    4. import requests
    5. import sys
    6. import os
    7. import json
    8. import logging
    9. logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
    10. datefmt = '%a, %d %b %Y %H:%M:%S',
    11. filename = os.path.join('/tmp','weixin.log'),
    12. filemode = 'a')
    13. corpid='企业ID' #企业ID
    14. appsecret='secret' #secret
    15. agentid=AgentID #AgentID
    16. #获取accesstoken
    17. token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
    18. req=requests.get(token_url)
    19. accesstoken=req.json()['access_token']
    20. #发送消息
    21. msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
    22. touser=sys.argv[1]
    23. subject=sys.argv[2]
    24. toparty='3|4|5|6'
    25. message=sys.argv[3]
    26. params={
    27. "touser": touser,
    28. "toparty": toparty,
    29. "msgtype": "text",
    30. "agentid": agentid,
    31. "text": {
    32. "content": message
    33. },
    34. "safe":0
    35. }
    36. req=requests.post(msgsend_url, data=json.dumps(params))
    37. logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

    第二种脚本:使用微信机器人,这个需要在企业微信里面创建群,在群里创建机器人,之后复制机器人的Webhook:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

     

    1. #!/usr/bin/env python
    2. #_*_coding:utf-8 _*_
    3. import requests,sys,json,time
    4. import urllib3
    5. urllib3.disable_warnings()
    6. def SendMessageURL(User,Subject,Messages):
    7. ###机器人的Webhook
    8. URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    9. HEADERS = {"Content-Type": "application/json"}
    10. Data = {
    11. "msgtype": "markdown",
    12. "markdown": {
    13. "content": "# ...... \n %s \n %s \n <@%s>"% (Subject,Messages,User),
    14. #"mentioned_list" : [User],
    15. #"content": \Subject \n Messages,
    16. #"mentioned_list" :[User],
    17. ###因为是故障告警群,所以需要@all,这个看自己选择
    18. "mentioned_list" :[User,"@all"]
    19. #"mentioned_mobile_list" : ["13800000000","@all"]
    20. }
    21. }
    22. r = requests.post(url=URL, headers=HEADERS, json=Data, verify=False)
    23. print(r.json())
    24. if __name__ == "__main__":
    25. SENDTO = str(sys.argv[1])
    26. SUBJECT = str(sys.argv[2])
    27. MESSAGE = str(sys.argv[3])
    28. Status = str(SendMessageURL(SENDTO,SUBJECT,MESSAGE))
    29. print (Status)

    脚本ok了 ,先在宿主机测试一下

    先看下宿主机python版本

    1. [root@k8s-node2 alertscripts]# python -V
    2. Python 2.7.5
    python weixin.py HuYiDuo gaojing jingbao

    ok 手机上的企业微信已经收到消息了

    我的zabbix服务端是基于zabbix/zabbix-appliance官方镜像,版本为4.4.6,

    所以这里就直接把脚本拷贝到容器中去

    cp /usr/lib/zabbix/alertscripts/weixin.py 容器id:/usr/lib/zabbix/alertscripts/

    进入zabbix/zabbix-appliance容器

    docker exec -it 9fc7a9551127f bash

    脚本已经过来了

     在容器中再测试一下

    python weixin.py HuYiDuo gaojing jingbao

    哟?报错了?

     看错误是缺少了requests,另外python版本是2.7.16

    用pip install requests 下载看看,结果也报错了,看到这个结果大致思路应该是python版本低了,得升级版本
    由于是在容器中安装python环境,所以要先确定下系统的发行版

    这里查出来是Alpine Linux,所以这里用不了yum,得用apk

    1. apk add build-base   //安装 GCC等工具
    2. 编译时的依赖库
    3. apk add --no-cache -U zlib-dev    //安装 zlib-devel
    4. apk add --no-cache -U openssl-dev   //安装openssl-devel
    5. 手动下载:https://www.python.org/downloads/source/
    6. 命令下载:wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
    7. 解压:tar -xvf Python-3.7.6.tgz
    8. 进入源码根目录:cd Python-3.7.6
    9. 配置源码生成makefile
    10. ./configure --enable-optimizations --with-ensurepip=install   //加上此选项会安装pip工具
    11. 编译:make 
    12. 安装:make install
    13. 由于执行configure时没有指定安装路径(--prefix=/opt/Python),所以安装到默认路径/usr/local/bin
    14. cd /usr/local/bin
    15. ln -s python3.5 python   //建立软连接,方便执行
    16. 其他:
    17. apk add python3
    18. wget https://bootstrap.pypa.io/get-pip.py
    19. python3 get-pip.py

    安装好后继续下载requests

    pip install requests

    再测试一下

    成功了

     zabbix配置企业微信告警部分

     配置报警媒介类型

    1. 收件人:
    2. {ALERT.SENDTO}
    3. 主题:
    4. {ALERT.SUBJECT}
    5. 消息:
    6. {ALERT.MESSAGE}

    测试报警媒介

     消息发送成功

    注:如果这一步之前在服务器及容器里测试消息都成功,但web页面报警媒介这里测试发送却报错就得检查脚本本身的问题了。

    如:#!/usr/bin/env python   这一行是否有对应环境,或者脚本python版本适配问题!

    消息接收成功

    配置动作

    这里先配了个zabbix客户端状态的触发器,待会做测试用

    注:触发器这一步配置也蛮重要,触发器配置不好无法触发,告警信息就会无法送达!

     操作里面的发送消息给用户和用户群组得自定义创建

    1. 服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
    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. 服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
    14. 消息内容:
    15. 告警主机:{HOST.NAME}
    16. 告警地址:{HOST.IP}
    17. 监控项目:{ITEM.NAME}
    18. 监控取值:{ITEM.LASTVALUE}
    19. 告警等级:{TRIGGER.SEVERITY}
    20. 当前状态:{TRIGGER.STATUS}
    21. 告警信息:{TRIGGER.NAME}
    22. 告警时间:{EVENT.DATE} {EVENT.TIME}
    23. 恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    24. 持续时间:{EVENT.AGE}
    25. 事件ID:{EVENT.ID}
    26. ----------------------------------------------------
    27. 服务器:{HOST.NAME}: {TRIGGER.NAME}已更新!
    28. 消息内容:
    29. 告警主机:{HOST.NAME}
    30. 告警地址:{HOST.IP}
    31. 监控项目:{ITEM.NAME}
    32. 监控取值:{ITEM.LASTVALUE}
    33. 告警等级:{TRIGGER.SEVERITY}
    34. 当前状态:{TRIGGER.STATUS}
    35. 告警信息:{TRIGGER.NAME}
    36. 告警时间:{EVENT.DATE} {EVENT.TIME}
    37. 恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    38. 持续时间:{EVENT.AGE}
    39. 事件ID:{EVENT.ID}

    这里及下面的发送消息给用户后来我给拿掉了,直接配成了管理组,这个发送消息给xx的配置自己自定义就好,只要能接收到消息。

    消息内容框里的内容部分,在消息内容:这一行上面把默认标题框里的信息给填上去,这样告警信息看起来会顺眼美观一些。

    接下来给用户Admin配置报警媒介,收件人这里我直接填写的@all

     用户配置完成就可以做测试了

    回到服务器,关闭zabbix-agent

    systemctl stop zabbix-agent

     成功接收到故障报警信息

     再启动zabbix-agent

    systemctl start zabbix-agent
    

     成功接收到故障恢复信息

    好了,至此企业微信告警就配置完了!!!

    zabbix全套配置思路也结束了!!!

  • 相关阅读:
    A Simple Baseline for BEV Perception Without LiDAR 论文笔记
    Python 深度学习导入的一些包的说明
    社会统计课程笔记
    feign 和 openFeign 的区别
    python虚拟环境
    2022年中国消费金融行业数字化技术创新分析
    音频领域的50个关键词
    【PHP】sign加签方法示例
    flink1.18.0 开始支持配置算子级别的TTL
    四、RocketMq本地集群搭建
  • 原文地址:https://blog.csdn.net/AnRanGeSi/article/details/126522881