Live:CloudOps Webinars & Hands-on Workshops ·Register ↗
跳到主要内容

OpenTelemetry 与 .NET

.NET 中的 OpenTelemetry 与其他语言的实现不同,因为它建立在框架现有的插桩能力之上。虽然其他平台需要 OpenTelemetry 提供完整的遥测 API,但 .NET 已经通过其平台 API 为 logging、metrics 和 activities 提供了强大的内置机制。OpenTelemetry .NET 实现只是利用这些原生组件(如 System.Diagnostics),而不是创建新的组件。这意味着库作者可以使用他们已经熟悉的标准 .NET API,而 OpenTelemetry 可以与这些现有的插桩点无缝集成。

OpenTelemetry 库

.NET 中的 OpenTelemetry 围绕三个基本包类别构建:

  1. 核心 API 包提供基本基础和核心功能,包括遥测收集的核心接口和实现。

  2. 插桩 包自动从各种 .NET 组件和流行库收集遥测数据,从 ASP.NET Core、HTTP 客户端和 Entity Framework 等源捕获 metrics、traces 和 logs。

  3. 导出器 包充当不同可观测性平台的桥梁,允许您将收集的遥测数据发送到各种目标,如 Jaeger、Prometheus 或任何支持 OTLP 协议的系统。

这些组件通过 NuGet 提供,作为一个完整的系统协同工作,为 .NET 应用程序提供完整的可观测性解决方案。

下表描述了这些包。

描述
OpenTelemetry提供核心功能的主要 OTEL 库
OpenTelemetry.Instrumentation.AspNetCoreASP.NET Core 和 Kestrel 的插桩
OpenTelemetry.Instrumentation.GrpcNetClientgRPC 客户端的插桩
OpenTelemetry.Instrumentation.HttpHttpClient 和 HttpWebRequest 类的插桩
OpenTelemetry.Instrumentation.SqlClientSqlClient 的插桩,用于跟踪数据库操作(如 Entity Framework Core)
OpenTelemetry.Exporter.Console使用 OTLP 协议的导出器
OpenTelemetry.Exporter.OpenTelemetryProtocol使用 OTLP 协议的导出器
OpenTelemetry.Exporter.Prometheus.AspNetCore使用 ASP.NET Core endpoint 实现的 Prometheus 导出器
OpenTelemetry.Exporter.ZipkinZipkin tracing 的导出器

AWS .NET OpenTelemetry 库

AWS 发布了最新版本的 OpenTelemetry 包,可在 NuGet 上获取。这些包经过重新设计,更加简洁并符合最新的 OpenTelemetry 命名约定。它们包含新功能,如对 AWS SDK for .NET 增强可观测性的支持,以及对 AWS 服务(包括 Amazon Bedrock)的额外插桩,还有多个错误修复、增强功能和 OpenTelemetry 社区的贡献。

下表描述了这些包。

描述
OpenTelemetry.Instrumentation.AWS在使用 AWS SDK for .NET 时,通过额外的 AWS 服务数据增强 metrics 和 tracing 调用。
OpenTelemetry.Instrumentation.AWSLambda用于插桩 AWS Lambda Handler 以创建传入 span 的 SDK 方法
OpenTelemetry.Resources.AWSAWS 特定的资源检测器,用于根据应用程序运行位置增强遥测元数据。包括对 Amazon EC2、AWS Elastic Beanstalk、Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 的支持
OpenTelemetry.Extensions.AWS支持通过 AWS X-Ray 进行 Trace Context 传播。