Live:CloudOps Webinars & Hands-on Workshops ·Register ↗
メインコンテンツまでスキップ

トレーシング

.NET は OpenTelemetry トレーシングに対する堅牢なサポートを提供し、開発者に分散システム全体のリクエストフローを監視するための強力なツールを提供します。この実装により、アプリケーションの動作とパフォーマンスのボトルネックに対するエンドツーエンドの可視性が実現されます。

.NET エコシステムでは、OpenTelemetry トレーシングは System.Diagnostics.Activity クラスを中心に構築されています。これは、W3C Trace Context 仕様の .NET 実装です。この業界標準との整合性により、他のサービスや可観測性ツールとの相互運用性が確保されます。

トレースの実装

.NET アプリケーションで OpenTelemetry トレーシングを設定するのは簡単です。

builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddEntityFrameworkCoreInstrumentation()
.AddSource("MyApplication.Tracing")
.AddOtlpExporter());

.NET の OpenTelemetry 実装の主な強みは、自動インストルメンテーションです。ASP.NET Core、HttpClient、gRPC、Entity Framework Core など、多くの一般的なライブラリとフレームワークは、追加のコードを必要とせずにトレースを出力します。これにより、外部呼び出しとデータベース操作を即座に可視化できます。

カスタムトレース

アプリケーションコードでカスタムトレースを作成するには、ActivitySource API を使用します。

// Create a source once and reuse it
private static readonly ActivitySource MyActivitySource =
new("MyApplication.Tracing");

// Create spans for important operations
using var activity = MyActivitySource.StartActivity("ProcessOrder");
activity?.SetTag("orderId", orderId);

// Child operations create nested spans
using var childActivity = MyActivitySource.StartActivity("ValidatePayment");

.NET アプリケーションで OpenTelemetry トレーシングを使用する場合、依存性注入に ActivitySource を登録することがベストプラクティスと考えられています。

// During service configuration
services.AddSingleton(sp => new ActivitySource("MyCompany.MyApplication", "1.0.0"));

// Or create a wrapper service if you need more functionality
services.AddSingleton<TracingService>();

// Then inject it where needed
public class OrderProcessor
{
private readonly ActivitySource _activitySource;

public OrderProcessor(ActivitySource activitySource)
{
_activitySource = activitySource;
}

public void ProcessOrder(Order order)
{
using var activity = _activitySource.StartActivity("ProcessOrder");
activity?.SetTag("orderId", order.Id);

// Processing logic
}
}