PHP アプリケーション向けに OpenTelemetry と Instana を統合する

OpenTelemetry は、 PHP アプリケーションおよび IBM Instana Observabilityと組み合わせてご利用いただけます。

サポートされる OS

OpenTelemetry この統合機能は、 Linux オペレーティングシステムでのみサポートおよびテストされています。

前提条件

OpenTelemetry を Instana と連携させるには、以下のコンポーネントが必要です:

  • OpenTelemetry PHP 拡張機能
  • 依存関係管理のためのComposer
  • OpenTelemetry SDKおよび計測用ライブラリ
  • 有効な IBM の Instana Observabilityアカウント
  • Instana お使いの環境にエージェントがインストールされ、設定されています
注: これらのコンポーネントは、すべての統合オプションで必要です。

OpenTelemetry との連携設定

OpenTelemetry と Instana を連携させるには、以下のいずれかの方法をご利用いただけます:

  • Instana OpenTelemetry コレクター ( IDOT )の配布: Instana が管理する OpenTelemetry コレクターを使用して、 OpenTelemetry データを受信および処理します。
  • Instana OTLP エンドポイント : OpenTelemetry OTLP のエクスポーターを設定し、 OTel のデータを Instana のエージェントまたは Instana のバックエンド OTLP エンドポイントに直接送信するようにします。
  • Instana OpenTelemetry PHP エクスポーター : OTel のスパンを Instana のネイティブスパンに変換し、 Instana のネイティブトランスポート層を利用する、専用の Instana OpenTelemetry PHP エクスポーターを使用します。

オプション 1: Instana を使用した OpenTelemetry コレクターの配布

「 Instana 」の「 OpenTelemetry Collector」( IDOT )ディストリビューションは、「 OpenTelemetry Collector」のフルマネージドかつ事前設定済みのバージョンであり、「 Instana 」のオブザーバビリティ・プラットフォームとシームレスに統合されます。

PHP アプリケーションからテレメトリデータを収集するには、以下の手順に従って IDOT を設定および構成してください:

  1. コレクターのインストール:インフラストラクチャの要件に応じて、 OpenTelemetry Collectorの Instana ディストリビューションをサイドカー、デーモン、またはゲートウェイとしてデプロイします。 IDOT コレクターの設定に関する詳細な手順については、 OpenTelemetry コレクターのドキュメント( Instana ) をご覧ください。

  2. PHP アプリケーションの設定: PHP アプリケーションを設定し、 OpenTelemetry のデータを Instana コレクターに送信するようにします:

    OTEL_PHP_AUTOLOAD_ENABLED=true
    OTEL_SERVICE_NAME=your_service_name
    OTEL_TRACES_EXPORTER=otlp
    OTEL_EXPORTER_OTLP_PROTOCOL=grpc
    OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:24317
    OTEL_PROPAGATORS=instana,tracecontext
    

オプション 2: Instana および OTLP のエンドポイントを使用する

デフォルトの OpenTelemetry Protocol ( OTLP ) エクスポーターを設定し、 OpenTelemetry のトレースを Instana エージェントまたは Instana バックエンドに直接送信するようにすることで、 OpenTelemetry と PHP を連携させることができます。

自動(ノーコード)インスツルメンテーションを有効にする

環境変数を設定することで自動インスツルメンテーションを有効にでき、これにより OpenTelemetry がサポートされている PHP ライブラリを自動的にトレースできるようになります。

参考までに、 こちらのデモアプリケーションをご覧ください: WordPress PHP。このアプリケーションでは、 OpenTelemetry PHP のノーコード・インストルメンテーション機能と、 OpenTelemetry と Instana の連携機能を紹介しています。

以下の最低限の環境変数を設定することで、自動インスツルメンテーションを有効にできます:

変数 説明
OTEL_PHP_AUTOLOAD_ENABLED OpenTelemetrytrue のゼロコード・インストルメンテーションを有効にするには、[設定] に設定してください
OTEL_SERVICE_NAME インフラストラクチャの相関分析用の論理サービス名
OTEL_TRACES_EXPORTER 必ず設定する必要があります otlp
OTEL_EXPORTER_OTLP_PROTOCOL http/protobufgrpcまたは を選択してください http/json
OTEL_EXPORTER_OTLP_ENDPOINT URL OTLP エンドポイントの Instana エージェントまたはバックエンドのいずれか

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=wordpress_otel_instrumentation
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_PROPAGATORS=instana,tracecontext

これらの設定が完了すると、 PHP アプリケーションを起動でき、そこから生成される OpenTelemetry のトレースが Instana のUIに表示されます。

また、 PHP アプリケーションを設定し、 OTLP エンドポイントを使用して、 OpenTelemetry のトレースを Instana エージェントまたはバックエンドに直接送信することも可能です。

OTLP エンドポイントにデータを送信する

Instana エージェントは、 PHP アプリケーションから直接 OpenTelemetry データを受信できる OTLP エンドポイントを提供します。

Instana エージェントの OTLP エンドポイントにデータを送信するには、 PHP アプリケーションを次のように設定してください:

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=your_service_name
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_PROPAGATORS=instana,tracecontext

バックエンドの OTLP エンドポイントにデータを送信する

Instana エージェントとの直接通信が不可能な環境では、 PHP アプリケーションを設定して、 OpenTelemetry のデータを Instana バックエンドに直接送信するようにすることができます。

