alertmanager-飞书告警发布


requirements

certifi==2018.10.15
chardet==3.0.4
Click==7.0
Flask==1.0.2
idna==2.7
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
requests==2.20.1
urllib3==1.24.1
Werkzeug==0.14.1
arrow==0.13.1

dockerfile

#FROM python:3.6.4
FROM registry.cn-beijing.aliyuncs.com/helen-devops/alertmanager-webhook-****:v2

# set working directory
WORKDIR /src

# add app
ADD . /src

# install requirements
#RUN pip install -r requirements.txt

EXPOSE 5000

# run server
CMD python $start

变量

ROBOT_TOKEN=""
start=dingding.py
ROBOT_MESSAGE="***项目"

feishu.py

import os
import json
import requests
import arrow

from flask import Flask
from flask import request

app = Flask(__name__)


@app.route('/', methods=['POST', 'GET'])
def send():
    if request.method == 'POST':
        post_data = request.get_data()
        send_alert(bytes2json(post_data))
        return 'success'
    else:
        return 'weclome to use prometheus alertmanager dingtalk webhook server!'


def bytes2json(data_bytes):
    data = data_bytes.decode('utf8').replace("'", '"')
    return json.loads(data)


def send_alert(data):
    token = os.getenv('ROBOT_TOKEN')
    if not token:
        print('you must set ROBOT_TOKEN env')
        return
    url = 'https://open.feishu.cn/open-apis/bot/v2/hook/%s' % token
    #url = 'https://open.feishu.cn/open-apis/bot/v2/hook/********'
    for output in data['alerts'][:]:
        try:
            pod_name = output['labels']['pod']
        except KeyError:
            try:
                pod_name = output['labels']['pod_name']
            except KeyError:
                pod_name = 'null'

        try:
            namespace = output['labels']['namespace']
        except KeyError:
            namespace = 'null'

        try:
            message = output['annotations']['message']
        except KeyError:
            try:
                message = output['annotations']['description']
            except KeyError:
                message = 'null'
        MESSAGE = os.getenv('ROBOT_MESSAGE')
        MESSAGE_URL = os.getenv('ROBOT_MESSAGE_URL')
        send_data = {
			    "msg_type": "post",
			    "content": {
			        "post": {
			            "zh_cn": {
			                "title": "%s" % MESSAGE ,
			                "content": [
			                    [
			                        {
			                            "tag": "text",
			                            "text": "## 告警程序: %s \n" % MESSAGE +
						                        "**告警级别**: %s \n\n" % output['labels']['severity'] +
						                        "**告警类型**: %s \n\n" % output['labels']['alertname'] +
						                        "**故障pod**: %s \n\n" % pod_name +
						                        "**故障namespace**: %s \n\n" % namespace +
						                        "**告警详情**: %s \n\n" % message +
						                        "**告警状态**: %s \n\n" % output['status'] +
						                        "**触发时间**: %s \n\n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ') +
						                        "**触发结束时间**: %s \n" % arrow.get(output['endsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ')
			                        },
			                        {
			                            "tag": "a",
			                            "text": "具体请查看",
			                            "href": "%s" % MESSAGE_URL
			                        }
			                    ]
			                ]
			            }
			        }
			    }
			}
        req = requests.post(url, json=send_data)
        result = req.json()
        if result['errcode'] != 0:
            print('notify dingtalk error: %s' % result['errcode'])


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM