You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Prometheus Alertmanager的Webhook发送POST请求?配置故障求助

解决Alertmanager Webhook POST请求到Flask服务器的问题

我看你在配置Alertmanager向Flask服务器发送POST请求时遇到了问题,咱们先从配置的核心错误入手,一步步解决:

1. 修正Alertmanager配置的关键问题

你当前的配置有两处明显错误:

  • global段里的http_config用法不对:这个字段是用来配置HTTP客户端的通用参数(比如超时、认证信息),不是直接写目标API地址。
  • receivers里的webhook配置不完整,缺少指定API端点的webhook_configs块。

正确的Alertmanager配置示例

global:
  # 可选:配置HTTP客户端通用参数,比如请求超时
  http_config:
    timeout: 10s

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 10s
  repeat_interval: 10s
  receiver: test_api

routes:
- receiver: test_api
  group_wait: 10s
  match:
    infra_grp: pse

receivers:
- name: "test_api"
  webhook_configs:
  - url: "http://localhost:9000/your-alert-endpoint"  # 替换为你Flask服务器的实际POST端点
    send_resolved: true  # 可选:告警恢复时也发送通知
    # 若需要认证,可添加以下配置(可选)
    # basic_auth:
    #   username: "your-username"
    #   password: "your-password"

2. 确保Flask服务器能正确接收Webhook请求

Alertmanager发送的POST请求是JSON格式,包含alerts数组等固定字段,你的Flask接口需要正确解析这个格式。示例代码如下:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/your-alert-endpoint', methods=['POST'])
def handle_prometheus_alerts():
    # 解析Alertmanager发送的JSON数据
    alert_payload = request.get_json()
    print("收到告警数据:", alert_payload)
    
    # 这里可以添加你的业务逻辑,比如存储告警、转发通知等
    
    # 返回200状态码告诉Alertmanager请求已成功接收
    return jsonify({"status": "received"}), 200

if __name__ == '__main__':
    # 用0.0.0.0监听所有网卡,确保Alertmanager能访问到
    app.run(host='0.0.0.0', port=9000, debug=True)

3. 排查问题的实用步骤

如果配置后还是失败,可以按以下步骤排查:

  • 测试网络连通性:在Alertmanager所在机器执行curl -X POST http://localhost:9000/your-alert-endpoint -d '{"test": "demo"}',确认Flask服务器能正常响应。
  • 查看Alertmanager日志:启动Alertmanager时加上--log.level=debug,查看日志里是否有Webhook请求的错误信息(比如连接超时、4xx/5xx响应码)。
  • 检查Flask日志:查看Flask控制台输出,确认是否收到请求,或者是否有JSON解析错误。
  • 验证告警标签匹配:确保触发的告警带有infra_grp: pse标签,否则不会路由到test_api接收器。

4. 注意事项

  • Alertmanager发送的请求Content-Type是application/json,所以Flask接口必须用request.get_json()解析,不能用request.form。
  • 如果Alertmanager和Flask不在同一台机器,不要用localhost,改用Flask服务器的实际IP或主机名,同时确保防火墙开放9000端口。
  • send_resolved参数设为true时,告警恢复状态也会触发POST请求,可根据业务需求选择是否开启。

内容的提问来源于stack exchange,提问作者Pranjal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:19:00