SDK

OpenTelemetry SDK は API の実用的な実装を提供し、さまざまな方法でセットアップおよび設定できます。

手動セットアップ

SDK を手動でセットアップすると、SDK の設定を最も細かく制御できます。

<?php
$exporter = new InMemoryExporter();
$meterProvider = new NoopMeterProvider();
$tracerProvider =  new TracerProvider(
    new BatchSpanProcessor(
        $exporter,
        Clock::getDefault(),
        2048, //最大キューサイズ
        5000, //スケジュールされた遅延(ミリ秒)
        5000, //エクスポートタイムアウト
        1024, //最大バッチサイズ
        true, //自動フラッシュ
        $meterProvider
    )
);

SDK ビルダー

SDK ビルダーは SDK の各部分を設定するための便利なインターフェイスを提供します。 ただし、手動セットアップがサポートするすべての機能をサポートしているわけではありません。

<?php

$spanExporter = new InMemoryExporter(); //デモ用のモックエクスポーター

$meterProvider = MeterProvider::builder()
    ->addReader(
        new ExportingReader(new MetricExporter((new StreamTransportFactory())->create(STDOUT, 'application/x-ndjson'), /*Temporality::CUMULATIVE*/))
    )
    ->build();

$tracerProvider = TracerProvider::builder()
    ->addSpanProcessor(
        (new BatchSpanProcessorBuilder($spanExporter))
            ->setMeterProvider($meterProvider)
            ->build()
    )
    ->build();

$loggerProvider = LoggerProvider::builder()
    ->addLogRecordProcessor(
        new SimpleLogsProcessor(
            (new ConsoleExporterFactory())->create()
        )
    )
    ->setResource(ResourceInfo::create(Attributes::create(['foo' => 'bar'])))
    ->build();

Sdk::builder()
    ->setTracerProvider($tracerProvider)
    ->setLoggerProvider($loggerProvider)
    ->setMeterProvider($meterProvider)
    ->setPropagator(TraceContextPropagator::getInstance())
    ->setAutoShutdown(true)
    ->buildAndRegisterGlobal();

オートローディング

SDK は composer のオートローディングの一部として自動的に設定し、グローバルに登録できます。 唯一の要件は OTEL_PHP_AUTOLOAD_ENABLED=true を設定することです。 設定はさまざまな方法で提供できます。

環境設定

環境変数(または対応する php.ini 設定)で、SDK の設定に記載されている必要な設定や標準外の設定を提供できます。

たとえば、以下のように設定します。

OTEL_PHP_AUTOLOAD_ENABLED=true \
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 \
php example.php
<?php
require 'vendor/autoload.php'; //SDKのオートローディングはcomposerの初期化の一部として実行される

$tracer = OpenTelemetry\API\Globals::tracerProvider()->getTracer('name', 'version', 'schema.url', [/*attributes*/]);
$meter = OpenTelemetry\API\Globals::meterProvider()->getMeter('name', 'version', 'schema.url', [/*attributes*/]);

宣言的設定

PHP は OpenTelemetry の実験的な宣言的設定をサポートしており、YAML ファイルを通じて SDK を設定できます。

これを有効にするには、OTEL_CONFIG_FILE=/path/to/config.yaml を設定します。 config.yaml は宣言的設定スキーマに準拠するファイルです。 たとえば、以下のようになります。

config.yaml:

file_format: '0.4'
tracer_provider:
  processors:
    - batch:
        exporter:
          otlp_http:
            endpoint: http://localhost:4318/v1/traces
resource:
  attributes:
    - name: service.name
      value: ${OTEL_SERVICE_NAME}
    - name: service.namespace
      value: my_service_namespace
OTEL_PHP_AUTOLOAD_ENABLED=true \
OTEL_CONFIG_FILE=/path/to/config.yaml
php example.php

OTEL_CONFIG_FILE が存在する場合、オートローダーは提供された設定ファイルで設定を試み、他の環境変数は無視されます。

除外 URL

リクエスト URL が正規表現に一致する場合、SDK のオートローディングを無効にできます。 除外 URL に一致すると、テレメトリーの生成やエクスポートが行われなくなります。 この機能は、Apache や NGINX のようなシェアードナッシング PHP ランタイムで、ヘルスチェックなどのリクエストに対して使用できます。

たとえば、以下の設定は https://site/client/123/infohttps://site/xyz/healthcheck などのリクエストに対してテレメトリーを無効にします。

OTEL_PHP_EXCLUDED_URLS="client/.*/info,healthcheck"

設定

PHP SDK は利用可能な設定オプションのほとんどをサポートしています。 準拠の詳細については、準拠マトリクスを参照してください。

PHP 固有の設定もいくつかあります。

名前デフォルト値説明
OTEL_PHP_TRACES_PROCESSORbatchbatch, simplesimpleスパンプロセッサーの選択
OTEL_PHP_DETECTORSallenv, host, os, process, process_runtime, sdk, sdk_provided, containerenv,os,processリソースディテクターの選択
OTEL_PHP_AUTOLOAD_ENABLEDfalsetrue, falsetrueSDK オートローディングの有効化/無効化
OTEL_PHP_LOG_DESTINATIONdefaulterror_log, trigger_error, stderr, stdout, psr3, nonestderr内部エラーと警告の送信先。error_logtrigger_error は同名の PHP 関数に対応
OTEL_PHP_INTERNAL_METRICS_ENABLEDfalsetrue, falsetrueSDK が内部状態に関するメトリクスを出力するかどうか(たとえば、バッチプロセッサー)
OTEL_PHP_DISABLED_INSTRUMENTATIONS[]計装名、または allpsr15,psr18インストールされた自動計装を1つ以上無効にする
OTEL_PHP_EXCLUDED_URLS``カンマ区切りの正規表現パターンclient/.*/info,healthcheckリクエスト URL が指定された正規表現のいずれかに一致する場合、SDK を読み込まない
OTEL_PHP_DEBUG_SCOPES_DISABLEDfalsetrue, falsetrueスコープのデタッチデバッグの有効化/無効化
OTEL_PHP_EXPERIMENTAL_AUTO_ROOT_SPANfalsetrue, falsetruecomposer のオートローディング中にルートスパンを開始する

設定は環境変数、または php.ini(もしくは php.ini にインクルードされるファイル)で提供できます。

OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317