如何配置Alertmanager告警:当按端点、方法统计的错误率超阈值时触发?
当然可以!这是监控API服务稳定性的典型需求,我们可以通过Prometheus告警规则+Alertmanager配置轻松实现,而且完全能在告警内容里带上具体的端点(endpoint)和请求方法(method)信息。下面是一步步的实现方案:
1. 在Prometheus中定义告警规则
首先你需要在Prometheus的告警规则文件(通常是alerting_rules.yml,或者在prometheus.yml里通过rule_files引用)中添加针对错误率的告警规则。这里直接复用你提供的查询语句,加上阈值判断和告警上下文信息:
groups: - name: api_error_monitoring rules: - alert: HighApiErrorRate # 你的错误率查询,加上10%(0.1)的阈值判断 expr: | sum by (endpoint, method) ( http_requests_received_total{code=~"5.."} / http_requests_received_total ) > 0.1 # 持续1分钟超过阈值才触发告警,避免瞬时波动导致的误报 for: 1m # 给告警打标签,方便后续Alertmanager路由或分类 labels: severity: warning service: api-gateway # 告警详情,这里直接引用endpoint和method标签,还能格式化错误率为百分比 annotations: summary: "高错误率告警: {{ $labels.method }} {{ $labels.endpoint }}" description: | {{ $labels.method }} 请求 {{ $labels.endpoint }} 的错误率已达 {{ $value | humanizePercentage }}, 超过了10%的阈值,且持续时间已超过1分钟。请及时排查问题!
关键细节说明:
sum by (endpoint, method)已经帮我们按端点和方法分组,所以告警会自动按这两个维度拆分,不会把所有端点的错误率混在一起;{{ $labels.endpoint }}和{{ $labels.method }}是Prometheus模板变量,会自动替换成当前告警对应的标签值;{{ $value | humanizePercentage }}是Prometheus的格式化函数,能把0.12这样的小数转成12%的百分比格式,让告警内容更直观;for: 1m可以根据你的业务场景调整,如果是流量波动较大的服务,改成5m能进一步减少误报。
2. 确保Alertmanager正确展示告警内容
只要你的Prometheus已经正确配置了Alertmanager地址(在prometheus.yml的alerting段配置alertmanagers),告警触发后会自动推送到Alertmanager。此时:
- 在Alertmanager的UI中,你能看到每个告警的
summary和description,里面已经包含了具体的method和endpoint; - 如果配置了邮件、Slack、企业微信等通知渠道,这些变量也会被正确替换,通知内容会直接显示出出问题的具体接口信息。
额外注意事项
- 先确认你的
http_requests_received_total指标确实包含endpoint和method标签,如果没有的话,需要先调整指标埋点,补上这两个标签,否则分组和告警内容都会出问题; - 如果你想排除某些不需要监控的端点(比如健康检查接口
/healthz),可以在查询里加上过滤条件:sum by (endpoint, method) ( http_requests_received_total{code=~"5..", endpoint!="/healthz"} / http_requests_received_total{endpoint!="/healthz"} ) > 0.1 - 阈值
0.1可以根据业务需求修改,比如改成0.05就是5%的错误率触发告警。
内容的提问来源于stack exchange,提问作者Lorentz Vedeler
相关产品推荐
相关产品推荐

