SuperAPI AI 工具集

production-observability

部署与运维

查看项目

更新于 10-16 02:22

技能介绍

用途

该技能面向 Spring Boot 4 应用的生产可观测性建设,指导如何对用户可见操作和运维边界进行埋点,而不是对每个方法都进行埋点。

主要能力

基线配置

  • 添加 Boot 4 Actuator starter,并按平台选择一种指标注册表。
  • 若通过 OTLP 使用 OpenTelemetry tracing,使用 spring-boot-starter-opentelemetry 以及 Boot 的 management.opentelemetry.tracing.export.otlp.* 属性。
  • 使用 Micrometer Observation 处理应用指标与追踪。
  • 在应用代码中优先使用 Micrometer API,而非直接使用 OpenTelemetry API。
  • 当 OpenTelemetry collector 是平台边界时,通过 OTLP 导出指标与追踪。
  • 仅暴露必需的 actuator 端点,并对非公开端点进行安全保护。

Observation 约定

  • 以稳定的操作名称命名 observation,例如 orders.create。
  • 指标使用低基数键值,高基数键值仅用于追踪。
  • 切勿用用户 ID、实体 ID、含 ID 的 URL 或异常消息作为指标标签。
  • 为异步执行器边界注册 ContextPropagatingTaskDecorator。
  • 仅在有意为之并经过测试时才启用 Reactor 自动上下文传播。
  • 避免对已具备埋点的 MVC controller 或 repository 使用 @Observed 注解。

健康与就绪

  • 保持 liveness 独立于远程依赖。
  • 将影响流量的关键依赖放入 readiness 分组。
  • 为自定义健康检查设置严格超时和稳定的 detail key。
  • 对未认证调用者隐藏敏感的健康详情。

日志与告警

  • 输出与 trace 和 span ID 关联的结构化日志。
  • 默认对凭据、令牌、个人数据、prompt 和请求体进行脱敏。
  • 针对服务目标症状告警:错误率、延迟、饱和度或队列滞后。
  • 每个可操作告警中包含 runbook 以及服务/依赖标识。

使用方式

资料提供了示例文件:examples/good-observation.java、examples/good-observability.yml 和 examples/bad-observation.java。

官方来源

  • Boot observability: https://docs.spring.io/spring-boot/reference/actuator/observability.html
  • Boot tracing: https://docs.spring.io/spring-boot/reference/actuator/tracing.html
  • Boot structured logging: https://docs.spring.io/spring-boot/reference/features/logging.html#features.logging.structured

常见陷阱

  • 将高基数 ID 用作指标标签——应保留给追踪或日志。
  • 直接配置 OpenTelemetry SDK 并意外禁用 Boot 集成——应优先使用 Boot 与 Micrometer 支持。
  • 暴露所有 actuator 端点——应暴露最小集合并加以保护。
  • 将 liveness 绑定到数据库或 broker——依赖故障可能触发重启循环。
  • 在 @Async 工作中丢失 trace 上下文——应显式注册上下文传播。