リソース

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

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

リソース検出

PHP SDKはさまざまなソースからリソースを検出し、デフォルトでは利用可能なすべてのリソース検出器を使用します。

  • 環境変数(OTEL_RESOURCE_ATTRIBUTES、OTEL_SERVICE_NAME)
  • ホスト情報
  • ホストオペレーティングシステム
  • 現在のプロセス
  • ランタイム

リソース検出の無効化

デフォルトではすべてのSDKリソース検出器が使用されますが、環境変数 OTEL_PHP_DETECTORS を使用して特定の検出器のみを有効にしたり、完全に無効にしたりできます。

  • env
  • host
  • os
  • process
  • process_runtime
  • sdk
  • sdk_provided
  • all - すべてのリソース検出器を有効にする
  • none - リソース検出を無効にする

たとえば、env、host、sdk 検出器のみを有効にするには次のようにします。

env OTEL_PHP_DETECTORS=env,host,sdk \
php example.php

カスタムリソース検出器

汎用プラットフォームやベンダー固有の環境向けのリソース検出器は、composerパッケージとしてインストールできます。

たとえば、container リソース検出器をインストールして有効にするには次のようにします。

composer require open-telemetry/detector-container
env OTEL_PHP_RESOURCE_DETECTORS=container \
php example.php

インストールされた検出器は、デフォルトの all リソース検出器リストに自動的に含まれることに注意してください。

環境変数によるリソースの追加

必要なリソースに対応するSDK検出器がない場合、env 検出器が解釈する OTEL_RESOURCE_ATTRIBUTES 環境変数を使用して任意のリソースを追加できます。 この変数はカンマ区切りのキー=値ペアのリストを受け取ります。 たとえば次のようにします。

env OTEL_RESOURCE_ATTRIBUTES="service.name=my_service,service.namespace=demo,service.version=1.0,deployment.environment=development" \
php example.php

コードでのリソースの追加

カスタムリソースはコード内でも設定できます。 ここでは、デフォルトのリソース(前述のとおり検出されたもの)がカスタムリソースとマージされます。 リソースはトレーサープロバイダーに渡され、生成されたすべてのスパンに関連付けられます。

$resource = ResourceInfoFactory::defaultResource()->merge(ResourceInfo::create(Attributes::create([
    ResourceAttributes::SERVICE_NAMESPACE => 'foo',
    ResourceAttributes::SERVICE_NAME => 'bar',
    ResourceAttributes::SERVICE_INSTANCE_ID => 1,
    ResourceAttributes::SERVICE_VERSION => '0.1',
    ResourceAttributes::DEPLOYMENT_ENVIRONMENT_NAME => 'development',
])));

$tracerProvider =  new TracerProvider(
    new SimpleSpanProcessor(
        (new ConsoleSpanExporterFactory())->create()
    ),
    null,
    $resource
);