SuperAPI AI 工具集

loom-logging-observability

部署与运维

查看项目

更新于 10-15 20:28

技能介绍

本技能围绕日志、指标、追踪三大支柱,讲解如何用共享 ID 关联三者并观察系统行为。

一、三大支柱:指标回答“是否坏了、坏多少”,成本取决于标签基数,适合仪表盘、SLO 与告警;追踪回答“问题在请求路径的哪一段”,成本取决于 span 量与采样,适合延迟拆解与跨服务依赖;日志回答“具体发生了什么”,成本取决于体量与索引策略,适合取证与审计。建议先用指标,再用追踪定位,最后用日志看细节,并以 trace_id/correlation_id 串联。

二、结构化日志:每条事件输出一个 JSON 对象,字段可查询;不要用字符串插值。示例中 Python 用 JsonFormatter 输出 ts、level、logger、msg、correlation_id、trace_id 等字段,并通过 extra={"fields": {...}} 附加结构化字段;TypeScript 推荐 pino 的 child logger 绑定请求上下文。日志级别分 TRACE、DEBUG、INFO、WARN、ERROR、FATAL。纪律:不记录密钥与个人数据并在 formatter 层脱敏;字段名跨服务保持一致;热路径不要同步写日志,使用异步 appender;高流量成功路径按 1/N 采样,WARN/ERROR 全量保留;容器环境输出 stdout JSON 交由平台采集。

三、分布式追踪:使用 OpenTelemetry SDK,示例展示 TracerProvider、BatchSpanProcessor、OTLPSpanExporter 与 FastAPIInstrumentor 的配置,并用 tracer.start_as_current_span 手动创建 span。跨服务依赖 W3C traceparent 头传播,客户端与服务端都要插桩,否则产生孤 Trace;消息队列需手动传递。采样分为头部采样(在 SDK 起始决定,如 TraceIdRatioBased(0.1))与尾部采样(在 Collector 的 tailsamplingprocessor 中按结果决定,需按 trace-id 负载均衡)。

四、指标:使用 prometheus_client,Counter、Gauge、Histogram 分别用于累计值、瞬时值与分布;命名带基本单位后缀,如 http_request_duration_seconds。标签基数是最主要风险,禁止用 user_id、request_id、完整 URL 或原始错误信息作标签。仪表盘遵循 RED(Rate、Errors、Duration)与 USE(Utilization、Saturation、Errors)。

五、日志聚合与告警:ELK 索引全部字段,查询灵活但成本高;Loki 只索引标签,内容为压缩未索引存储,适合按标签过滤后检索,但同样要避免高基数标签。Datadog 等按摄入量计费,可用排除规则降本。告警示例给出 HighErrorRate、HighLatencyP95、ServiceDown,强调按症状告警、设置 for、关联 runbook、阈值来自 SLO。

六、附带中间件示例将 correlation id、span、指标统一处理,并给出验证清单。限制与前提:需自备日志库、OTel SDK/Collector、Prometheus 与所选聚合后端;资料未提供具体安装命令、收费价格或平台支持范围。