#!/env/python
#-*- coding:utf-8 -*-
# Author: xwj
# date: 2021/11/19
from flask import Flask, jsonify, request
import requests, json
app = Flask(__name__)
app.debug = True
def deal_labels(label_dict):
'''
格式化处理标签数据
'''
label_str = ''
for k,v in label_dict.items():
label_str +="{}:{}\t".format(k,v)
return label_str
def deal_alertdata(d_dict):
'''
格式化告警/恢复数据
'''
alert_type = d_dict['type']
alert_data = []
if alert_type == 'alert':
alert_str = "# <font color='warning'>告警通知</font>\n\n**告警类型**: alert \n**发生时间**: {}\n**告警链接**: [告警地址]({})\n".format(d_dict['time'], d_dict['confirm_link'])
for alert in d_dict['alerts']:
alert_label = deal_labels(alert['labels'])
alert_t_str = "\n\n————————————————\n\n" + "> 告警id:" + str(alert['id']) + "\n> 持续时间:" + str(alert['count']) + "\n> 告警标题: " + alert['summary'] + "\n> 告警主机: " + alert["hostname"] + "\n> 当前监控值: <font color='info'>{}</font>".format(str(alert['value'])) + "\n> 告警标签: " + alert_label
alert_data.append(alert_t_str)
elif alert_type == 'recover':
alert_str = "# <font color='warning'>告警恢复通知</font>\n\n**告警类型**: recover \n**发生时间**: {}\n".format(d_dict['time'])
for alert in d_dict['alerts']:
alert_label = deal_labels(alert['labels'])
alert_t_str = "\n\n————————————————\n\n" + "> 恢复告警id:" + str(alert['id']) + "\n> 告警标题: " + alert['summary'] + "\n> 告警主机: " + alert["hostname"] + "\n> 当前监控值: <font color='info'>{}</font>".format(str(alert['value'])) + "\n> 告警标签: " + alert_label
alert_data.append(alert_t_str)
else:
pass
for i in alert_data:
alert_str += i
return alert_str
def wx_warning(url,text):
webhook = url
header = {
'Content-Type': "application/json"
}
body = {
"msgtype": "markdown",
"markdown": {
"content": text
}
}
res = requests.post(webhook, headers=header, data=json.dumps(body))
return res.text
@app.route('/webhook', methods=['POST'])
def webhook():
if not request.json:
return 'Bad Request!'
result = deal_alertdata(request.json)
return wx_warning(url, result)
if __name__ == '__main__':
url = "https://your/wechat/reboot/url"
app.run(host='0.0.0.0', port=18000)
企业微信机器人告警webhook实现demo
最新推荐文章于 2024-08-15 15:26:56 发布