使用仪器库

在开发应用程序时,您可能会使用第三方库和框架来加速您的工作。如果您随后使用 OpenTelemetry instrumentation 您的应用程序,您可能希望避免花费额外的时间手动为您使用的第三方库和框架添加 traces、logs 和 metrics。

许多库和框架已经支持 OpenTelemetry,或者通过 OpenTelemetry instrumentation 进行支持,因此它们可以生成您可以导出到可观测性后端的 telemetry。

如果您正在 instrumentation 使用第三方库或框架的应用程序或服务,请遵循以下说明,了解如何为您的依赖项使用原生 instrumented 库和 instrumentation 库。

使用原生 instrumented 库

如果一个库默认包含 OpenTelemetry 支持,您可以通过在您的应用程序中添加和设置 OpenTelemetry SDK 来获取该库发出的 traces、metrics 和 logs。

该库可能需要一些额外的配置来进行 instrumentation。请参阅该库的文档以了解更多信息。

使用检测库

如果某个库默认不包含 OpenTelemetry,您可以使用 检测库 来为某个库或框架生成遥测数据。

例如,ASP.NET Core 的检测库将根据传入的 HTTP 请求自动创建 SpanMetrics

设置

每个检测库都是一个 NuGet 包,通常安装方法如下:

dotnet add package OpenTelemetry.Instrumentation.{library-name-or-type}

通常,它会在应用程序启动时进行注册,例如在创建 TracerProvider 时。

关于版本说明

属性名称的语义约定(标准)目前不稳定,因此检测库目前尚未发布。这并不意味着功能本身不稳定,只是某些属性的名称将来可能会更改,有些可能会添加,有些可能会移除。这意味着您需要使用 --prerelease 标志,或安装特定版本的程序包。

ASP.NET Core 和 HttpClient 示例

例如,以下是如何检测 ASP.NET Core 应用程序的传入和传出请求。

首先,获取相应的 OpenTelemetry Core 程序包。

dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Exporter.Console

然后,您可以安装检测库。

dotnet add package OpenTelemetry.Instrumentation.AspNetCore --prerelease
dotnet add package OpenTelemetry.Instrumentation.Http --prerelease

接下来,在启动时配置每个检测库并使用它们!

using OpenTelemetry.Resources;
using OpenTelemetry.Trace;


var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry()
  .WithTracing(b =>
  {
      b
      .AddHttpClientInstrumentation()
      .AddAspNetCoreInstrumentation();
  });

var app = builder.Build();

var httpClient = new HttpClient();

app.MapGet("/hello", async () =>
{
    var html = await httpClient.GetStringAsync("https://example.com/");
    if (string.IsNullOrWhiteSpace(html))
    {
        return "Hello, World!";
    }
    else
    {
        return "Hello, World!";
    }
});

app.Run();

当您运行此代码并访问 /hello 端点时,检测库将:

  • 启动一个新的 Trace
  • 生成一个表示对该端点请求的 Span
  • 生成一个子 Span,表示对 https://example.com/ 的 HTTP GET 请求

如果您添加更多的检测库,您将为每个库获得更多的 Span。

可用检测库

OpenTelemetry 生成的检测库的完整列表可从 opentelemetry-dotnet 存储库中获取。

您也可以在 注册表 中找到更多可用的检测。

下一步

设置检测库后,您可能希望在代码中添加自己的 检测,以收集自定义遥测数据。

如果您使用的是 .NET Framework 4.x 而不是现代 .NET,请参考 .NET Framework 文档 在 .NET Framework 上配置 OpenTelemetry 和检测库。

您还需要配置适当的导出器,以便将 遥测数据导出到一个或多个遥测后端。

您也可以查看 .NET 的 自动检测,该功能目前处于 Beta 阶段。