zoukankan      html  css  js  c++  java
  • Zabbix使用Python脚本实现微信告警

    一、注意事项

      参考"Zabbix遇到的问题集锦"中的第三点"利用Python发送告警注意细节"

      https://www.cnblogs.com/lisenlin/p/10075275.html#3

    二、微信侧准备

      1.企业微信ID

      2.AgentID

        3.Secret

     

      

    三、Python代码

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    import requests
    import json
    import sys
    
    
    
    
    # 存放access_token文件路径
    file_path = '4_access_token.log'
    
    
    
    def get_access_token_from_file():
        try:
            f = open(file_path,'r+')
            this_access_token = f.read()
            print('get success %s' % this_access_token)
            f.close()
            return this_access_token
        except Exception as e:
            print(e)
    
    # 获取token函数,文本里记录的token失效时调用
    def get_access_token():
        get_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s' % (corp_id, corp_secret)
        print(get_token_url)
        r = requests.get(get_token_url)
        request_json = r.json()
        this_access_token = request_json['access_token']
        print(this_access_token)
        r.close()
        # 把获取到的access_token写入文本
        try:
            f = open(file_path,'w+')
            f.write(this_access_token)
            f.close()
        except Exception as e:
            print(e)
            save_log(e)
    
        # 返回获取到的access_token值
        return this_access_token
    
    
    def save_log(content):
        with open(log,'a+') as f:
            content +='
    '
            f.write(content)
    
    try:
        # 获取输入参数
        list1 = sys.argv
        for i in list1:
            if "-corp_id" in i:
                corp_id = i.strip().split('corp_id=')[1]
            elif "-msg" in i:
                message = i.strip().split('=')[1]
            elif '-log' in i:
                log = i.strip().split('=')[1]
            elif '-corp_secret' in i:
                corp_secret = i.strip().split('=')[1]
            elif '-agent_id' in i:
                agent_id = int(i.strip().split('=')[1])
    
    except Exception as e:
        print('错误:%s'%e)
        save_log(e)
    
    
    
    
    # snedMessage
    # 死循环,直到消息成功发送
    flag = True
    while(flag):
        # 从文本获取access_token
        access_token = get_access_token_from_file()
        try:
    
            to_user = '@all'
            #message = sys.argv[3]
            # message = "test"
            send_message_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s' % access_token
            print(send_message_url)
            message_params = {
                                "touser":to_user,
                                "msgtype":"text",
                                "agentid":agent_id,
                                "text":{
                                    "content" : message
                                },
                                "safe":0
                            }
            r = requests.post(send_message_url, data=json.dumps(message_params))
            print('post success %s ' % r.text)
            # 判断是否发送成功,如不成功则跑出异常,让其执行异常处理里的函数
            request_json = r.json()
            errmsg = request_json['errmsg']
            if errmsg != 'ok':
                raise ValueError("错误:%s
    "%errmsg)
            # 消息成功发送,停止死循环
            flag = False
        except ValueError as e:
            print(e)
            access_token = get_access_token()
            save_log(e)
        except Exception as e:
            flag =False
            print('错误:%s' % e)
            save_log(e)

    四、Zabbix侧告警媒介类型

     

  • 相关阅读:
    输入输出重定向
    进程管理
    普通变量_环境变量_环境变量配置文件
    高级文件操作命令_文件查找
    软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理
    用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
    字符串是否包含中文
    SQL 优化
    JS数组
    RedisUtil 工具类
  • 原文地址:https://www.cnblogs.com/lisenlin/p/14660339.html
Copyright © 2011-2022 走看看