请问如何把报警接到飞书

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
【概述】场景+问题概述
【背景】做过哪些操作
【现象】业务和数据库现象
【业务影响】
【TiDB 版本】
【附件】

  1. TiUP Cluster Display 信息

  2. TiUP Cluster Edit Config 信息

  3. TiDB- Overview 监控

  • 对应模块日志(包含问题前后1小时日志)

使用环境为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 个赞

楼主,现在具体实现方法 找到了吗? 我现在也遇到这个问题了,求教~~~

实现了,可以自己写一个小接口,比如,192.168.1.1:5000
,然后altermanager的报警接到这个接口上,接口把收到的信息做格式化处理,格式按照飞书官方提供的格式,文本,富文本或者其他格式都行,然后接口里面把数据发送到飞书上就行,或者也可以用现有的开源,我觉得太重了就没有用

好的,我可以用现成的嘛:kiss::kiss::kiss:

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 个赞

非常赞,给你加个鸡腿~

2 个赞

必须加个茶叶蛋才行:smile:

哈哈,谢谢~~
不过我看到晚了,我用了一个报警全家桶,你也可以看下哈,很不错~
https://github.com/feiyu563/PrometheusAlert

1 个赞

表妹,你是社区的鼓励师吗?:heart_eyes::heart_eyes:

hhhhh·~必须是~

赞咧~

真好,请问楼主,alert manager需要修改哪些配置,才可以使用TiDB的告警rules发送消息到企业微信

我修改过alertmanager的告警webhook的url,Prometheus监控达到告警阈值,但是并没有发送消息出来

真不错,欢迎呀

修改之后有reload么,如果影响不大的话就直接restart下alert的节点,tiup cluster restart cluster-name -N ip:port


请问还需要指定哪些参数嘛。

没有其他特别需要指定的参数receivers的url指定对了就行,改的是中控的配置文件啊

2 个赞

好的,我明白了,感谢博主

客气了:+1::+1::+1: