python 企业微信告警

目标:

为了实现服务器性能监控指标告警,通过alertmanager触发告警后发送到webhook,然后通过python脚本实现数据清洗,并把告警内容发送给指定的企业微信用户。

由于频繁获取企业微信api可能会管理员拉入小黑屋,所有需要把获取access_token缓存到redis上,然后取数据在redis获取即可。

#!/usr/bin/env Python# -*- coding:utf-8 -*-import jsonimport timeimport requestsimport osimport redisfrom flask import request, Flask    class  qywx_obj:    def __init__(self):        self.CORPID = 'xxxxxxxxxxxxx'   # 企业的corpid        self.CORPSECRET_SEND_MSG = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 应用的secret        self.access_token = self.get_access_token(self.CORPSECRET_SEND_MSG)        self.AGENTID = 1000002        self.user_info = self.get_user_info()        def get_access_token(self, CORPSECRET):        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'        values = {                 'corpid': self.CORPID,                'corpsecret': CORPSECRET,        }        req = requests.post(url, params=values)        ACCESS_TOKEN = json.loads(req.text)["access_token"]        return ACCESS_TOKEN    def get_user_info(self):        GET_USER_URL = 'https://qyapi.weixin.qq.com/cgi-bin/user/list'        CORPSECRET_GET_INFO = 'xxxxxxxxxxxxxxx'    # 联系人的secret 用来获取部门的成员信息        access_token = self.get_access_token(CORPSECRET_GET_INFO)        values = {                'access_token': access_token,                'department_id': 1,                'fetch_child': 1,            }        USER_INFO = json.loads(requests.post(GET_USER_URL, params=values).text)["userlist"]        return USER_INFO    def send_data(self, TOUSER, message, access_token):        send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='   self.access_token        send_values = {            "touser": TOUSER,            "msgtype": "text",            "agentid": 1000002,            "text": {                "content": message                },            "safe": "0"            }        send_msges=(bytes(json.dumps(send_values), 'utf-8'))        respone = requests.post(send_url, send_msges)        respone = respone.json()          return respone["errmsg"]class redis_obj:    def __init__(self):        self.host = "172.16.40.24"        self.port = 6379        self.r = self.get_redis_obj()    def get_redis_obj(self):        pool=redis.ConnectionPool(host=self.host,port=self.port,db=0)        r = redis.StrictRedis(connection_pool=pool)        return r    def redis_cache(self, key, data):        self.r.set(key, data)        self.r.expire(key, 3600)            def get_access_from_redis(self, key):        if self.r.get(key):            return self.r.get(key)    def judge_redis_keys(self, key):        if self.r.exists(key) == 1:            return True        else:            return False        def GetData():    PostData = request.get_data().decode()    Data = json.loads(PostData)      JsonData = json.dumps(Data, ensure_ascii=False, indent=4)       return JsonDataapp = Flask(__name__)app.config['JSON_AS_ASCII'] = False  @app.route('/webhook/', methods=['POST'])def IssueCreate():    qywx = qywx_obj()    rds = redis_obj()    if not rds.judge_redis_keys("key_for_msg"):        rds.redis_cache("key_for_msg",qywx.access_token)    if not rds.judge_redis_keys("key_for_info"):        USER_INFO = qywx.user_info        rds.redis_cache("key_for_info",json.dumps(USER_INFO))    access_token_for_sendmsg = rds.get_access_from_redis("key_for_msg")    USER_INFO = json.loads(rds.get_access_from_redis("key_for_info").decode())    description = json.loads(GetData())    alert_info = description['alerts']    for n in range(len(alert_info)):        hostname = alert_info[n]['labels']['vm_name']        try:            IP = "172.16."   hostname.split("-")[2]        except:            continue        level = alert_info[n]['labels']['severity']        Server_supervisor = hostname.split("-")[1]        alertname = alert_info[n]['labels']['alertname']        annotations = alert_info[n]['annotations']['summary']        content = '''        负责人:%s        服务器地址:%s        告警信息:%s        严重程度:%s        '''%(Server_supervisor, IP, annotations, level)        usermail = "%s@qq.com"%Server_supervisor        for index in range(len(USER_INFO)):            if USER_INFO[index]["email"] == usermail:                TOUSER = USER_INFO[index]["userid"]                print(TOUSER, IP)                result = qywx.send_data(TOUSER, content, access_token_for_sendmsg)                print(result)                break    return "OK", 200     if __name__ == '__main__':    app.run(debug = True, host = '172.16.40.24', port = 6688)

  

来源:https://www.icode9.com/content-1-756201.html

(0)

相关推荐

  • 小游戏:换脸术

    最近估计大家都陆陆续续的复工了,大家经常在节后会得一个叫做节后综合征的病,具体表现为:提不起精神.上班效率低.没精神,严重的还会出现恶心.焦虑.神经衰落等等.这里给大家带来一个小游戏娱乐一下,放松上班 ...

  • App爬虫篇 - 破解移动端登录,助力 Python 爬虫

    第一时间获取 Python 技术干货! 阅读文本大概需要 10 分钟. 1 目 标 场 景 在移动互联网时代,很大一部分企业抛弃了传统的网站,选择将数据.服务整合到 App 端,因此 App 端无论是 ...

  • 一日一技:在 Python 中编写抽象类

    摄影:产品经理 游玩:产品经理&kingname 在极客时间某设计模式相关的课程中,某老师说 Python 不支持抽象类和接口. 但实际上,Python 支持抽象类. Python 自带的ab ...

  • python中的other.a怎么理解?

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/python中的other.a怎么理解? 作者:融水公子 rsgz Python3 教程 Python3 教程 http://www.rsgz.t ...

  • 企业微信群机器人使用指南和python示例

    流程简述 目前只支持发送数据,无法进行交互.对于监控和报告类任务,比如监控机器性能和一些指数等工作,可以极大简化工作量,末尾有简单的python示例. 在终端某个群组成功添加机器人之后,可以获取到we ...

  • 菜鸟记568-用笔记本上网课,企业微信视频会议怎么调换为外置摄像头?

    万一您身边的朋友用得着呢? 各位朋友早上好,小菜继续和您分享经验之谈,截止今日小菜已分享500+篇经验之谈,可以文章编号或关键词进行搜索. 微信推送规则发生改变,如果您想看到小菜每个工作日的经验之谈, ...

  • 菜鸟记571-都是腾讯旗下的软件,微信和企业微信能不能直接转发文件?

    万一您身边的朋友用得着呢? 各位朋友早上好,小菜继续和您分享经验之谈,截止今日小菜已分享500+篇经验之谈,可以文章编号或关键词进行搜索. 微信推送规则发生改变,如果您想看到小菜每个工作日的经验之谈, ...

  • 如何使用企业微信精准营销获客

    相较个人微信而言,企业微信拥有好友数.群人数.群发.快捷回复.数据分析等方面的优势,远远比个人微信更适合营销活动.因此,越来越多的销售人员使用企业微信进行营销. 那么,如何使用企业微信精准营销获客?小 ...

  • 实操干货 | 如何用企业微信做私域,助力业绩翻倍?

    五谷磨房是一家专注于做天然谷物营养食品的品牌,目前已入驻了全国300多个城市,有3000家以上的直营专柜.但受疫情影响,五谷磨房也面临着客户流失.服务内容分散.线上触达用户低的困境. 为了应对这些难题 ...

  • 如何利用企业微信低成本拉新,实现多项目变现

    大家好,我是井久,原本这篇文章在过年的时候就想分享,但是由于个人的原因导致一推再推,一直拖到现在才有机会进行分享,希望这次分享对你有所帮助. 企业微信是腾讯对标阿里的钉钉的办公工具,这句话对要也不对, ...

  • 干货分享︱私域运营越来越难,如何利用企业微信重生?

    如今,很多人的微信都不再是单纯的社交软件,更是其工作的辅助工具,但你是不是也遇到过诸如:员工离职导致其管理的社群资源被带走:微信好友数量达到上限,被限制部分功能:就算绑了N多种微信辅助工具,社群管理起 ...

  • 公众平台服务号、订阅号、企业微信、小程序的相关说明

                         1  公众号类型功能介绍 2  服务号.订阅号功能区别  3  小程序介绍           主要优势 1.用户可便捷地获取服务,无需安装或下载即可使用: ...

  • 如何设计“企业微信+社群+小程序+APP”的裂变矩阵?

    今年,大家会发现一个趋势,无论是朋友圈的裂变活动,商城下单后的引流动作,还是线下门店加好友送礼品,用户最终都在被引导到企业微信中. 根据企业微信截至到去年年底的数据显示,有80%的500强企业开通了企 ...