db_user
(Db User)
1
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
【概述】场景+问题概述
【背景】做过哪些操作
【现象】业务和数据库现象
【业务影响】
【TiDB 版本】
【附件】
-
TiUP Cluster Display 信息
-
TiUP Cluster Edit Config 信息
-
TiDB- Overview 监控
使用环境为v4.0.14,想通过webook的方式把报警发到飞书,目前是可以通过webook正常发到企业微信,但是不能正常发到飞书,curl post可以正常发消息到飞书群,开到网上也有用开源组件 PrometheusAlert的,请问还有其他方法么,通过altermanager
微信提供了直接支持 alertmanager 的接口,所以直接配置 wechat_config 就能收报警。
飞书不一样,它没有可以直接接收 alertmanager 消息的接口,所以要通过 webhook_config 来转一下,你要自己写这个 webhook, 它负责接收 alertmanager 的 json payload,转化成飞书机器人认识的格式,发给飞书。
alertmanager 发出来的消息长这样,写 webhook 的时候需要知道结构,给你参考一下,下面这是一条报警的 json 消息,也有多条报警的(alerts 字段是个 array )
{
"receiver": "sa",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "Watchdog",
"project": "pname",
"severity": "warning"
},
"annotations": {
"description": "xxx",
"summary": "yyy"
},
"startsAt": "2021-04-01T08:42:34.318Z",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://10.24.15.99:9090/graph",
"fingerprint": "c6f63fdf98xxxx9d064b"
}
],
"groupLabels": {
"alertname": "Watchdog"
},
"commonLabels": {
"alertname": "Watchdog",
"project": "pname",
"severity": "warning"
},
"commonAnnotations": {
"description": "xxx"
},
"externalURL": "http://10.24.15.99:9093",
"version": "4",
"groupKey": "{}:{alertname=\"Watchdog\"}",
"truncatedAlerts": 0
}
3 个赞
楼主,现在具体实现方法 找到了吗? 我现在也遇到这个问题了,求教~~~
db_user
(Db User)
4
实现了,可以自己写一个小接口,比如,192.168.1.1:5000
,然后altermanager的报警接到这个接口上,接口把收到的信息做格式化处理,格式按照飞书官方提供的格式,文本,富文本或者其他格式都行,然后接口里面把数据发送到飞书上就行,或者也可以用现有的开源,我觉得太重了就没有用
db_user
(Db User)
6
import requests
import arrow
from flask import Flask
from flask import request
import json
app1 = Flask(name)
@app1.route(’/send’, methods=[‘POST’])
def send():
url = ‘https://open.larksuite.com/open-apis/bot/v2/hook/*****’ # lark的weboook
dict1 = dict()
data = json.loads(request.data)
#print(data)
alerts = data[‘alerts’]
for output in alerts:
try:
message = output[‘annotations’][‘message’]
except KeyError:
try:
message = output[‘annotations’][‘description’]
except KeyError:
message = ‘null’
info = “告警类型: %s \
\
” % output[‘labels’][‘alertname’] + “告警详情 : %s \
\
” % message + “告警状态: %s \
\
” % output[‘status’] + “触发时间: %s \
\
” % arrow.get(output[‘startsAt’]).to(‘Asia/Shanghai’).format(‘YYYY-MM-DD HH:mm:ss ZZ’) + “触发结束时间: %s \
” % arrow.get(output[‘endsAt’]).to(‘Asia/Shanghai’).format(‘YYYY-MM-DD HH:mm:ss ZZ’)
# 转换为飞书接受的格式(文本)
send_data = {
“msg_type”: “text”,
“content”: {
“text”: info
}
}
send_data = json.dumps(send_data)
print(send_data)
req = requests.post(url, data=send_data)
result = req.json()
#调用api提交信息给短信平台api
# r = requests.post(url_test_api,data=j)
return ‘ok’
if name == ‘main’:
app1.run(debug=True,host=‘0.0.0.0’,port=5100)
举个例子,可以根据这个改一改
3 个赞
会飞的土拨鼠
13
真好,请问楼主,alert manager需要修改哪些配置,才可以使用TiDB的告警rules发送消息到企业微信
会飞的土拨鼠
14
我修改过alertmanager的告警webhook的url,Prometheus监控达到告警阈值,但是并没有发送消息出来
db_user
(Db User)
16
修改之后有reload么,如果影响不大的话就直接restart下alert的节点,tiup cluster restart cluster-name -N ip:port
db_user
(Db User)
18
没有其他特别需要指定的参数receivers的url指定对了就行,改的是中控的配置文件啊
2 个赞