首页 > 其他分享 >使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介

使用 OpenTelemetry 构建 .NET 应用可观测性(2):OpenTelemetry 项目简介

时间:2023-09-04 22:22:44浏览次数:36  
标签:OTel Span 简介 OpenTelemetry Tracing NET OpenTracing SDK

目录

前世今生

OpenTracing

OpenTracing 项目启动于 2016 年,旨在提供一套分布式追踪标准,以便开发人员可以更轻松地实现分布式追踪。

OpenTracing 定义了一套 Tracing 模型,以及一套 API,用于在应用程序中创建和管理这些数据模型。

下面是 OpenTracing 的三种相互关联的核心模型:

  1. Span:表示一次调用过程,包括调用的起始和结束,以及调用过程中的一些信息,比如调用的服务名称、调用的方法名称、调用的参数、调用的返回值、调用的异常等。
  2. Tracer:表示一个追踪器,用于创建和管理 Span,并将 Span 发送到追踪系统。
  3. SpanContext:表示 Span 的上下文,包括 TraceIdSpanIdBaggage 等信息。

OpenTracing 规定了 Span 上会包含以下信息:

  • Operation Name:操作名称,表示 Span 所代表的操作的名称。
  • Start Time:开始时间,表示 Span 的开始时间。
  • Finish Time:结束时间,表示 Span 的结束时间。
  • Tags:标签,表示 Span 的一些标签信息,比如 http.methodhttp.urlhttp.status_code 等。
  • Logs:日志,表示 Span 的一些日志信息,比如 errorexception 等。
  • SpanContext:Span 的上下文,包括 TraceIdSpanIdBaggage 等信息。

Baggage 是 OpenTracing 中的一个概念,跨进程的 Span 之间可以通过 Baggage 传递一些用户自定义的数据,比如用户的 userIdorderId 等。

OpenTracing 还定义了 SpanContext 跨进程传递相关的概念:

Tracer 通过 InjectExtract 方法,将 SpanContext 信息注入到 Carrier 中,以便在跨进程的 Span 之间传递。

  • Inject:将 SpanContext 信息注入到 Carrier 中,以便在跨进程的 Span 之间传递。
  • Extract:从 Carrier 中提取 SpanContext 信息,以便在跨进程的 Span 之间传递。
  • Carrier:载体,表示 SpanContext 信息的载体,比如 HTTP Header、RPC Header 等。

更多完整的 OpenTracing 规范,可以参考 OpenTracing Specification https://opentracing.io/specification/

OpenTracing 还提供了一套 SDK用来实现 OpenTracing 规范,https://github.com/opentracing

这套 SDK 只包含数据模型和 API,不包含往后端追踪系统发送数据等功能,需要进一步集成后端追踪系统的 SDK,才能将数据发送到后端追踪系统。

例如,如果要将 Span 发送到 Jaeger,需要进一步集成 Jaeger 的 SDK,将 Span 发送到 Jaeger。

https://github.com/jaegertracing/jaeger-client-csharp/tree/master

OpenCensus

OpenCensus 是 Google 于 2018年 组织的一个开源项目,相较于 OpenTracing 项目只支持 Tracing,OpenCensus 项目同时支持 Tracing 和 Metrics。

OpenTelemetry

OpenTelemetry 是 OpenCensus 和 OpenTracing 项目的合并,于 2019年 由 CNCF 组织的一个开源项目。除了支持 Tracing 和 Metrics,还支持 Logging。

OpenTelemetry 的 Tracing 模型很大程度上继承了 OpenTracing 的 Tracing 模型,所以了解 OpenTracing 的 Tracing 模型,有助于理解 OpenTelemetry 的 Tracing 模型。

OpenTelemetry 项目介绍

