OpenTelemetry入门看这一篇就够了( 二 )


我们不仅可以使用任何我们想要的编程语言,还可以挑选任何兼容的存储后端,从而避免被绑定在特定的商业供应商上面 。
开发人员可以检测他们的应用程序,而无需知道数据将存储在哪里 。
OpenTelemetry 为我们提供了创建跟踪数据的工具,为了获取这些数据,我们首先需要检测应用程序来收集数据 。为此,我们需要使用 OpenTelemetry SDK 。
检测(埋点)应用程序的检测数据可以使用自动或手动(或混合)方式生成 。要使用 OpenTelemetry 检测应用程序,可以前往访问 OpenTelemetry 存储库,选择适用于的应用程序的语言,然后按照说明进行操作 。
自动检测使用自动检测是一个很好的方式,因为它简单、容易,不需要进行很多代码更改 。
如果你没有必要的知识(或时间)来创建适合你应用程序量身的追踪代码,那么这种方法就非常合适 。
当使用自动检测时,将创建一组预定义的 spans,并填充相关属性 。
手动检测手动检测是指为应用程序编写特定的埋点代码 。这是向应用程序添加可观测性代码的过程 。这样做可以更有效地满足你的需求,因为可以自己添加属性和事件 。这样做的缺点是需要导入库并自己完成所有工作 。

OpenTelemetry入门看这一篇就够了

文章插图
传播器可以将 W3C tracecontext、baggage 和b3 等传播器(Propagators)添加到配置中 。
不同的传播器定义特定的行为规范,以便跨进程边界传播带上上下文数据 。
  • Trace Context:用于在 HTTP headers 中编码 trace 数据,以便在不同的服务间传递这些数据 。
  • Baggage:用于在 span 之间传递键值对数据,例如用户 ID、请求 ID 等 。
  • B3:用于在 HTTP headers 中编码 trace 数据,以便在不同的服务间传递这些数据(主要用于 Zipkin 或其兼容的系统) 。
采样采样是一种通过减少收集和发送到后端的追踪样本数量来控制 OpenTelemetry 引入的噪声和开销的机制 。
可以告诉 OpenTelemetry 根据要发送的追踪/流量的数量执行采样 。(比如只采样 10% 的追踪数据) 。
OpenTelemetry入门看这一篇就够了

文章插图
两种常见的采样技术是头采样和尾采样 。
OpenTelemetry 协议(OTLP)OpenTelemetry 协议(OTLP)规范描述了遥测数据在遥测源、收集器和遥测后端之间的编码、传输和传递机制 。
每种语言的 SDK 都提供了一个 OTLP 导出器,可以配置该导出器来通过 OTLP 导出数据 。然后,OpenTelemetry SDK 会将事件转换为 OTLP 数据 。
OTLP 是代理(配置为导出器)和收集器(配置为接收器)之间的通信 。
OpenTelemetry Collectors应用程序的遥测数据可以发送到 OpenTelemetry Collectors 收集器 。
OpenTelemetry入门看这一篇就够了

文章插图
收集器是 OpenTelemetry 的一个组件,它接收遥测数据(span、metrics、logs 等),处理(预处理数据)并导出数据(将其发送到想要的通信后端) 。
OpenTelemetry入门看这一篇就够了

文章插图
Receivers接收器 Receivers 是数据进入收集器的方式,可以是推送或拉取 。OpenTelemetry 收集器可以以多种格式接收遥测数据 。
OpenTelemetry入门看这一篇就够了

文章插图
以下是接收器在端口 4317(gRPC) 和 4318(http) 上接受 OTLP 数据的配置示例:
otlp:protocols:http:grpc:endpoint: "0.0.0.0:4317"同样下面的示例,它可以以 Jaeger Thrift HTTP 协议方式接收遥测数据 。
jaeger: # Jaeger 协议接收器protocols: # 定义接收器支持的协议thrift_http: # 通过 Jaeger Thrift HTTP 协议接收数据endpoint: "0.0.0.0:14278"Processors一旦接收到数据,收集器就可以处理数据 。处理器在接收和导出之间处理数据 。处理器是可选的,但有些是推荐的 。
比如 batch 处理器是非常推荐的 。批处理器接收跨度、指标或日志,并将它们放入批次中 。批处理有助于更好地压缩数据,减少传输数据所需的传出连接数量 。该处理器支持基于大小和时间的批处理 。
processors:batch:需要注意的是配置处理器并不会启用它 。需要通过 service 部分的 pipelines 启用 。
service:pipelines:traces:receivers: [jaeger]processors: [batch]exporters: [zipkin]


推荐阅读