在grafana中的connect point中使用webhook的方式推送到飞书,始终无法触发告警,原因是grafana推送的格式飞书不识别,现有两种方式
1.使用中转服务
使用flask搭建一个服务,grafana告警先通过webhook发送到web服务中,格式化之后再发送到飞书
from flask import Flask, request
import requests
import json
app = Flask(__name__)
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" # 你的飞书机器人地址
@app.route('/grafana-to-feishu', methods=['POST'])
def handle_grafana():
data = request.json
message = data.get("message", "No message")
# 构造飞书 post 消息
feishu_payload = {
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": "Grafana 告警通知",
"content": [
[
{"tag": "text", "text": message}
]
]
}
}
}
}
# 发送到飞书
r = requests.post(FEISHU_WEBHOOK, data=json.dumps(feishu_payload), headers={'Content-Type': 'application/json'})
return "ok", r.status_code
2. 使用飞书机器人助手
https://botbuilder.feishu.cn/home
在我的指令中新建机器人指令,选择触发器,有个grafana告警
选择操作,根据文档指引操作添加机器人
这里消息标题就是grafana中json的各个部分,好用的只有消息,即对应grafana的message部分
然而坑的地方是grafana原生的告警只支持"msg_type": "test",也就是说grafana告警的message中的换行符等不能转译,且字数限制为2048个字符,多了的话就全部不显示了。
所以不太好用,不推荐。