监控告警规则:高 5xx 错误率 / 高 P95 延迟 / RAG 高重试率 / 内存超限

一句话:监控告警规则用于在指标异常时触发告警,帮助及时发现和处理问题。常见的告警规则包括高5xx错误率、高P95延迟、RAG高重试率、内存超限等。

1. 告警规则基础

1.1 什么是告警规则?


graph LR

    A[指标异常] --> B[触发告警]

    B --> C[通知团队]

    C --> D[处理问题]

    style A fill:#ffebee

    style D fill:#e8f5e8

告警规则:定义在什么条件下触发告警,以及如何通知相关人员。

1.2 Prometheus告警规则

 
# alert_rules.yml
 
groups:
 
  - name: example
 
    rules:
 
      - alert: HighErrorRate
 
        expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "高错误率告警"
 
          description: "错误率超过5%,当前值: {{ $value }}"
 

2. 常见告警规则

2.1 高5xx错误率

 
groups:
 
  - name: http
 
    rules:
 
      - alert: High5xxErrorRate
 
        expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "高5xx错误率"
 
          description: "5xx错误率超过5%,当前值: {{ $value }}"
 

2.2 高P95延迟

 
groups:
 
  - name: http
 
    rules:
 
      - alert: HighP95Latency
 
        expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 2
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "高P95延迟"
 
          description: "P95延迟超过2秒,当前值: {{ $value }}"
 

2.3 RAG高重试率

 
groups:
 
  - name: rag
 
    rules:
 
      - alert: HighRAGRetryRate
 
        expr: rate(rag_retries_total[5m]) > 0.1
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "RAG高重试率"
 
          description: "RAG重试率超过10%,当前值: {{ $value }}"
 

2.4 内存超限

 
groups:
 
  - name: system
 
    rules:
 
      - alert: HighMemoryUsage
 
        expr: process_resident_memory_bytes / 1024 / 1024 > 1024
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "内存使用过高"
 
          description: "内存使用超过1GB,当前值: {{ $value }}MB"
 

3. 高级告警规则

3.1 多条件告警

 
groups:
 
  - name: advanced
 
    rules:
 
      - alert: HighErrorRateAndLatency
 
        expr: |
 
          sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
 
          and
 
          histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 2
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "高错误率和高延迟"
 
          description: "错误率和延迟同时过高"
 

3.2 预测性告警

 
groups:
 
  - name: predictive
 
    rules:
 
      - alert: PredictedMemoryExhaustion
 
        expr: predict_linear(process_resident_memory_bytes[1h], 3600) > 2 * 1024 * 1024 * 1024
 
        for: 10m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "预测内存将耗尽"
 
          description: "预测1小时后内存将超过2GB"
 

3.3 组合告警

 
groups:
 
  - name: composite
 
    rules:
 
      - alert: ServiceDegraded
 
        expr: |
 
          (
 
            sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
 
          )
 
          or
 
          (
 
            histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 2
 
          )
 
          or
 
          (
 
            rate(llm_errors_total[5m]) > 0.1
 
          )
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "服务降级"
 
          description: "多个指标异常,服务可能降级"
 

4. 告警通知

4.1 通知渠道

 
# prometheus.yml
 
alerting:
 
  alertmanagers:
 
    - static_configs:
 
        - targets:
 
          - alertmanager:9093
 
# alertmanager.yml
 
route:
 
  group_by: ['alertname']
 
  group_wait: 10s
 
  group_interval: 10s
 
  repeat_interval: 1h
 
  receiver: 'web.hook'
 
receivers:
 
  - name: 'web.hook'
 
    webhook_configs:
 
      - url: 'http://127.0.0.1:5001/'
 

4.2 通知模板

 
# alertmanager.yml
 
templates:
 
  - '/etc/alertmanager/*.tmpl'
 
# alertmanager.tmpl
 
{{ define "alertmanager.webhook.default.message" }}
 
{{ range .Alerts }}
 
告警名称: {{ .Labels.alertname }}
 
告警级别: {{ .Labels.severity }}
 
告警描述: {{ .Annotations.description }}
 
告警时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
 
{{ end }}
 
{{ end }}
 

5. 实际案例

5.1 AI应用告警规则

 
groups:
 
  - name: ai-app
 
    rules:
 
      # LLM调用错误率
 
      - alert: HighLLMErrorRate
 
        expr: sum(rate(llm_requests_total{status="error"}[5m])) / sum(rate(llm_requests_total[5m])) > 0.1
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "LLM调用错误率高"
 
          description: "LLM调用错误率超过10%"
 
      # RAG查询延迟
 
      - alert: HighRAGLatency
 
        expr: histogram_quantile(0.95, rate(rag_query_duration_seconds_bucket[5m])) > 5
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "RAG查询延迟高"
 
          description: "RAG查询P95延迟超过5秒"
 
      # Token使用量
 
      - alert: HighTokenUsage
 
        expr: rate(llm_tokens_total[5m]) > 1000
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "Token使用量高"
 
          description: "Token使用速率超过1000/分钟"
 

