使用仪表库
您可以使用仪表库来为特定的仪表库生成遥测数据。
例如,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)