Skip to content
返回运维与 SRE

日志采样

采样高量非错误日志控成本同时保 100% 错误和警告。

为什么

处理 10000 请求/s 每请求 INFO 日志的服务产 600000 日志/分钟 — 即 30B 日志/天,存储 $30k/月且使查询慢。但你不需要每 INFO 日志;你需要所有 ERROR(100%,不采样 — 错误罕见且重要)、所有 WARN(100%,它们是降级信号)和 INFO 样本(1-10%,足以看流量模式并经 trace_id 调试特定请求)。这是尾采样:按级别采样非随机。成本降 90%(保 10% INFO)同时保 100% 事件要紧的日志。关键规则:从不采样错误。若你 1% 采 ERROR,漏 99% 错误且值班看净仪表盘而服务在失败。

何时使用

当日志量超预算或查询延迟。从 100% 保留始;仅当成本或速度迫时采样。

如何做

1. 从不采样 ERROR 或 WARN 日志
   - 这些罕见且重要;采样它们失日志目的
   - 配置:level=ERROR → 保 100%;level=WARN → 保 100%

2. 按率或 trace_id 采样 INFO 日志
   - 率:保 10% INFO 日志(随机采样)
   - 基于 trace:保 100% 有 ERROR 的 trace,余采样(尾)
   - 尾更好 — 它为失败请求保全 trace

3. 用一致哈希做概率采样
   - 哈希 trace_id;若 hash % 100 < sample_rate 则保
   - 这确保保的 trace_id 的所有日志保(无部分 trace)

4. 按服务调采样率
   - 高量服务(checkout):1% INFO
   - 低量服务(admin):100% INFO
   - admin 服务日志便宜保且调试有用

5. 监控采样率并调
   - 按服务跟踪"保日志 / 发日志"
   - 若服务错误率升,临时把其 INFO 采样率提到 100% 供诊断

示例

# 采样配置(Loki/Fluentd):
sampling:
  - match: { level: "ERROR" }
    keep: 1.0          # 100% — 从不采样错误
  - match: { level: "WARN" }
    keep: 1.0          # 100% — 从不采样警告
  - match: { level: "INFO", service: "checkout" }
    keep: 0.01         # 1% — 高量服务
    strategy: "trace_hash"  # 按 trace_id 一致
  - match: { level: "INFO", service: "admin" }
    keep: 1.0          # 100% — 低量,便宜保

# 尾采样(OpenTelemetry Collector):
processors:
  tail_sampling:
    decision_wait: 10s
    policies:
      - name: errors
        type: status_code
        status_code: { status_codes: [ERROR] }  # 保 100% 错误 trace
      - name: sample-rest
        type: probabilistic
        probabilistic: { sampling_percentage: 1 }  # 余 1%

# 结果:
# - 所有 ERROR/WARN 日志保(100%)→ 事件全可见
# - 1% checkout INFO 日志保 → 成本降 90%,流量模式仍可见
# - 100% admin INFO 日志保 → 便宜,调试有用
# - 任何带 ERROR 的 trace → 100% 该 trace 日志保(尾)

常见问题

  • ⚠采样错误 — 1% 错误采样意 99% 错误不可见;值班看净仪表盘而服务失败。
  • ⚠无 trace 感知的随机采样 — 保半 trace 日志,故值班看开始非失败且无法重构请求。
  • ⚠全 100% 保留 — 成本 $30k/月且查询慢;采样高量 INFO 保 100% 要紧的。
  • ⚠所有服务同采样率 — 高量 checkout 服务淹聚合器而低量 admin 服务过采样。

最佳实践

  • ✓从不采样 ERROR 或 WARN 日志(保 100%);仅采样 INFO,并用尾采保 100% 带错误的 trace。
  • ✓用按 trace_id 一致哈希采样使保 trace 的所有日志保(无困惑值班的半 trace)。
  • ✓按服务调采样率:高量(checkout)1%、低量(admin)100%;监控"保日志 / 发日志"并调。
  • ✓事件或错误率升时临时把采样提到 100%;为成本采样非为信号失。