Observability 是一个面向生产系统遥测与可观测性建设的技能,归属于 odin-claude-plugin。其用途是在新增遥测、构建系统能够长期维护的最小观测面、审查告警规则、发布生产特性或诊断不透明生产问题时提供一套有边界的执行流程。
主要能力与使用方式按以下流程展开:
适用范围与边界:该技能仅进行可逆的本地操作,只在工作区写入仪表化代码和本地遥测配置,不进行远程变更,回滚方式是丢弃或还原编辑。它不会替代实际的线上监控后端配置。
前置输入:需要提供待仪表化的目标源文件或端点,以及其运行时(语言与框架)。可选输入包括现有日志、指标或追踪库,已固定的指标或追踪后端,用于论证阈值的 SLO 或历史延迟与错误数据,以及告警投递渠道和运行手册位置。若未固定后端,则针对厂商中立的 OpenTelemetry API 编写,以便后续配置导出器。
执行步骤:首先读取目标代码并确认运行时与写入范围,无法识别目标则停止。随后写下 2 至 4 个运维值班问题,每个新增信号都必须回答其中一个问题并对应运维人员的处置动作,无法命名问题则停止仪表化。按问题类型选择信号:聚合频率或速度用指标,跨服务耗时分布用追踪,单个具体案例经过用日志。对每个请求驱动端点和外部依赖实施 RED(速率、错误、时长),对队列、连接池和主机实施 USE(利用率、饱和度、错误)。
日志要求:每行日志为 JSON 对象,包含稳定事件名与机器可读字段(ID、提供方、错误码、尝试次数),不得将值插值进散文式字符串;错误级别用于需要调查的不变量破坏,警告用于已处理降级,信息用于重要业务事件,调试默认在生产关闭。在系统边界生成或接受请求 ID 并附加到每条日志、Span 和出站调用,在响应中回显;禁止记录密钥、令牌、密码或未脱敏个人信息,采用字段白名单,不记录完整请求体。
指标要求:为每个端点和依赖添加延迟直方图,分桶大致覆盖 0.05 秒至 5 秒,标签包含方法、路由模板和状态类别(2xx/5xx),不使用原始状态码;读取 p50/p95/p99 而非平均值;标签只来自小型固定集合,禁止用户 ID、邮箱、请求 ID、完整 URL 或错误消息文本。
追踪要求:在应用代码之前初始化 OpenTelemetry 自动仪表化,覆盖 HTTP、gRPC 和数据库客户端,并设置服务名;仅在有意义的内部门作单元周围添加手工 Span,携带值班人员会过滤的属性,保持重建关键请求路径所需的最少 Span 数量;在每个异步边界(HTTP 头、队列消息元数据)传播上下文;采用低速率头部采样,后端支持时通过尾部采样保留所有错误。
告警与仪表盘:告警基于用户可感知的症状,如持续错误率超过小百分比、p99 延迟超过数秒、队列年龄超过数分钟,不对 CPU、Pod 重启或磁盘使用等原因告警;每条告警必须可操作(若响应是忽略则删除),链接说明其含义、首次查询和升级路径的运行手册,阈值与持续时间需由 SLO 或历史数据论证,且恰好使用 page(用户可见、立即处理)和 ticket(降级、本周处理)两级严重度。仪表盘围绕所选信号与追踪揭示的故障模式构建,每个面板映射到故障模式或运维问题,省略无人阅读的图表。
收尾与验证:只保留系统会维护的观测面,移除重复或无主的仪表化、标签、Span 或面板。在本地验证其可编译、可加载并可发出:结构化日志以 JSON 出现且关联 ID 完整,指标序列以预期标签和合理数值出现,单个请求端到端追踪无损坏 Span。若系统无法本地运行,则报告本地发出未验证。
失败与恢复:无法命名运维问题时不修改并报告;无法识别目标或运行时时停止且不写入;无 SLO 或历史数据论证阈值时不猜测数字,记录告警及其查询并标记阈值未论证;本地验证失败视为仪表化缺陷,修复后重跑失败检查;重复信号复用既有实现而不新增;无主的面板或信号应移除;部分结果保留通过部分并逐项列出通过或失败,不吞掉错误或虚报完成。
适用场景:为生产特性新增结构化日志、指标与追踪;审查或精简告警规则;诊断难以定位的生产问题;构建围绕故障模式的仪表盘。限制:不具备远程变更能力;在不提供后端时只能使用厂商中立的 OpenTelemetry API;无法本地运行时完成状态受阻;未提供 SLO 或历史数据时告警阈值无法论证。