5.2 电商系统告警规则

 
groups:
 
  - name: ecommerce
 
    rules:
 
      # 订单错误率
 
      - alert: HighOrderErrorRate
 
        expr: sum(rate(order_errors_total[5m])) / sum(rate(orders_total[5m])) > 0.02
 
        for: 5m
 
        labels:
 
          severity: critical
 
        annotations:
 
          summary: "订单错误率高"
 
          description: "订单错误率超过2%"
 
      # 支付延迟
 
      - alert: HighPaymentLatency
 
        expr: histogram_quantile(0.95, rate(payment_duration_seconds_bucket[5m])) > 3
 
        for: 5m
 
        labels:
 
          severity: warning
 
        annotations:
 
          summary: "支付延迟高"
 
          description: "支付P95延迟超过3秒"
 

6. 常见坑点

1. 告警阈值不合理

 
# 问题:阈值太低,频繁告警
 
- alert: HighErrorRate
 
  expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.001  # 太敏感
 
# 解决:根据实际情况调整阈值
 
- alert: HighErrorRate
 
  expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05  # 合理阈值
 

2. 告警等待时间太短

 
# 问题:等待时间太短,导致告警风暴
 
- alert: HighErrorRate
 
  for: 1m  # 太短
 
# 解决:增加等待时间
 
- alert: HighErrorRate
 
  for: 5m  # 合理等待时间
 

3. 缺少告警升级

 
# 解决:设置告警升级机制
 
route:
 
  group_by: ['alertname']
 
  group_wait: 10s
 
  group_interval: 10s
 
  repeat_interval: 1h
 
  receiver: 'team-leads'
 
  routes:
 
    - match:
 
        severity: critical
 
      receiver: 'on-call'
 

核心要点

 
# 基础告警规则
 
- alert: AlertName
 
  expr: 指标表达式
 
  for: 等待时间
 
  labels:
 
    severity: critical/warning
 
  annotations:
 
    summary: "告警标题"
 
    description: "告警描述"
 
# 常见告警
 
高5xx错误率: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05
 
高P95延迟: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 2
 
内存超限: process_resident_memory_bytes / 1024 / 1024 > 1024
 

速记卡(面试闪卡)

Q1:一句话讲清「监控告警规则:高 5xx 错误率 / 高 P95 延迟 / RAG 高重试率 / 内存超限」到底是什么?

A:告警规则就是给系统装”烟雾报警器”:指标越界自动喊人,别等用户投诉才知情。

Q2:一、告警规则基础 —— 怎么理解? —— 怎么理解?

A:像给家里装烟雾报警器:你先定好”烟浓度超阈值就尖叫”,不用蹲门口死盯。Prometheus 的 alert rule 就是这条规则——expr 描述”什么算异常”,for 表示”持续多久才算数”,防一抖就误报。核心英文:alert rule(告警规则)。

Q3:二、四类典型告警 —— 怎么理解? —— 怎么理解?

A:像体检四项指标:5xx 错误率看”服务是不是在乱报错”,P95 延迟看”响应慢得像在睡觉”,RAG 重试率看”检索是不是反复扑空”,内存超限看”会不会撑爆进程”。每条都是一条 expr + 阈值。英文:error rate / latency P95 / retry rate / OOM。

Q4:三、高级玩法:组合与预测 —— 怎么理解? —— 怎么理解?

A:像保安不只盯一个点:多条件告警要”错误率 AND 延迟同时高”才叫;预测性告警用 predict_linear 推”按这势头一小时后会爆内存”,提前喊人;组合告警是”或”关系,任一异常就降级。英文:composite alert / predictive alerting。

Q5:四、通知与常见坑 —— 怎么理解? —— 怎么理解?

A:像报警器响了得有人接:Alertmanager 按 route 把告警发给 webhook 或邮件,group 防刷屏,severity 决定叫不叫 on-call。坑点:阈值太低变”狼来了”、for 太短炸出告警风暴、缺升级机制全压一人。英文:Alertmanager / routing / alert fatigue。

Q6:核心速记主线有哪些?

  • 本质:告警规则=指标越界自动触发+通知,帮及时止损而非事后救火

  • 四类常配:高 5xx 错误率、高 P95 延迟、RAG 高重试率、内存超限

  • 关键参数:expr 定异常、for 防抖动、severity 分级、labels 打标

  • 高级形态:多条件/预测性/组合告警,从”事后”转向”提前”

  • 避坑:阈值合理、等待时长够、配升级路由,别养出告警疲劳

口诀

A:告警规则似烟感,越界自动把人喊;

四类常查错延满,P95重试内存缓;

组合预测提前防,阈值等待莫走偏;

通知升级层层传,线上安稳少慌乱。

相关链接