0Pricing
C# Academy · レッスン

分散トレーシング

Activityでサービス間のリクエストを追跡します。

「分散トレーシング」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

分散トレーシングとは

分散トレーシングは、1つのリクエストがサービスやコンポーネント間を移動する様子を追跡します。各作業単位がスパンになり、関連するスパンがトレースを形成します。トレースは、入れ子になった操作のタイムラインとして可視化されます。

スパンとトレース

スパンには、名前、開始時刻と終了時刻、属性、ステータスがあります。スパンは入れ子になります。親スパン(HTTP リクエスト)に、子スパン(データベースクエリや外部呼び出し)が含まれる形です。1つのツリー全体でトレース IDを共有します。

Activity は .NET のスパン

.NET では、System.Diagnostics.Activityクラスが OpenTelemetry のスパンを実装します。ActivitySourceからアクティビティを作成します。

using System.Diagnostics;

private static readonly ActivitySource Source =
    new("Checkout.Orders");

アクティビティの開始

StartActivityはスパンを開始します。usingで囲むと、ブロックを抜けるときに終了し、実行時間が記録されます。

using Activity activity = Source.StartActivity("PlaceOrder");
// work happens here; span ends when disposed

スパンへのタグの追加

タグ(属性)は、注文 ID や金額などのキーと値のコンテキストをスパンに付加し、トレースを検索しやすく、意味のあるものにします。

activity?.SetTag("order.id", orderId);
activity?.SetTag("order.amount", amount);

イベントとステータスの記録

その時点で発生した注釈にはAddEventを使用し、成功または失敗の印付けにはSetStatusを使用します。これにより、トレーシングバックエンドでエラーを確認できます。

activity?.AddEvent(new ActivityEvent("inventory.reserved"));
activity?.SetStatus(ActivityStatusCode.Error, "Payment declined");

ActivitySource の登録

OTel は、AddSourceで登録したソースのアクティビティだけを収集します。そのため、トレーサーにActivitySourceの名前を知らせる必要があります。

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddSource("Checkout.Orders"));

自動計装

組み込みの計装により、受信した ASP.NET Core リクエストと送信した HttpClient 呼び出しのスパンが自動的に作成されます。コードを書かなくても、基本的なトレースを取得できます。

tracing
    .AddAspNetCoreInstrumentation()
    .AddHttpClientInstrumentation();

コンテキストの伝搬

トレースをサービス間にまたがって追跡するには、トレース ID がサービス間を移動しなければなりません。OTel は送信する HTTP ヘッダー(W3C traceparent)に ID を注入し、受信側で読み取ります。これにより、スパンが自動的に1つのトレースへ結合されます。

親子関係

別のアクティビティが現在の状態にあるときにアクティビティを開始すると、Activity.Currentを介して新しいアクティビティが子になります。この入れ子構造により、手動で接続しなくてもトレースツリーが構築されます。

using var parent = Source.StartActivity("PlaceOrder");
using var child = Source.StartActivity("ChargeCard");
// child is nested under parent automatically

サンプリング

すべてのリクエストをトレースするとコストが高くなる可能性があります。サンプリングでは、一部(たとえば10%)だけを記録し、代表性のあるデータを保ちながらコストを抑えます。

クイックチェック

分散トレーシングを確認します。

まとめ

分散トレーシングでは、トレース ID を共有する関連スパンとして、リクエストを追跡します。.NET では、Activityがスパンに相当し、登録済みのActivitySourceからStartActivityで作成します(終了にはusingを使用します)。SetTag、AddEvent、SetStatusでコンテキストを追加できます。自動計装と W3C コンテキスト伝搬によってサービス間のトレースを結合し、サンプリングでコストを制御します。

よくある質問

「分散トレーシング」レッスンは無料ですか?

はい。「分散トレーシング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「分散トレーシング」で何を学びますか?

Activityでサービス間のリクエストを追跡します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「分散トレーシング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 可観測性の3本柱
  2. 分散トレーシング
  3. メトリクスの収集
  4. バックエンドへのエクスポート
← C# Academyに戻る