首页 > 其他分享 >zabbix--微信告警

zabbix--微信告警

时间:2023-06-08 16:46:32浏览次数:43  
标签:-- 微信 json Token zabbix usr requests

zabbix 微信告警机制#

zabbix 告警机制有很多,比如邮件、微信、电话、短信等等。很多,但是像电话和短信都是有钱人玩的,我们这些穷屌丝玩玩 微信 邮件 就可以了。

参考:https://github.com/X-Mars/Zabbix-Alert-WeChat

微信告警首先得注册一个企业微信,然后才能实现微信告警。注册地址:https://work.weixin.qq.com/

实战#

注册企业微信

注册成功后,进入后台管理

添加一个部门,并记住部门 ID

添加一个用户到上面创建的部门里面(这里采取直接将管理员添加进去)

创建一个自建应用

创建完成记住 AgentID  和 Secret

记住企业 ID

到这里上面的企业微信注册就完成了,记住上面所提到需要记住的。

zabbix-server 配置

1)编辑zabbix-server 配置文件进行配置(我这里是源码安装的,路径为/usr/local/zabbix;如果是yum安装的,路径为/etc/zabbix/)

# vim /usr/local/zabbix/etc/zabbix_server.conf
AlertScriptsPath=/usr/local/zabbix/lib/zabbix/alertscripts     //(如果不存在则自动创建)
# mkdir -p /usr/local/zabbix/lib/zabbix/alertscripts

2)安装组件 requests

  • 方法一
    # pip install requests
    # pip install --upgrade requests
  • 方法二 复制代码
    # wget https://pypi.python.org/packages/c3/38/d95ddb6cc8558930600be088e174a2152261a1e0708a18bf91b5b8c90b22/requests-2.18.3.tar.gz
    # tar zxvf requests-2.18.3.tar.gz
    # cd requests-2.18.3
    # python setup.py build
    # python setup.py install 
    复制代码

4)下载安装脚本

# git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
# cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/lib/zabbix/alertscripts/    //copy到上面配置文件配置的目录下
# chmod +x /usr/local/zabbix/lib/zabbix/alertscripts/wechat.py

下载下来后脚本的内容

下载完成时的脚本内容

5)根据脚本里面的注释进行相应的修改,改成自己企业微信号中的信息。如下

复制代码
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
#auther:火星小刘

import requests,sys,json
import urllib3
urllib3.disable_warnings()

reload(sys)
sys.setdefaultencoding('utf-8')

def GetTokenFromServer(Corpid,Secret):
    Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
    Data = {
        "corpid":Corpid,
        "corpsecret":Secret
    }
    r = requests.get(url=Url,params=Data,verify=False)
    print(r.json())
    if r.json()['errcode'] != 0:
        return False
    else:
        Token = r.json()['access_token']
        file = open('/tmp/zabbix_wechat_config.json', 'w')
        file.write(r.text)
        file.close()
        return Token

def SendMessage(User,Agentid,Subject,Content):
    try:
        file = open('/tmp/zabbix_wechat_config.json', 'r')
        Token = json.load(file)['access_token']
        file.close()
    except:
        Token = GetTokenFromServer(Corpid, Secret)

    n = 0
    Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
    Data = {
        "touser": "LiYanJie",                           # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        #"totag": Tagid,                                # 企业号中的标签id,群发使用(推荐)
        "toparty": 2,                                   # 企业号中的部门id,群发时使用。
        "msgtype": "text",                              # 消息类型。
        "agentid": 1000002,                             # 企业号中的应用id。
        "text": {
            "content": Subject + '\n' + Content
        },
        "safe": "0"
    }
    r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False)
    while r.json()['errcode'] != 0 and n < 4:
        n+=1
        Token = GetTokenFromServer(Corpid, Secret)
        if Token:
            Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
            r = requests.post(url=Url,data=json.dumps(Data, ensure_ascii=False),verify=False)
            print(r.json())

    return r.json()


if __name__ == '__main__':
    User = sys.argv[1]                                                                # zabbix传过来的第一个参数
    Subject = str(sys.argv[2])                                                        # zabbix传过来的第二个参数
    Content = str(sys.argv[3])                                                        # zabbix传过来的第三个参数

    Corpid = "ww986f52f27xxxxxxx"                                                     # CorpID是企业号的标识
    Secret = "Sinht6K7VBaJmjuZDaoOnCoyovcLHxxxxxxxxxxxxxx"                            # Secret是管理组凭证密钥
    #Tagid = "1"                                                                      # 通讯录标签ID
    Agentid = "1000002"                                                               # 应用ID
    Partyid = "2"                                                                     # 部门ID

    Status = SendMessage(User,Agentid,Subject,Content)
    print Status
