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 を設定および構成してください:
コレクターのインストール:インフラストラクチャの要件に応じて、 OpenTelemetry Collectorの Instana ディストリビューションをサイドカー、デーモン、またはゲートウェイとしてデプロイします。 IDOT コレクターの設定に関する詳細な手順については、 OpenTelemetry コレクターのドキュメント( Instana ) をご覧ください。
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/protobuf、 grpcまたは を選択してください 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ライブラリの機能を拡張したいと考えています。
- アプリケーションへの計測機能の導入について、よりきめ細かな制御が必要です。
手動による計測設定を行うには、以下の手順を実行してください:
- OpenTelemetry、 API、およびSDKパッケージをインストールします。
composer require open-telemetry/sdk composer require open-telemetry/api OpenTelemetry PHP 手動計測に関するドキュメントに従って、必要な手動 OpenTelemetry 計測を PHP コードに追加してください。
分散アプリケーションには、 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 アプリケーションのサンプルをご覧いただけます。
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 エクスポーター を参照してください。