详细参照:【云原生】Grafana Alerting 告警模块介绍与实战操作
文章地址:【云原生】Grafana Alerting 告警模块介绍与实战操作_grafana告警模板_大数据老司机的博客-CSDN博客
1、编写webhook api服务
说明:此处是与原文章不同之处,特此写下备忘,alert告警使用python语言Flask模块写的
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 参考文档:https://blog.csdn.net/qq_35745940/article/details/128378801
import json
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import requests
from flask import Flask, request
# pip3 install flask
app = Flask(__name__)
class GrafanaWebHook:
def __init__(self):
#webhook地址
self.url = "https://***********/api/hooks/mta9atr3n7d9dka********"
def alarm(self,text):
try:
headers = {
'Content-Type': 'application/json'
}
data = json.dumps({'text': text, 'username': ''})
result = requests.post(self.url, headers=headers, data=data)
print(result.content.decode('utf-8'))
return True
except Exception as e:
print("Error: 无法发送告警信息", e)
return False
def getAlertData(self):
alertData = request.get_data()
# 将str类型的数据转换为dict类型
alertData = json.loads(alertData)
print(alertData)
return alertData
@app.route('/webhook', methods=["POST"])
def webhook_server():
gw = GrafanaWebHook()
alertData = gw.getAlertData()
title = alertData['title']
status = alertData['state']
messages = alertData['message']
str_list = ["Title: "+title,"Status: "+status,"RuleName: "+alertData['ruleName'],"Messages: "+messages]
alert_text = "\n".join(str_list)
ret=gw.alarm(alert_text)
if ret:
return {"status": "ok"}
else:
return {"status": "error"}
if __name__ == "__main__":
app.run(debug=False, host='0.0.0.0', port=18088)
记住脚本需要后台启动:
nohup python3 GrafanaWebHookStarRocks.py >> ..log/GrafanaWebHookStarRocks.log &
grafana告警页面配置