OpenTelemetry .NET自动检测
介绍
OpenTelemetry是一个开源的观测性框架,用于生成、收集和管理遥测数据(如指标、日志和追踪)。自动检测(Auto-Instrumentation)是其核心功能之一,允许开发者无需修改代码即可为应用程序添加观测能力。对于.NET开发者,这尤其有用,因为它可以自动捕获ASP.NET Core、HTTP请求、数据库 调用等常见操作的遥测数据。
备注
自动检测通过预定义的库和适配器工作,动态注入观测代码,减少手动插桩的工作量。
工作原理
OpenTelemetry .NET自动检测基于以下组件实现:
- Instrumentation Libraries:预定义的库(如
OpenTelemetry.Instrumentation.AspNetCore
)负责拦截特定操作(如HTTP请求)。 - 活动监听:利用.NET的
Activity
和DiagnosticSource
机制监听应用内部事件。 - 导出器:将收集的数据发送到后端系统(如Jaeger、Prometheus)。
配置步骤
1. 安装必要的NuGet包
在.NET项目中添加以下包:
dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Instrumentation.AspNetCore
dotnet add package OpenTelemetry.Exporter.Console
2. 配置自动检测
在Program.cs
中启用自动检测:
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;
var builder = WebApplication.CreateBuilder(args);
// 配置OpenTelemetry
builder.Services.AddOpenTelemetry()
.WithTracing(tracerProviderBuilder =>
{
tracerProviderBuilder
.AddSource("MyApplication")
.SetResourceBuilder(ResourceBuilder.CreateDefault()
.AddService("MyService"))
.AddAspNetCoreInstrumentation() // ASP.NET Core自动检测
.AddConsoleExporter(); // 输出到控制台
});
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
3. 验证输出
启动应用并访问/
端点,控制台会显示类似以下的追踪数据:
Activity.TraceId: abc123
Activity.SpanId: def456
Activity.ParentSpanId: 000000
Activity.DisplayName: /
Activity.Kind: Server