リソース

リソースは、リソース属性としてテレメトリーを生成するエンティティを表します。 たとえば、Kubernetes上のコンテナで実行されているテレメトリーを生成するOTP リリースは、OTP リリース名、ポッド名、ネームスペース、および場合によってはデプロイメント名を持ちます。 これらの4つの属性すべてをリソースに含めることができます。

オブザーバビリティバックエンドでは、リソース情報を使用して興味深い動作をより詳細に調査できます。 たとえば、トレースまたはメトリクスデータがシステムのレイテンシーを示している場合、それを特定のコンテナ、ポッド、またはKubernetesデプロイメントに絞り込むことができます。

リソース検出器の使用

リソース検出器はさまざまなソースからリソース属性を取得します。 デフォルトの検出器は、OS 環境変数 OTEL_RESOURCE_ATTRIBUTES と opentelemetry OTP アプリケーション環境変数 resource を使用します。

使用する検出器はモジュール名のリストであり、アプリケーション設定で構成できます。

%% sys.config
{opentelemetry, {resource_detectors, [otel_resource_env_var, otel_resource_app_env]}}
## runtime.exs
config :opentelemetry, resource_detectors: [:otel_resource_env_var, :otel_resource_app_env]

または、環境変数 OTEL_RESOURCE_DETECTORS を使用します。

OTEL_RESOURCE_DETECTORS=otel_resource_env_var,otel_resource_app_env

すべてのリソース検出器はタイムアウト(ミリ秒単位)で保護されており、タイムアウト後は空の値を返します。 これにより、リソース検出器がネットワークアクセスのような処理を行う際に、プログラム全体が無期限にハングする可能性を防ぎます。 デフォルトは5000ミリ秒で、環境変数 OTEL_RESOURCE_DETECTOR_TIMEOUT またはアプリケーション変数 otel_resource_detector_timeout で設定できます。

OS および OTP アプリケーション環境変数によるリソースの追加

2つのデフォルトリソース検出器が有効な状態で、OS 環境変数 OTEL_RESOURCE_ATTRIBUTES を使ってリソース属性を設定できます。

OTEL_RESOURCE_ATTRIBUTES="deployment.environment=development"

または、sys.config や runtime.exs の opentelemetry アプリケーション設定にある resource OTP アプリケーション環境変数を使用します。

%% sys.config
{opentelemetry, {resource, #{deployment => #{environment => <<"development">>}}}}
## runtime.exs
config :opentelemetry, resource: %{deployment: %{environment: "development" }}

resource OTP アプリケーション環境変数内のリソース属性はフラット化され、. で結合されます。 そのため、#{deployment => #{environment => <<"development">> } は #{'deployment.environment' => <<"development">>} と同じです。

カスタムリソース検出器

カスタムリソース検出器は、otel_resource_detector ビヘイビアを実装することで作成できます。 このビヘイビアには、otel_resource を返す単一のコールバック get_resource/1 が含まれています。

新しいリソース属性を追加する際に該当する場合は、resource に対して定義されているセマンティック規約に従うべきであることに注意してください。