使用仪表库

您可以使用仪表库来为特定的仪表库生成遥测数据。

例如,ASP.NET Core 的仪表库将自动生成基于入站 HTTP 请求的跨度度量

设置

每个仪表库都是一个 NuGet 包,安装它们通常可以这样操作:

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

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

版本注解

属性名称的语义约定(标准)目前还不稳定,因此仪表库包当前处于未发布状态。这并不意味着功能本身不稳定,只是一些属性的名称在未来可能会发生变化,可能会添加一些属性,可能会删除一些属性。这意味着您需要使用 --prerelease 标志,或安装包的特定版本。

使用 ASP.NET Core 和 HttpClient 的示例

以下是如何为 ASP.NET Core 应用程序对入站和出站请求进行仪表化的示例。

首先,获取适用于 OpenTelemetry 核心的相应包:

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 "你好,世界!";
    }
    else
    {
        return "你好,世界!";
    }
});

app.Run();

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

  • 开始一个新的跟踪
  • 生成一个表示对端点发起的请求的跨度
  • 生成一个表示对 https://example.com/ 执行的 HTTP GET 的子跨度

如果添加更多的仪表库,那么就会为每个仪表库生成更多的跨度。

可用的仪表库

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

您还可以在注册表中找到更多的可用仪表化工具。

下一步

在设置仪表库之后,您可能想要添加手动仪表化以收集自定义的遥测数据。

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

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

您还可以了解目前处于 beta 版的.NET 自动仪表化

最后修改 December 10, 2023: translate (a4350d6e)