OpenTelemetry
Métricas
Logs
Tracing
DistributedTracing
Prometheus
Jaeger
Grafana
CloudNative
DevOps

OpenTelemetry 的可观察性:指标、日志和分布式跟踪

OpenTelemetry 将指标、日志和跟踪的收集统一在一个 SDK 中,促进分布式系统的端到端可观察性。

OpenTelemetry 的可观察性:指标、日志和分布式跟踪

OpenTelemetry 将指标日志跟踪的集合统一到单个 SDK 中,从而促进分布式系统的端到端可观察性。到 2025 年,采用该标准将使团队能够通过一致的管道监控云、边缘和本地应用程序。

为什么选择 OpenTelemetry?

  • 标准化,不同语言(Java、Node.js、Go、Python)的统一API。
  • 灵活性,可配置 Prometheus、Jaeger、Grafana Loki 等导出器。
  • 可扩展性,高频收集而不影响性能。
  • 与云提供商集成,对 AWS X-Ray、GCP Cloud Trace、Azure Monitor 的本机支持。

主要组件

  1. 收集器,接收仪器信号并将其转发到后端的代理。
  2. SD​​K,检测代码的库(自行检测或手动)。
  3. 导出器,将数据发送到存储/可视化系统的适配器。

信号如何流动

每个使用 OpenTelemetry SDK 检测的服务都会将其信号发送到中央收集器。 Collector 作为单个收集点工作,并将数据路由到适当的后端:指标发送到 Prometheus,跟踪发送到 Jaeger,日志发送到 Grafana Loki。反过来,Prometheus 为 Grafana 仪表板提供支持。这种设计将仪器与存储工具解耦,允许您交换或添加后端而无需接触应用程序代码。

自动与手动仪器

  • 自我检测,只需启用代理(0),SDK 即可捕获 HTTP、DB、gRPC。
  • 手动检测,为关键业务逻辑创建自定义范围。

在手动检测的情况下,逻辑很简单:应用程序获取一个命名跟踪器,在您想要观察的业务操作开始时打开一个跨度,并在结束时关闭它,即使出现错误也是如此。此跨度捕获执行时间和任何相关的自定义属性,从而提供对流程中关键点的精细可见性。

配置收集器

收集器配置分为三个块。首先,接收器定义信号如何到达,通常通过 OTLP,接受 gRPC 和 HTTP。然后,导出器指向目的地:一个端点供 Prometheus 公开指标,另一个端点供 Jaeger 接收跟踪。最后,服务块将所有内容绑定到管道中,声明指标从 OTLP 接收器到 Prometheus 导出器,跟踪从同一接收器到 Jaeger。接收、处理和导出之间的这种分离使 Collector 变得灵活。

可观察性最佳实践

  • 上下文传播,在 HTTP 标头中保留 1 。
  • 采样,调整采样率以避免过载(例如生产中的 10%)。
  • 属性丰富,包括233、4。
  • 基于 SLI/SLO 的警报,使用延迟和错误率指标。

实施清单

  • 在应用程序中安装 SDK(Node、Java、Go、Python)。
  • OpenTelemetry Collector 部署([Kubernetes6 DaemonSet 或 sidecar)。
  • 配置 Prometheus、Jaeger 和 Loki 的导出器。
  • 定义采样和保留策略。
  • 在 Grafana 中创建仪表板(延迟、吞吐量、错误)。
  • 在Alertmanager 中配置警报。
  • 记录跟踪模式和属性。

结论

OpenTelemetry 提供了一个统一的解决方案,用于观察复杂的系统,减少工具碎片并实现指标、日志和跟踪之间的关联。通过实施所描述的实践,您的团队可以获得完整的可见性,并可以对事件采取主动行动。


您已经使用 OpenTelemetry 了吗?在评论中分享您的经验!

另请阅读

  • [分布式系统中的可观察性:日志、指标和跟踪7
  • [超越日志的可观察性:OpenTelemetry 在实践中发生了什么变化8
  • [站点可靠性工程指标:定义和监控 SLI、SLO 和 SLA9
  • [Workers:调试、日志和 Workers Tail — 无需日志服务器即可在边缘进行观察10
  • [边缘计算架构:分布式处理策略11
  • [社区指标:监控在线活动中的 DAU、WAU 和 MAU12