OpenTelemetry 简称 OTel,包含三部分:

  1. OpenTelemetry Specification:OpenTelemetry 规范,定义了 OTel 的数据模型和 API,还包括标准的数据传输协议 OpenTelemetry Protocol,简称 OTLP。
  2. OpenTelemetry SDK:OpenTelemetry SDK,用于实现 OpenTelemetry 规范。
  3. OpenTelemetry Collector:一个可插拔的数据收集器,用于收集、处理、导出 OTel 的数据。

OpenTelemetry Specification

OpenTelemetry Specification 定义了跨语言的规范,所有语言的 SDK 都需要遵循这个规范。
规范包括以下几个部分:

  1. API Specification:API 规范,规定了 OTel 的 API 应该包含哪些方法。
  2. SDK Specification:SDK 规范,规定了 OTel 的 SDK 应该应该提供哪些功能。
  3. Data Specification:数据规范,定义了 OTel 的数据模型。

详细的规范可以参考 https://opentelemetry.io/docs/specs/otel/

Signals

OpenTelemetry Specification 定义了以下数据模型,这些模型统称为 Signals。

  • Tracing
  • Metrics
  • Logs
  • Baggage

上文 OpenTracing 的设计中都有这些概念,这边不再赘述。

Context & Propagation

Context,表示一次调用过程中的上下文,用于在调用过程中传递一些数据,比如 Tracing、Baggage 等。

Propagators(传播器) 利用 Context 为每个横切关注点(例如 Tracing 和 Baggage)注入和提取数据。

通常,Context 会通过 HTTP Header、RPC Header 等方式传递。Propagators 会将 Context 中的数据注入到 HTTP Header、RPC Header 等中,以便在跨进程的调用过程中传递。

OpenTelemetry Protocol

OpenTelemetry Protocol,简称 OTLP,是 OTel 定义的标准的数据传输协议,用于在 OTel 的 SDK 和可观测性后端之间传输数据。
https://opentelemetry.io/docs/specs/otlp/

OTLP 使用 gRPC 作为传输协议,各个可观测性后端只需要实现 OTLP 的 gRPC 接口,就可以接收 OTel 的数据。

在此之前,各个可观测性后端都有自己的数据传输协议,比如 Jaeger 使用的是 Jaeger Thrift Protocol,Zipkin 使用的是 Zipkin JSON V2 API 等。

OpenTelemetry SDK

OpenTelemetry SDK架构

虚线的上方是 OpenTelemetry API 的定义,下面是具体的 SDK 实现。

Tracing、Metrics、Logging 等数据收集被称为 Instrumentation,中文资料中通常叫做埋点。

除了 Instrumentation,还有 Sampler、Processor、Exporter 等组件。

  • Sampler:采样器,用于决定数据的采样规则。
  • Processor:处理器,用于处理数据,比如将数据聚合、压缩等。
  • Exporter:导出器,用于将数据导出到可观测性后端。通过实现不同的 Exporter,可以将数据导出到不同的后端系统,比如 Jaeger、Zipkin、Prometheus 等。当然也可以通过 OTLP 标准协议将数据导出支持 OTLP 的后端系统。

OpenTelemetry Collector

Collector 是一个独立的进程,用于收集、处理、导出 OTel 的数据。

Collector 主要由三个组件组成:

  1. Receiver:接收器,用于接收 OTel 的数据,支持多种数据格式,比如 OTLP、Jaeger Thrift、Zipkin JSON V2 API 等。
  2. Processor:处理器,用于处理数据,比如将数据聚合、压缩等。
  3. Exporter:导出器,用于将数据导出到可观测性后端。

Processor 和 Exporter 功能与 OpenTelemetry SDK 中的 Processor 和 Exporter 功能类似,但是 Collector 作为独立的进程,可以集中处理多个应用程序的数据(如通过 OTLP 的 Receiver 进行统一的收集),而不需要在每个应用程序中都集成 Processor 和 Exporter。

Collector 也是一个可插拔的架构,可以通过配置文件的方式,配置不同的 Processor、Exporter 等组件。

