Logging & Observability 是一个面向生产系统的日志与可观测性技能,帮助团队把日志、追踪和指标整合成完整的可观测性栈,从日志格式一直到告警路由。
适用场合
适用于处理以下关键词的场景:structured logging、distributed tracing、OpenTelemetry、OTel、correlation ID、log levels、Grafana dashboard、alerting thresholds、SLI SLO、Prometheus metrics、PagerDuty integration、observability stack、Winston setup、Pino logger、log aggregation、Datadog、Honeycomb。
不适用于:性能剖析(CPU/内存火焰图)、负载测试、数据库查询优化、安全审计。
日志级别决策
技能给出一个日志级别决策树:事件是否代表系统故障?若无法无人工恢复则记 FATAL 并触发告警;若可重试或降级则记 ERROR。若非故障但属异常情况(如熔断打开、使用废弃接口)记 WARN。若属有意义的业务事件(用户操作、支付成功、服务启动)记 INFO。若仅用于调试特定问题(数据库查询、缓存命中、函数输入)记 DEBUG;更细粒度的循环迭代与 OTel span 记 TRACE。经验法则:生产环境运行 INFO 及以上,DEBUG 仅在按服务通过动态配置启用,绝不在生产常开。
核心模式
结构化日志格式(JSON):每行日志必须可解析,字符串拼接不算日志。提供 Node.js 的 Pino 配置示例(含 level、base 服务信息、redact 脱敏路径与 censor 占位)以及 Python 的 structlog 配置示例(processors 链、merge_contextvars、JSONRenderer)。
相关性 ID:每个请求需要贯穿所有下游调用的 trace ID,这是不使用 OTel 时的最小可行分布式追踪。示例给出 Express 中间件:从请求头 x-trace-id 读取或生成 randomUUID,配合 AsyncLocalStorage 保存 traceId/spanId,并回写响应头,以及自动注入上下文的日志封装。
OpenTelemetry 初始化:提供最小 Node.js 引导代码(NodeSDK、OTLPTraceExporter、自动插桩),并强调必须作为入口的第一条导入。
分布式追踪传播:以时序图展示客户端到 API 网关到支付服务到数据库的 traceparent 传播,W3C traceparent 格式为 00-{traceId}-{spanId}-{flags},要求每次下游 HTTP 调用都传播该头。
参考文件
技能包含 references/opentelemetry-setup.md(各语言 OTel SDK 初始化、收集器 YAML 配置、span 属性、上下文传播)与 references/alerting-patterns.md(SLI/SLO 定义、告警路由、PagerDuty 严重级映射、告警疲劳预防)。
反模式
反模式一:在生产中记录 PII 或密钥。记录完整请求体会导致 GDPR/CCPA 违规,罚款可达全球收入的 4%;密钥进入日志后会传播到日志聚合器、S3 导出与审计轨迹。检测方法是在日志中搜索作为字段值的 password、ssn、cardNumber、authorization。修复方式包括白名单字段(只记录明确批准的安全字段)与在日志配置层做结构性脱敏(含嵌套对象的 redact 路径)。专家在日志初始化时配置脱敏,而不是靠注释提醒。
反模式二:用非结构化字符串日志替代结构化 JSON。字符串插值的数据无法被过滤、聚合或告警,Grafana 查询 amount > 1000 要求 amount 是数值字段而非句子的一部分;字符串日志是只写的,无法大规模查询。修复方式是改用结构化字段并统一事件命名(snake_case 动词-名词,如 payment_processed)。日志消息字符串供人扫读,可查询数据全部放在结构化字段中。
反模式三:log-and-throw(重复日志条目)。先记录错误再抛出,会让同一错误在日志中出现 2-5 次,使基于错误计数的告警不可靠、事故复盘混乱,并增加按量计费的日志成本。修复原则是只在处理错误的地方记录,不在传播错误的地方记录。若单个请求的同一 traceId 出现在两条以上错误日志中,说明存在 log-and-throw 链。
质量检查清单
包括:所有日志行均为 JSON;记录日志级别策略;PII/密钥在日志配置层脱敏;所有出站 HTTP 调用传播相关性 ID;OTel SDK 先于任何其他导入初始化;错误日志包含错误对象而非仅消息;错误处理中无 log-and-throw;DEBUG 日志使用条件守卫或采样;每个关键用户旅程定义 SLI/SLO;记录通知与告警阈值;每个告警链接运行手册;设置日志保留策略(成本与合规)。
产出物
日志配置(Pino/Winston/structlog 含脱敏规则)、OTel 引导文件(含自动插桩的 SDK 初始化)、相关性中间件(AsyncLocalStorage 请求上下文)、Prometheus 指标模块(Counter/Histogram/Gauge 定义)、Grafana 看板 JSON(四个黄金信号面板)、Alertmanager 规则 YAML(基于 SLO 的告警定义)。
限制
技能明确不适用于性能剖析、负载测试、数据库查询优化与安全审计。其收费方式、价格与平台要求暂未提供。