OpenTelemetry .NET のリソース
リソースは、リソース属性としてテレメトリーを生成するエンティティを表します。 たとえば、Kubernetes上のコンテナで実行されているテレメトリーを生成するプロセスは、プロセス名、ポッド名、ネームスペース、および場合によってはデプロイメント名を持ちます。 これらの4つの属性すべてをリソースに含まれることができます。
オブザーバビリティバックエンドでは、リソース情報を使用して興味深い動作をより詳細に調査できます。 たとえば、トレースまたはメトリクスデータがシステムのレイテンシーを示している場合、それを特定のコンテナ、ポッド、またはKubernetesデプロイメントに絞り込むことができます。
リソースとは
OpenTelemetry において、リソースはテレメトリーを生成するエンティティのイミュータブルな表現です。 たとえば、リソースは Kubernetes コンテナ、Linux や Windows のプロセス、あるいはプロセス内で実行されているアプリケーションを表すことができます。
リソースは OpenTelemetry の基本的な概念であり、テレメトリーデータのソースを記述するために使用されます。 この情報はテレメトリーデータのデバッグや分析に役立ちます。
リソース属性
リソース属性は、リソースに関するメタデータを提供するキーと値のペアです。 OpenTelemetry はリソース属性のセマンティック規約を定義しており、該当する場合にはこれを使用すべきです。
一般的なリソース属性には次のものがあります。
service.name: テレメトリーを生成するサービスの名前service.version: サービスのバージョンservice.namespace: サービスのネームスペースservice.instance.id: サービスインスタンスの一意な識別子host.name: ホストの名前deployment.environment: デプロイ環境(例: 本番、ステージング)
セットアップ
Getting Started の手順に従い、コンソールにデータをエクスポートする .NET アプリケーションを実行できる状態にしてください。
環境変数によるリソースの追加
OTEL_RESOURCE_ATTRIBUTES 環境変数を使用して、アプリケーションにリソースを注入できます。
.NET SDK はこれらのリソースを自動的に検出します。
次の例では、uname などの Unix コマンドを使ってリソースデータを生成し、Service、Host、OS のリソース属性を環境変数で追加しています。
$ env OTEL_RESOURCE_ATTRIBUTES="service.name=resource-tutorial-dotnet,service.namespace=tutorial,service.version=1.0,service.instance.id=`uuidgen`,host.name=`HOSTNAME`,host.type=`uname -m`,os.name=`uname -s`,os.version=`uname -r`" dotnet run
Activity.TraceId: d1cbb7787440cc95b325835cb2ff8018
Activity.SpanId: 2ca007300fcb3068
Activity.TraceFlags: Recorded
Activity.ActivitySourceName: tutorial-dotnet
Activity.DisplayName: SayHello
Activity.Kind: Internal
Activity.StartTime: 2022-10-02T13:31:12.0175090Z
Activity.Duration: 00:00:00.0003920
Activity.Tags:
foo: 1
bar: Hello, World!
baz: [1,2,3]
Resource associated with Activity:
service.name: resource-tutorial-dotnet
service.namespace: tutorial
service.version: 1.0
service.instance.id: 93B14BAD-813D-48EE-9FB1-2ADFD07C5E78
host.name: myhost
host.type: arm64
os.name: Darwin
os.version: 21.6.0
コードによるリソースの追加
ResourceBuilder にリソースをアタッチすることで、コード内でカスタムリソースを追加することもできます。
次の例は、Getting Started のサンプルを基にして、environment.name と team.name という2つのカスタムリソースをコードで追加しています。
using System.Diagnostics;
using System.Collections.Generic;
using OpenTelemetry;
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;
var serviceName = "resource-tutorial-dotnet";
var serviceVersion = "1.0";
var resourceBuilder =
ResourceBuilder
.CreateDefault()
.AddService(serviceName: serviceName, serviceVersion: serviceVersion)
.AddAttributes(new Dictionary<string, object>
{
["environment.name"] = "production",
["team.name"] = "backend"
});
var sourceName = "tutorial-dotnet";
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(sourceName)
.SetResourceBuilder(resourceBuilder)
.AddConsoleExporter()
.Build();
var MyActivitySource = new ActivitySource(sourceName);
using var activity = MyActivitySource.StartActivity("SayHello");
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
この例では、service.name と service.version の値もコードで設定されています。
加えて、service.instance.id にはデフォルト値が設定されます。
環境変数によるリソースの追加と同じコマンドを実行しますが、今回は service.name、service.version、service.instance.id を指定しません。
すると、リソース一覧に environment.name と team.name が表示されます。
$ env OTEL_RESOURCE_ATTRIBUTES="service.namespace=tutorial,host.name=`HOSTNAME`,host.type=`uname -m`,os.name=`uname -s`,os.version=`uname -r`" dotnet run
Activity.TraceId: d1cbb7787440cc95b325835cb2ff8018
Activity.SpanId: 2ca007300fcb3068
Activity.TraceFlags: Recorded
Activity.ActivitySourceName: tutorial-dotnet
Activity.DisplayName: SayHello
Activity.Kind: Internal
Activity.StartTime: 2022-10-02T13:31:12.0175090Z
Activity.Duration: 00:00:00.0003920
Activity.Tags:
foo: 1
bar: Hello, World!
baz: [1,2,3]
Resource associated with Activity:
environment.name: production
team.name: backend
service.name: resource-tutorial-dotnet
service.namespace: tutorial
service.version: 1.0
service.instance.id: 28976A1C-BF02-43CA-BAE0-6E0564431462
host.name: pcarter
host.type: arm64
os.name: Darwin
os.version: 21.6.0
注意: リソース属性を環境変数とコードの両方で設定した場合、コードの値が優先されます。
次のステップ
設定に追加できるリソース検出器は他にもあります。 たとえば、Cloud 環境や Deployment の詳細を取得できます。
さらに学ぶ
OpenTelemetry のリソースについて詳しくは、リソース SDK 仕様を参照してください。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!