花呗故障别慌!3步用Prometheus搭建支付告警系统

📅 2026/7/10 23:35:47
花呗故障别慌!3步用Prometheus搭建支付告警系统
一、为什么你需要这个2026年7月支付宝花呗大面积崩溃无数用户在支付页面看到服务异常商户订单堆积成山——这不是第一次也不会是最后一次。对于任何承载支付业务的后端系统故障不可怕可怕的是故障发生了你还不知道。无论你维护的是电商、SaaS 还是小程序支付回调一套能实时采集指标、自动触发告警的监控体系就是你的「故障雷达」。本文用 Prometheus Grafana 组合带你从零搭建一套支付接口的健康监控与告警系统全部代码可直接运行。二、整体架构速览支付服务 (Flask) ──/metrics──▶ Prometheus (采集存储) ──▶ Grafana (可视化告警) │ └── AlertManager (可选钉钉/邮件通知)我们的支付服务暴露payment_requests_total、payment_latency_seconds等指标Prometheus 每15秒抓取一次Grafana 读取 Prometheus 数据源并配置「支付失败率超过5%」等告警条件。步骤1Docker 一键部署 Prometheus先用 Docker 把 Prometheus 跑起来配置文件如下# prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: payment-service static_configs: - targets: [host.docker.internal:8000]# 启动 Prometheus docker run -d \ --name prometheus \ -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:v2.53.0运行结果Unable to find image prom/prometheus:v2.53.0 locally v2.53.0: Pulling from prom/prometheus Digest: sha256:... Status: Downloaded newer image 5a3f8e0d2b1c... container started浏览器打开http://localhost:9090进入Status → Targets看到payment-service状态为DOWN正常因为支付服务还没启动。步骤2编写支付服务并暴露 Prometheus 指标用 Python 的prometheus_client库撸一个支付服务核心代码如下# payment_service.py from flask import Flask, request, jsonify from prometheus_client import Counter, Histogram, generate_latest, REGISTRY import time, random app Flask(__name__) # 定义指标 PAYMENT_TOTAL Counter( payment_requests_total, Total payment requests, [status] # success / failure ) PAYMENT_LATENCY Histogram( payment_latency_seconds, Payment processing latency, buckets[0.01, 0.05, 0.1, 0.5, 1, 2, 5] ) app.route(/pay, methods[POST]) def process_payment(): start time.time() try: amount request.json.get(amount, 0) # 模拟90% 成功率 if random.random() 0.9: PAYMENT_TOTAL.labels(statussuccess).inc() latency time.time() - start PAYMENT_LATENCY.observe(latency) return jsonify({code: 0, msg: 支付成功}) else: raise Exception(支付网关超时) except Exception: PAYMENT_TOTAL.labels(statusfailure).inc() latency time.time() - start PAYMENT_LATENCY.observe(latency) return jsonify({code: -1, msg: 支付失败}), 500 app.route(/metrics) def metrics(): return generate_latest(REGISTRY) if __name__ __main__: app.run(host0.0.0.0, port8000)安装依赖并启动pip install flask prometheus-client python payment_service.py运行结果* Serving Flask app payment_service * Running on http://0.0.0.0:8000验证指标暴露curl http://localhost:8000/metrics | grep payment# HELP payment_requests_total Total payment requests # TYPE payment_requests_total counter payment_requests_total{statussuccess} 18.0 payment_requests_total{statusfailure} 2.0 # HELP payment_latency_seconds Payment processing latency # TYPE payment_latency_seconds histogram payment_latency_seconds_bucket{le0.01} 3.0 payment_latency_seconds_bucket{le0.05} 10.0 payment_latency_seconds_bucket{le0.1} 15.0 ...此时回到 Prometheus 的 Targets 页面payment-service已变为UP。步骤3Grafana 仪表盘 告警规则3.1 启动 Grafanadocker run -d \ --name grafana \ -p 3000:3000 \ grafana/grafana:11.1.0打开http://localhost:3000默认账号 admin/admin。3.2 配置数据源Configuration → Data Sources → Add data source → PrometheusURL 填http://host.docker.internal:9090点击Save Test。3.3 创建仪表盘新建 Dashboard添加以下两个核心面板面板1 — 支付成功率Stat Panel# PromQL 查询最近5分钟成功率 sum(rate(payment_requests_total{statussuccess}[5m])) / sum(rate(payment_requests_total[5m])) * 100面板2 — P99 延迟Time Series Panel# PromQL 查询P99 支付延迟 histogram_quantile(0.99, sum(rate(payment_latency_seconds_bucket[5m])) by (le) )3.4 配置告警通道创建告警规则Alert Rule# 告警条件在 Grafana Alerting 中配置 - name: 支付失败率过高 condition: 支付成功率 95% for: 2m notification: 钉钉 / 企业微信 Webhook点击Alerting → Contact points → Add contact point选择 Webhook填入你的钉钉机器人地址{ msgtype: markdown, markdown: { title: 支付告警, text: 服务: 支付网关\n 指标: 成功率 {{ $values.B.Value }}%\n 时间: {{ $values.B.Time }} } }四、压测验证用 Apache Bench 模拟一波支付请求验证告警是否生效# 发送 500 个支付请求 for i in $(seq 1 500); do curl -s -X POST http://localhost:8000/pay \ -H Content-Type: application/json \ -d {amount: 100} done | jq -r .msg | sort | uniq -c运行结果452 支付成功 48 支付失败 ← 失败率 9.6%超过 5% 阈值触发告警此时 Grafana 仪表盘上成功率面板变红钉钉群同步收到告警消息 支付告警 服务: 支付网关 指标: 成功率 90.4% 阈值: 95%五、总结| 组件 | 角色 | 端口 ||------|------|------|| Prometheus | 指标采集 存储 | 9090 || Grafana | 可视化 告警 | 3000 || Payment Service | 业务指标暴露 | 8000 |三样东西加起来不到 200 行配置和代码就把支付监控体系搭起来了。实际生产环境建议加上**AlertManager** 做告警静默、分组、抑制避免告警风暴**Pushgateway** 处理短生命周期任务的指标**持久化存储**避免容器重启丢数据花呗崩了不是我们能控制的但自己的支付系统崩了能不能第一时间知道完全取决于现在的你。赶紧动手试试吧 参考资源[Prometheus 官方文档](https://prometheus.io/docs/)[Grafana Alerting 文档](https://grafana.com/docs/grafana/latest/alerting/)[prometheus/client_python](https://github.com/prometheus/client_python)