詳細については、 「 OpenTelemetry のデータを Instana に送信する」 を参照してください。

Instana バックエンドの OTLP エンドポイントにデータを送信するには、 PHP アプリケーションを次のように設定してください:

OTEL_PHP_AUTOLOAD_ENABLED=true
OTEL_SERVICE_NAME=your_service_name
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT="https://{instana-backend-otlp-acceptor-endpoint}":4317"
OTEL_EXPORTER_OTLP_HEADERS="x-instana-key:=apiToken {your-api-token}"
OTEL_PROPAGATORS=instana,tracecontext

{region} 、ご自身の Instana のリージョンに {your-api-token} 、を、ご自身の Instana の API トークンに置き換えてください。

手動計測の設定

以下の場合は、 OpenTelemetry SDK を使用してアプリケーションに手動で計測機能を組み込む必要があります:

  • OTel または Instana でサポートされている PHP ライブラリのインストルメンテーションを使用していません。
  • PHP のTracerライブラリの機能を拡張したいと考えています。
  • アプリケーションへの計測機能の導入について、よりきめ細かな制御が必要です。

手動による計測設定を行うには、以下の手順を実行してください:

  1. OpenTelemetry、 API、およびSDKパッケージをインストールします。
    composer require open-telemetry/sdk
    composer require open-telemetry/api
    
  2. OpenTelemetry PHP 手動計測に関するドキュメントに従って、必要な手動 OpenTelemetry 計測を PHP コードに追加してください。

  3. 分散アプリケーションには、 OpenTelemetry トレースコンテキストプロパゲーターを選択してください。 Instana トレースの伝播において、 W3C のトレースヘッダーおよび Instana のネイティブヘッダーをサポートしています。

    • Instana プロパゲーターの使用

      OTEL_PROPAGATORS=instana
      
    • プロパゲーター tracecontext の使用

      OTEL_PROPAGATORS=tracecontext
      

    プロパゲーターを使用することで、 Instana は、 OpenTelemetry のスパンやその他の Instana のスパンを、アプリケーションの単一のトレースに統合することができます。

    分散トレーシングの計測例に関する詳細については、 「分散トレーシングでのコンテキスト伝播の有効化」 を参照してください。

次の簡単な例は、親スパンと子スパンを用いた手動によるインストルメンテーションを示しています:


use OpenTelemetry\SDK\Registry;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\API\Trace\SpanKind;

$tracerProvider = new TracerProvider(
   new SimpleSpanProcessor(
      Registry::spanExporterFactory("otlp")->create()
      )
    );
$tracer = $tracerProvider->getTracer('test');
$rootSpan = $tracer->spanBuilder('rootSpan')->startSpan();
$scope = $rootSpan->activate();

// Do some work
sleep(1);
// Create a child span (automatically becomes a child of the active span)
$childSpan = $tracer->spanBuilder('child-operation')
    ->startSpan();
$childScope = $childSpan->activate();
$childSpan->end();
$childScope->detach();

// Do more work
sleep(1);

// Add string attribute
$rootSpan->setAttribute('string.attribute', 'value');
$scope->detach();
$rootSpan->end();
$tracerProvider->shutdown();

OpenTelemetry Instana 増殖業者

「 OpenTelemetry 」 の「 Instana 」用プロパゲーターは、「 HTTP 」ヘッダーのプロパゲーションとバゲッジのプロパゲーションを提供し、「 PHP 」アプリケーションで使用されます。 このプロパゲーターは、 Instana のトレース相関ヘッダーを (X-INSTANA-T/X-INSTANA-S/X-INSTANA-L)OpenTelemetry に変換し、 OpenTelemetrySpanContextSpanContext を Instana ヘッダーに変換します。

ここでは、 Instana コンテキストプロパゲータを使用した手動による計測を実演する、シンプルな分散型 PHP アプリケーションのサンプルをご覧いただけます。

注:Instana プロパゲーターは、親となるspan要素を持たないヘッダー TraceState を処理しません。

プロパゲーターの設置

Composer を使用して Instana propagator 拡張機能をインストールするには、次のコマンドを実行してください:

composer require open-telemetry/opentelemetry-propagation-instana

プロパゲーターの使用方法

Instana プロパゲーターは、extractメソッドとinjectメソッドの両方を使用して、トレースコンテキストをヘッダーから抽出およびヘッダーに挿入します。 プロパゲータは、以下の方法でインスタンス化できます:

  • Instana プロパゲータークラスのインスタンス化。
$propagator = InstanaPropagator::getInstance();
  • 環境変数の使用
OTEL_PROPAGATORS=instana,baggage

Baggageの伝播を行うには、 OpenTelemetry を使用 MultiTextMapPropagatorし、次のように Instana やbaggageプロパゲータなどのプロパゲータの配列リストを渡します:

$propagator = new MultiTextMapPropagator([InstanaPropagator::getInstance(), BaggagePropagator::getInstance()]);

オプション 3: Instana、 OpenTelemetry、 PHP Exporter の使用

Instana OpenTelemetry PHP Exporter は、 OpenTelemetry のスパンを Instana のネイティブスパンに変換し、 Instana のネイティブ転送レイヤーを使用して、トレースを Instana のバックエンドに転送する専用のエクスポーターです。

Instana OpenTelemetry PHP エクスポーターのインストール、設定、および使用方法の詳細については、 OpenTelemetry PHP エクスポーター を参照してください。