入门追踪 - ASP.NET Core

了解如何在 ASP.NET Core 应用程序中使用 OpenTelemetry .NET 追踪

本指南将向您展示如何在 ASP.NET Core 应用程序中开始使用 OpenTelemetry .NET 追踪。

先决条件

创建 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());

此代码

  1. 使用 AddOpenTelemetry() 将 OpenTelemetry 添加到服务集合中
  2. 使用 ConfigureResource() 配置带有服务信息的资源
  3. 使用 WithTracing() 设置追踪收集
  4. 使用 AddAspNetCoreInstrumentation() 添加 ASP.NET Core 的自动仪表化
  5. 配置控制台导出器以将追踪输出到控制台

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,并将其与监控系统中的追踪进行关联。

了解更多