跳到主要内容

可观测性

如何用三类信号定位一次调用?​

  • 可观测性: 通过日志、指标、链路回答“发生了什么、有多严重、从哪来到哪去”;
  • Logging: 记录离散事件与错误上下文;
  • Metrics: 观察吞吐、延迟、错误率、重试、限流、熔断和连接池;
  • Tracing: 串联一次跨服务调用的完整路径;
  • RPCInfo: 提供 caller、callee、method、endpoint 与 stats; 仅在有效生命周期内读取;

如何接入 Kitex 的观测接口?​

  • klog: 默认 logger 与全局日志函数;
  • klog.SetLogger: 注入组织统一 logger;
  • Tracer: 在 Start/Finish 接收 RPCInfo,接入 tracing 或 metrics;
  • WithTracer: Client/Server 注入 tracer;
  • WithStatsLevel: 控制埋点粒度;
  • 实践: 无 tracer 默认 Disabled,有 tracer 默认 Detailed;

如何建立 RPC 指标基线?​

信号维度用途
throughputcaller/callee/method/status流量与错误比例
latencyclient/server/method/status长尾与阶段定位
retry/backupmethod/reason发现流量放大
breaker/limitkey/reason主动保护是否触发
connectiontarget/state池容量与建连异常

如何接入观测扩展?​

  • Prometheus: 使用 kitex-contrib exporter 暴露 Client/Server 与 runtime metrics;
  • OpenTelemetry: 同时接入 trace 与 metrics,并传播上下文;
  • StreamX: 使用 StreamEventHandler 观测 stream start、Send、Recv、header、finish;

如何控制观测数据的成本与泄露?​

  • cardinality: 不把 user id、完整 URL 或错误文本作为指标的唯一标识;
  • sampling: 正常请求 tracing 的采样率与错误强制采样分开设计;
  • PII: 请求/响应日志默认不记录敏感字段;
  • exporter lifecycle: 重复初始化 provider 前先 Shutdown, 避免连接和 goroutine 泄漏;
  • 结果语义: fallback 后同时保留原 RPC 结果与降级结果,避免成功率失真;