跳到主要内容

OpenTelemetry .NET实现

介绍

OpenTelemetry是一个开源的观测性框架,用于生成、收集和管理遥测数据(如追踪、指标和日志)。它支持多种编程语言,包括.NET。本文将介绍如何在.NET应用程序中使用OpenTelemetry,帮助初学者快速上手。

备注

OpenTelemetry是CNCF(云原生计算基金会)的项目,旨在提供统一的API和工具链,简化分布式系统的观测性。

安装与配置

1. 添加NuGet包

首先,为你的.NET项目添加必要的OpenTelemetry NuGet包。以下是常用的包:

bash
dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Exporter.Console
dotnet add package OpenTelemetry.Extensions.Hosting

2. 基本配置

Program.cs中配置OpenTelemetry:

csharp
using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

// 配置OpenTelemetry
builder.Services.AddOpenTelemetry()
.WithTracing(tracerProviderBuilder =>
{
tracerProviderBuilder
.AddSource("MyApplication")
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyApplication"))
.AddAspNetCoreInstrumentation()
.AddConsoleExporter();
});

var app = builder.Build();

核心概念

1. 追踪(Tracing)

追踪用于记录请求在分布式系统中的流转路径。以下是一个简单的示例:

csharp
using System.Diagnostics;

var activitySource = new ActivitySource("MyApplication");

app.MapGet("/hello", () =>
{
using var activity = activitySource.StartActivity("SayHello");
activity?.SetTag("greeting", "Hello, World!");
return "Hello, OpenTelemetry!";
});

2. 指标(Metrics)

指标用于记录系统的性能数据,如请求速率、错误率等:

csharp
using OpenTelemetry.Metrics;

builder.Services.AddOpenTelemetry()
.WithMetrics(metricsProviderBuilder =>
{
metricsProviderBuilder
.AddMeter("MyApplication.Metrics")
.AddConsoleExporter();
});

实际案例

场景:监控ASP.NET Core API

假设你有一个简单的API,需要监控请求延迟和错误:

csharp
app.MapGet("/products", async () =>
{
using var activity = activitySource.StartActivity("GetProducts");
try
{
// 模拟数据库查询
await Task.Delay(100);
return Results.Ok(new[] { "Product1", "Product2" });
}
catch (Exception ex)
{
activity?.RecordException(ex);
throw;
}
});

输出示例

运行程序后,控制台会显示类似以下的追踪数据:

plaintext
Activity.Id:          00-abcdef1234567890abcdef1234567890-0123456789abcdef-01
Activity.DisplayName: GetProducts
Activity.Kind: Internal
Activity.StartTime: 2023-10-01T12:00:00.0000000Z
Activity.Duration: 00:00:00.1000000

总结

通过本文,你学会了:

  1. 如何在.NET中安装和配置OpenTelemetry。
  2. 如何使用追踪和指标监控应用程序。
  3. 如何在实际场景中应用OpenTelemetry。

附加资源

练习

  1. 尝试为你的.NET应用程序添加OpenTelemetry,并导出数据到控制台。
  2. 扩展示例,记录自定义指标(如请求计数)。
  3. 探索如何将数据导出到Jaeger或Prometheus。