使用 OpenTelemetry 和 Pino 在 Node.js 中的深度可观测性

主要观点:随着应用日益分布式,调试 Node.js 后端性能问题或定位故障有挑战,仅靠日志提供的上下文有限,结合 OpenTelemetry 追踪和 Pino 结构化日志能实现深度可观测性,加速调试等。
关键信息:

  • OpenTelemetry 是收集追踪、指标和日志的开放标准,可在 Node.js 应用中拼接请求追踪等。
  • Pino 是低开销、高性能的 Node.js 日志库,记录异步结构化 JSON。
  • 介绍了配置 OpenTelemetry 追踪、实现 Pino 结构化日志、注入追踪和跨度上下文、关联追踪和日志等的代码及步骤,包括各文件代码结构、依赖安装等。
  • 指出了使用过程中的陷阱,如上下文传播中断、过度仪器化和遥测噪声、追踪等之间缺乏关联、资源冲突、服务名称缺失或不一致等及避免方法。
    重要细节:
  • 通过pino-opentelemetry-transport将 Pino 日志发送到 OpenTelemetry 收集器,@opentelemetry/sdk-node初始化 OpenTelemetry SDK 管理日志导出器等。
  • 运行 Jaeger 本地实例的命令及相关端口和 UI 地址。
  • 不同陷阱的具体表现及避免措施,如确保追踪上下文正确传播、选择性仪器化、注入追踪 ID 等。
    结论:将 Pino 与 OpenTelemetry 结合,实现高性能结构化日志和分布式追踪,提供深度可观测性,便于在开发后期修复问题。
阅读 30
0 条评论