复制代码

6)测试脚本是否可用

# python /usr/local/zabbix/lib/zabbix/alertscripts/wechat.py www web 123
{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}

补充说明:脚本里面默认是python2.7  而我们系统自带的是python2.6 那么需要安装python2.7。安装参考

python2.6升级到python2.7

server 端Web界面配置 

进入:配置 -> 报警媒介类型 -> 创建媒体类型

脚本参数

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

给用户添加报警媒介,也可以新建一个用户用来专门来用于微信报警,我这里直接使用 admin 用户了(说明:这里收件人对应企业微信号中的应用ID)

测试

停掉被监控主机上面的应用,看能否发送微信消息

# /etc/init.d/php-fpm stop
Stopping php-fpm:                                          [  OK  ]

可以看到可以收到微信消息,至此,微信告警就搞定了。

标签:--,微信,json,Token,zabbix,usr,requests
From: https://www.cnblogs.com/A121/p/17466909.html

相关文章

  • simulink之S函数--实践
    若系统G(s)=1/(3s+2),乳选取状态变量x=y,则其状态空间方程可表示为dx=(-2x+u)/3且y=x,对系统建立S-函数,绘制该控制系统的阶跃响应曲线。零、分析,其实该题若不是要求建立S-函数,绘制系统的阶跃响应曲线,完全可以直接用系统的传递函数,采用如下方式,直接完成的。一、传递函数......
  • CF323B - Tournament-Graph
    题意:构造一个\(n\)大小的锦标赛图,即每两点之间恰有一条有向边,满足任意点对\((u,v)\),都存在一条从\(u\)到\(v\),长度不超过\(2\)的路径。方法一考虑奇数情况,假设我们的点是在环上排列的,那么我们对任意的跨越不超过半个环的边都连上,也就是说,我们把点看成圆上的若干个等分点......
  • zabbix--远程执行命令
    zabbix远程执行命令重启应用服务器#使用远程执行命令可以在某些时候帮我做一些事情,达到轻量级的自动化,比如当nginx、mysql、php、redis、tomcat、等等应用挂掉时帮我们自动重启并告警。再比如当磁盘空间满了,自动帮我们清理垃圾日志文件等。看下官网的描述:使用远程命令,您可以......
  • mybatis if标签的判断是否等于1,0
    正确写法:<iftest="xxx=1">或者<iftest="xxx='1'.toString()">或者<iftest='xxx="1"'>错误写法<iftest="xxx='1'">如果判断条件是数字,则不能加单引号,否则将会不生效! 拓展:mybatis源码中,会把......
  • zabbix--邮件告警报错“Support for SMTP authentication was not compiled in”
    邮件报警失败:SupportforSMTPauthenticationwasnotcompiledin 解决办法:升级curl版本具体操作步骤:1)安装curl #rpm-Uvhhttp://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm#yum--showduplicateslistc......
  • CANoe_ Trace 和 Graphics 窗口的介绍和使用
    Canoe是一款用于汽车网络分析和仿真的工具,其中包括Trace和Graphics两个窗口,用于显示和分析CAN网络数据。以下是对Canoe的Trace和Graphics窗口的简要介绍和使用说明:1.Trace窗口Trace窗口用于显示CAN网络中的消息和信号数据。可以在Trace窗口中实时查看CAN消息的发送和接收情......
  • zabbix--基础概念及原理
    zabbix基础概念及工作原理整理#什么是zabbix?#Zabbix能监控各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。主要有以下几个功能组......
  • cordova3.5整合百度云推送PushNotification(1)
    选择百度云推送理由:专业、稳定、免费(GoogleGCM在国内有时无法正常使用)第1步:注册开发者账户并登录。第2步:创建一个工程。输入必要的信息。第3步:创建完成后。可以看到百度为你分配的APIKey和SecretKey。先复制APIKey第4步:集成到phonegap/cordova开发环境打开cmd,cd到你的工......
  • 正则表达式30分钟入门教程(第二版),正则讲解
    作者:mfkidt目录本文目标如何使用本教程什么是正则表达式?入门测试正则表达式元字符字符转义重复字符类反义替换分组后向引用位置指定负向位置指定注释贪婪与懒惰平衡组还有些什么东西没提到一些我认为你可能已经知道的术语的参考网上的资......
  • jquery Mobile点击显示加载等待效果
    点击某个按钮或链接时,触发等待加载效果:<script><!--$(document).bind("mobileinit",function(){});$(function(){//默认设置,一个小圈圈在转$('#default').live('tap',function(){$.mobile.loadingMessageTe......