入门追踪 - ASP.NET Core
了解如何在 ASP.NET Core 应用程序中使用 OpenTelemetry .NET 追踪
本指南将向您展示如何在 ASP.NET Core 应用程序中开始使用 OpenTelemetry .NET 追踪。
先决条件
- 在您的计算机上安装了 .NET SDK
创建 ASP.NET Core 应用程序
创建一个新的 ASP.NET Core Web 应用程序
dotnet new web -o aspnetcoreapp
cd aspnetcoreapp
添加 OpenTelemetry 追踪
安装所需的 OpenTelemetry 包
dotnet add package OpenTelemetry.Exporter.Console
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Instrumentation.AspNetCore
使用以下代码更新 Program.cs 文件
using System.Diagnostics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
var builder = WebApplication.CreateBuilder(args);
// Configure OpenTelemetry with tracing and auto-start.
builder.Services.AddOpenTelemetry()
.ConfigureResource(resource => resource
.AddService(serviceName: builder.Environment.ApplicationName))
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddConsoleExporter());
var app = builder.Build();
app.MapGet("/", () => $"Hello World! OpenTelemetry Trace: {Activity.Current?.Id}");
app.Run();
运行应用程序
运行应用程序
dotnet run
浏览到控制台中显示的 URL(例如,https://:5000)。
您应该会在控制台中看到类似以下的追踪输出
Activity.TraceId: c28f7b480d5c7dfc30cfbd80ad29028d
Activity.SpanId: 27e478bbf9fdec10
Activity.TraceFlags: Recorded
Activity.ActivitySourceName: Microsoft.AspNetCore
Activity.DisplayName: GET /
Activity.Kind: Server
Activity.StartTime: 2024-07-04T13:03:37.3318740Z
Activity.Duration: 00:00:00.3693734
Activity.Tags:
server.address: localhost
server.port: 5154
http.request.method: GET
url.scheme: https
url.path: /
network.protocol.version: 2
user_agent.original: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
http.route: /
http.response.status_code: 200
Resource associated with Activity:
service.name: getting-started-aspnetcore
service.instance.id: a388466b-4969-4bb0-ad96-8f39527fa66b
telemetry.sdk.name: opentelemetry
telemetry.sdk.language: dotnet
telemetry.sdk.version: 1.9.0
恭喜!您现在正在 ASP.NET Core 应用程序中使用 OpenTelemetry 收集追踪。
工作原理
OpenTelemetry 注册
应用程序使用 ASP.NET Core 提供的依赖注入容器注册 OpenTelemetry 服务
builder.Services.AddOpenTelemetry()
.ConfigureResource(resource => resource
.AddService(serviceName: builder.Environment.ApplicationName))
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddConsoleExporter());
此代码
- 使用
AddOpenTelemetry()将 OpenTelemetry 添加到服务集合中 - 使用
ConfigureResource()配置带有服务信息的资源 - 使用
WithTracing()设置追踪收集 - 使用
AddAspNetCoreInstrumentation()添加 ASP.NET Core 的自动仪表化 - 配置控制台导出器以将追踪输出到控制台
ASP.NET Core 仪表化
AddAspNetCoreInstrumentation() 方法会自动为 HTTP 请求创建追踪,包括
- 请求持续时间
- HTTP 方法、路由和状态码
- 网络信息
- User agent
这些追踪的收集不需要在您的控制器或中间件中编写任何额外代码。
访问当前 Activity
在 OpenTelemetry .NET 中,Activity 类代表 OpenTelemetry 规范中的“Span”。在我们的示例中,我们访问当前 Activity 以将其 ID 包含在响应中
app.MapGet("/", () => $"Hello World! OpenTelemetry Trace: {Activity.Current?.Id}");
这样您就可以在浏览器中看到追踪 ID,并将其与监控系统中的追踪进行关联。