用途
本资料面向需要构建全面的监控与可观测性系统的场景,围绕 SRE 实践展开,介绍如何用指标、告警、仪表板、分布式追踪与结构化日志来观测服务运行状况。
主要能力
四大黄金信号
- 延迟(Latency):用
http_request_duration_seconds记录请求处理时间,并通过直方图分位数查询获取 P95 等分位值。 - 流量(Traffic):用
rate(http_requests_total[5m])获取每秒请求数,可按 endpoint 聚合。 - 错误(Errors):用
rate(http_requests_total{status=~"5.."}[5m])除以总请求速率计算错误率,并可计算 SLI 合规度。 - 饱和度(Saturation):用 CPU 与内存相关指标计算资源利用率。
服务级指标(SLI)
资料给出三类 SLI 的计算方式:
- 可用性 SLI:成功请求数除以总请求数(示例使用 30 天窗口)。
- 延迟 SLI:低于阈值的请求数除以总请求数。
- 吞吐量 SLI:将请求速率与容量之比限制在 1.0 以内。
告警
告警严重级别分为 P0(critical,服务宕机或严重退化)、P1(high,显著影响、错误预算受威胁)、P2(medium,退化但尚未影响用户)、P3(low,仅需知悉,无需立即处理)。资料提供了高错误率、P95 延迟过高、错误预算消耗等示例告警规则,包含表达式、for 时长、标签与注释。
仪表板
概览仪表板列出服务健康状态(红/黄/绿)、请求速率、错误率、延迟分位数(p50、p95、p99)与饱和度指标;详细仪表板列出按 endpoint 的指标、依赖健康、数据库性能、缓存命中率与队列深度。
分布式追踪
示例使用 OpenTelemetry 的 @opentelemetry/api,通过 tracer.startSpan 创建 span,设置属性、状态,并在 finally 中结束 span。
结构化日志
示例以键值对方式记录 request_processed,包含 request_id、user_id、endpoint、method、status_code、duration_ms 与 error 等字段。
最佳实践
- USE 方法(面向资源):Utilization(资源忙碌时间占比)、Saturation(排队但未被处理的工作)、Errors(错误数)。
- RED 方法(面向请求):Rate(每秒请求数)、Errors(每秒失败请求数)、Duration(请求延迟分布)。
- 对症状而非原因告警:应基于用户影响(如 P95 延迟超过 1s)告警,而非潜在原因(如 CPU 使用率超过 80%)。
- Runbook 链接:在告警注释中提供 runbook 与 dashboard 链接。
使用方式
资料以指标查询表达式(PromQL)、告警规则 YAML、OpenTelemetry 代码片段和日志调用示例等形式给出参考写法,可直接据此在监控系统中配置指标、告警与追踪。
适用场景
适用于需要建立或完善服务监控与可观测性体系的 SRE、运维与开发场景,包括指标采集、SLI 定义、告警分级、仪表板设计与分布式追踪接入。
限制
资料未说明所依赖的监控系统、具体安装命令、收费模式、平台支持范围或效果保证,这些内容暂未提供。