トレースを始める - コンソール
このガイドでは、コンソールアプリケーションで OpenTelemetry .NET トレースをわずか数分で使い始める方法を紹介します。
前提条件
- コンピューターに .NET SDK がインストールされていること
コンソールアプリケーションの作成
新しいコンソールアプリケーションを作成して実行します。
dotnet new console --output getting-started
cd getting-started
dotnet run
次のような出力が表示されるはずです。
Hello World!
OpenTelemetry トレースの追加
OpenTelemetry コンソールエクスポーターパッケージをインストールします。
dotnet add package OpenTelemetry.Exporter.Console
Program.cs ファイルを次のコードに更新します。
using System;
using System.Diagnostics;
using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
namespace GettingStarted
{
class Program
{
// アクティビティを作成するための ActivitySource を定義する
private static readonly ActivitySource MyActivitySource = new ActivitySource(
"MyCompany.MyProduct.MyLibrary");
static void Main(string[] args)
{
// OpenTelemetry TracerProvider を設定する
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("getting-started"))
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
// タグ(属性)を持つアクティビティ(スパン)を開始する
using (var activity = MyActivitySource.StartActivity("SayHello"))
{
// アクティビティに属性を設定する
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
// アクティビティのステータスを設定する
activity?.SetStatus(ActivityStatusCode.Ok);
// 何らかの処理を行う…
Console.WriteLine("Hello World!");
}
Console.WriteLine("Trace has been exported. Press any key to exit.");
Console.ReadKey();
}
}
}
(dotnet run を使用して)アプリケーションを再度実行すると、コンソールからトレース出力が表示されるはずです。
Activity.TraceId: d4a7d499698d62f0e2317a67abc559b6
Activity.SpanId: a091d18fbe45bdf6
Activity.TraceFlags: Recorded
Activity.ActivitySourceName: MyCompany.MyProduct.MyLibrary
Activity.DisplayName: SayHello
Activity.Kind: Internal
Activity.StartTime: 2022-03-30T19:42:33.5178011Z
Activity.Duration: 00:00:00.0097620
StatusCode : Ok
Activity.Tags:
foo: 1
bar: Hello, World!
baz: [1, 2, 3]
Resource associated with Activity:
service.name: getting-started
これで OpenTelemetry を使用してトレースを収集できるようになりました。
仕組み
ActivitySource(Tracer)
このプログラムは OpenTelemetry の Tracer を表す ActivitySource を作成します。
private static readonly ActivitySource MyActivitySource = new ActivitySource(
"MyCompany.MyProduct.MyLibrary");
ActivitySource は新しいアクティビティを作成して開始するために使用されます。
Activity(Span)
ActivitySource インスタンスを使用して、OpenTelemetry の Span を表す Activity を開始します。
複数のタグ(属性)を設定し、ステータスを設定できます。
using (var activity = MyActivitySource.StartActivity("SayHello"))
{
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
activity?.SetStatus(ActivityStatusCode.Ok);
}
TracerProvider
TracerProvider は、指定されたソースからのアクティビティをサブスクライブしてエクスポートするように設定されます。
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddConsoleExporter()
.Build();
TracerProvider は OpenTelemetry SDK の中核コンポーネントです。 サンプラー、プロセッサー、エクスポーターなど、トレースに関するすべての設定を保持し、高度にカスタマイズ可能です。
トレースパイプライン
OpenTelemetry .NET のトレースパイプラインは次のフローに従います。
- ActivitySource がアクティビティを作成する
- TracerProvider がアクティビティを受信する
- プロセッサーがアクティビティを処理する
- エクスポーターがアクティビティをバックエンドにエクスポートする
OpenTelemetry .NET と .NET Activity API
OpenTelemetry .NET では、OpenTelemetry の仕様にある Tracer と Span のかわりに ActivitySource と Activity という用語が使用されます。
これは、OpenTelemetry .NET のトレースが .NET ランタイムの組み込み診断システムの上に実装されているためです。
System.Diagnostics.DiagnosticSource パッケージに依存することで、アプリケーションを計装できます。
このパッケージは、OpenTelemetry の Span と Tracer の概念をそれぞれ表す Activity クラスと ActivitySource クラスを提供します。
さらに学ぶ
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!