可观测性

Prometheus 与 Grafana 监控实践

构建有行动价值的指标、告警与仪表盘,而不是图表堆砌。

从用户体验定义指标#

监控不是把所有指标做成图,而是回答“用户是否受影响、影响在哪里、现在要做什么”。服务层用 RED:请求速率、错误率、耗时;基础设施层用 USE:利用率、饱和度、错误。

PromQL 与告警#

promql
# 5 分钟请求速率
sum by (service) (rate(http_requests_total[5m]))

# 5xx 错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))

# P95 延迟
histogram_quantile(0.95,
  sum by (le, service) (rate(http_request_duration_seconds_bucket[5m]))
)
yaml
groups:
  - name: web-slo
    rules:
      - alert: WebHighErrorRate
        expr: job:http_5xx_ratio:rate5m > 0.05
        for: 10m
        labels:
          severity: page
        annotations:
          summary: "{{ $labels.service }} 5xx 错误率持续高于 5%"
          runbook: "https://runbook.example.com/web-high-error-rate"

Grafana 信息架构#

第一屏下钻页目的
SLO、流量、错误、P95按服务/路由拆分判断用户影响
CPU、内存、磁盘、连接池按实例拆分定位资源瓶颈
最近发布与告警标记日志与 Trace 链接关联变更
  • 面板单位和时区明确
  • 阈值颜色有业务含义
  • 告警包含负责人和 Runbook
  • Dashboard JSON 进入版本控制

Grafana 的 Dashboard best practices 建议用变量减少重复仪表盘,并让告警指向可下钻页面。

GK / OPS NOTES
把每一次变更写成可以复现的步骤

示例命令请先在测试环境验证,再根据自己的系统版本、网络和备份策略调整。

讨论区 21

分享你的经验、补充或不同观点。支持 Markdown 基础语法。

讨论区暂时为空,欢迎分享你的经验。