使用 OpenTelemetry 构建 .NET 应用程序可观测性(2):OpenTelemetry 项目简介
- 前世今生
- OpenTracing
- OpenCensus
- OpenTelemetry
- OpenTelemetry项目简介
- OpenTelemetry规范
- 信号
- 上下文与传播
- 开放遥测协议
- OpenTelemetry SDK
- OpenTelemetry SDK 架构
- OpenTelemetry Collector
- OpenTelemetry规范
- 下一期预览
前世今生
OpenTracing
OpenTracing项目于2016年启动,旨在提供一套分布式追踪标准,以便开发者可以更轻松地实现分布式追踪。
OpenTracing 定义了一组跟踪模型,以及一组用于在应用程序中创建和管理这些数据模型的 API。
以下是 OpenTracing 的三个相互关联的核心模型:
Span
:表示一个调用过程,包括调用的开始和结束,以及调用过程中的一些信息,比如调用的服务名、调用的方法名、调用的参数、返回值呼叫的情况、呼叫异常等。Tracer
:表示创建和管理Span
并将Span
发送到跟踪系统的跟踪器。SpanContext
:表示Span
的上下文,包括TraceId
、SpanId
、行李
等信息。
OpenTracing 指定 Span
将包含以下信息:
- 操作名称:操作名称,表示
Span
所代表的操作的名称。 - 开始时间:开始时间,表示
Span
的开始时间。 - Finish Time:结束时间,表示
Span
的结束时间。 - Tags:标签,代表
Span
的一些标签信息,如http.method
、http.url
、http .status_code
等等。 - Logs:日志,代表
Span
的一些日志信息,如错误
、异常
等。 - SpanContext:
Span
的上下文,包括TraceId
、SpanId
、Bagg年龄
等信息。
行李
是OpenTracing中的一个概念。跨进程Span
到Baggage
之间可以传递一些用户自定义的数据,例如用户的 userId
、orderId
等.
OpenTracing 还定义了 SpanContext
与跨进程传输相关的概念:
Tracer 通过 Inject
和 Extract 将
SpanContext
信息注入到 Carrier 方法。 ,以便跨进程
在Span
之间传递。
- 注入:将
SpanContext
信息注入到Carrier
,以在Span
之间跨进程传输。 - 提取:从
Carrier
提取SpanContext
信息,以便在Span
之间跨进程传递。 - Carrier:载体,代表
SpanContext
信息的载体,如HTTP Header、RPC Header等。
开放遥测规范
OpenTelemetry 规范定义了所有语言的 SDK 都需要遵循的跨语言规范。
规格包括以下部分:
- API规范:API规范,规定了OTel的API应该包含哪些方法。
- SDK规范:SDK规范规定了OTel的SDK应提供哪些功能。
- 数据规范:数据规范,定义了OTel的数据模型。
详细规格请参考https://www.introzo.com/docs/specs/otel/
信号
OpenTelemetry 规范定义了以下数据模型,统称为信号。
- 追踪
- 指标
- 日志
- 行李
这些概念都在上面OpenTracing的设计中,这里不再赘述。
上下文与传播
Context 表示通话过程中的上下文,用于在通话过程中传递一些数据,如 Tracing、Baggage 等。
传播者利用上下文为每个横切关注点(例如跟踪和行李)注入和提取数据。
通常,Context是通过HTTP Header、RPC Header等方式传递的。Propagators会将Context中的数据注入到HTTP Header、RPC Header等中,以便在跨进程调用时进行传递。
开放遥测协议
OpenTelemetry Protocol,简称OTLP,是OTel定义的标准数据传输协议,用于OTel的SDK和可观测性后端之间传输数据。
https://www.introzo.com/docs/specs/otlp/
OTLP 使用 gRPC 作为传输协议。每个可观测后端只需要实现OTLP的gRPC接口即可接收OTel数据。
在此之前,每个可观测性后端都有自己的数据传输协议。例如,Jaeger 使用了 Jaeger Thrift 协议,Zipkin 使用了 Zipkin JSON V2 API 等。
OpenTelemetry SDK
OpenTelemetry SDK 架构
虚线上方是OpenTelemetry API的定义,下面是具体的SDK实现。
Tracing、Metrics、Logging等数据收集称为instrumentation,在中文资料中通常称为埋点。
除了Instrumentation之外,还有Sampler、Processor、Exporter等组件。
- Sampler:采样器,用于确定数据的采样规则。
- Processor:处理器,用于处理数据,如数据聚合、压缩等。
- 导出器:用于将数据导出到可观测性后端的导出器。通过实现不同的Exporters,可以将数据导出到不同的后端系统,比如Jaeger、Zipkin、Prometheus等。当然,也可以通过OTLP标准协议将数据导出到支持OTLP的后端系统。
打开遥测收集器
Collector 是一个独立的进程,用于收集、处理和导出 OTel 数据。
收集器主要由三个部件组成:
- Receiver:接收器,用于接收OTel数据,支持多种数据格式,如OTLP、Jaeger Thrift、Zipkin JSON V2 API等。
- Processor:处理器,用于处理数据,如数据聚合、压缩等。
- 导出器:用于将数据导出到可观测性后端的导出器。
Processor 和 Exporter 的功能与 OpenTelemetry SDK 中的 Processor 和 Exporter 类似,但 Collector 作为一个独立的进程,可以集中处理来自多个应用程序的数据(例如通过 OTLP 的 Receiver 统一采集),而不需要 Processor和 Exporter 集成在每个应用程序中。
Collector也是可插拔的架构,可以通过配置文件配置不同的组件如Processor、Exporter。
下一期预览
从下一期开始,我们将正式介绍如何在.NET应用程序中使用OpenTelemetry,并在使用过程中进一步介绍OpenTelemetry的设计和实现。
欢迎关注个人技术公众号
相关文章
- 10-05 ZEEKR 001 FR高性能车型预热:搭载4电机
- 10-05 我国网民规模达10.79亿,互联网普及率达76.4
- 10-05 《2023年标准地图》正式上线
- 10-05 stm32内存包括哪些类型(stm32内存分为几个
- 10-05 stm32采集+数据处理程序(stm32采集+数据
- 10-05 stm32仿真图的引脚如何连接(stm32仿真器接
- 10-05 Zabbix警告问题
- 10-05 Zabbix集成云预警(瑞祥云)实现电话短信预警
- 10-05 利用企业微信实现预警(shell+python)
- 10-05 高通CEO爆料苹果自研5G芯片明年准备就绪
- 10-05 全球智能手机市场被扰乱:iPhone与Androi
- 10-05 苹果最新巧克力广告:Apple Card激活到付款
- 10-05 苹果推出iOS 15.6正式版固件:我们来看看iO
- 10-05 iPadOS 16 允许应用程序使用 M1 设备存
- 10-05 为迎接Apple Watch 10周年:Appl
- 10-05 STM32连接esp32(stm32连接esp32
- 10-05 stm32串口dma发送和接收周期数据和随机数据(
- 10-05 stm32点亮led灯ad20 (stm32点亮l
- 10-05 esp32编程接线图(esp32编程程序接线图)
- 10-05 DAC0832波形发生器课程设计报告(dac083
- 最近发表