下期预告

下期开始将正式开始介绍如何在 .NET 应用中使用 OpenTelemetry,并在使用过程中,进一步介绍 OpenTelemetry 的设计和实现。

标签:OTel,Span,简介,OpenTelemetry,Tracing,NET,OpenTracing,SDK
From: https://www.cnblogs.com/eventhorizon/p/17678251.html

相关文章

  • 基于VGG-Net网络的道路语义分割
    1.目的项目基于VGG-Net网络实现道路图像的语义分割,利用英特尔开发工具,验证经过英特尔开发工具优化后的训练时间与推理时间与未经优化前推理时间的差异。2.关键实施细节系统基于Tensorflow进行程序的开发,使用英特尔oneAPIAI分析工具套件分析与原始版本的区别。采用端到端的方式进行......
  • Proj CDeepFuzz Paper Reading: DeepTest: automated testing of deep-neural-network
    Abstract本文:DeepTestTask:asystematictestingtoolforDNN-drivenvehiclesMethod:generatedtestcaseswithreal-worldchangeslikerain,fog,lightingconditions,etc.maxthenumberofactivatedneuronsGithub:https://github.com/ARiSE-Lab/deepTes......
  • C#下log4net日志记录使用实例完整教程
    C#下log4net日志记录使用实例完整教程1log4net1.1log4net简介1.2log4net源码下载1.3log4net源码编译1.3.1编译工具1.3.2编译步骤1.3.2.1解压log4net源码apache-log4net-source-2.0.10.zip1.3.2.2找到文件“……\log4......
  • 从壹开始前后端开发【.Net6+Vue3】(二)前端框架
    项目名称:KeepGoing(继续前进)介绍工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长将以Girvs框架为基础,从壹开始二次开发一个前后端管理框架在这过程中一步步去学习使用到的技术点,也同时会将在此过程中遇到的问题进行分享项目地址......
  • 云原生第十周——promethus简介(下)
    Prometheus服务发现简介prometheus采用pull方式拉取指定目标实例的监控数据,也就是间隔固定的周期去目标实例上抓取metrics数据,每一个被抓取的目标实例都需要暴露一个数据指标API接口,prometheus通过这个暴露的接口就可以获取到其指标数据,这种方式需要由目标服务决定采集的指标有......
  • 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介 [摘]
    作者:车东关键词:Lucenejavafull-textsearchengine Chinese wordsegment内容摘要:Lucene是一个基于Java的全文索引工具包。基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史全文检索的实现:Luene全文索引和数据库索引的比较中文切分词机制简介:基于词库和自动切分......
  • Position-Enhanced and Time-aware Graph Convolutional Network for Sequential Reco
    Position-EnhancedandTime-awareGraphConvolutionalNetworkforSequentialRecommendations目录Position-EnhancedandTime-awareGraphConvolutionalNetworkforSequentialRecommendations概符号说明PTGCNEmbeddingLayerConvolutionalLayer代码[HuangL.,MaY.,......
  • Dotnet6 NPOI操作Excel基本操作总结
    背景需要对Excel进行读取和写入,目前使用Dotnet6开发环境,故直接使用。达到的效果:兼容.xls和.xlsx,识别行为空自动跳过,识别显示值,识别格式内容步骤Dotnet6Nuget安装NPOI,具体版本2.6.1,tips:搜索资料时,可能NPOI1与NPOI2可能有出入。使用方法获取相应文档对象......
  • babel 简介
    Babel是什么Babel是一个Javascript编译器Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧版本的浏览器或其他环境中。下面列出的是Babel能为你做的事情:语法转换通过Polyfill方式在目标环......
  • celery简介与安装
    前言Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个任务队列,专注于实时处理,同时还支持任务调度。可以使用的场景如下:异步发邮件,这个时候只需要提交任务给celery就可以了.之后由worker进行发邮件的操作.跑批接口......