エクスポーター
OpenTelemetryコレクターにテレメトリーを送信し、正しくエクスポートされることを確認してください。 本番環境でコレクターを使用することはベストプラクティスです。 テレメトリーを可視化するために、Jaeger、Zipkin、 Prometheus、またはベンダー固有のようなバックエンドにエクスポートしてください。
使用可能なエクスポーター
レジストリには、PHP 用のエクスポーターのリストが含まれています。
エクスポーターの中でも、OpenTelemetry Protocol (OTLP)エクスポーターは、OpenTelemetryのデータモデルを考慮して設計されており、OTelデータを情報の損失なく出力します。 さらに、多くのテレメトリーデータを扱うツールがOTLPに対応しており(たとえば、Prometheus、Jaegerやほとんどのベンダー)、必要なときに高い柔軟性を提供します。 OTLPについて詳細に学習したい場合は、OTLP仕様を参照してください。
このページでは、主要なOpenTelemetry PHP エクスポーターとその設定方法について説明します。
ゼロコード計装を使用している場合は、 ゼロコード設定でエクスポーターをセットアップできます。
OTLP
トレースデータを OTLP エンドポイント(Collector や Jaeger など)に送信するには、open-telemetry/exporter-otlp パッケージと psr/http-client-implementation を満たす HTTP クライアントが必要です。
composer require \
open-telemetry/exporter-otlp \
php-http/guzzle7-adapter
gRPC エクスポーターを使用するには、open-telemetry/transport-grpc パッケージと grpc エクステンションもインストールする必要があります。
pecl install grpc
composer require open-telemetry/transport-grpc
次に、OTLP エンドポイントを指定してエクスポーターを設定します。 例:
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\API\Signals;
use OpenTelemetry\Contrib\Grpc\GrpcTransportFactory;
use OpenTelemetry\Contrib\Otlp\OtlpUtil;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new GrpcTransportFactory())->create('http://jaeger:4317' . OtlpUtil::method(Signals::TRACE));
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/x-protobuf');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/json');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer->spanBuilder('example')->startSpan()->end();
<?php
require __DIR__ . '/vendor/autoload.php';
use OpenTelemetry\Contrib\Otlp\OtlpHttpTransportFactory;
use OpenTelemetry\Contrib\Otlp\SpanExporter;
use OpenTelemetry\SDK\Trace\SpanProcessor\SimpleSpanProcessor;
use OpenTelemetry\SDK\Trace\TracerProvider;
$transport = (new OtlpHttpTransportFactory())->create('http://jaeger:4318/v1/traces', 'application/x-ndjson');
$exporter = new SpanExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($exporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer->spanBuilder('example')->startSpan()->end();
次に、スパンを生成するために以下のコードを追加します。
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
$tracer
->spanBuilder('example')
->startSpan()
->end();
上記の例を試すには、Docker コンテナで Jaeger を実行します。
docker run -d --name jaeger \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 9411:9411 \
jaegertracing/jaeger:latest
Zipkin
トレースの可視化に Zipkin を使用する場合は、まず Zipkin をセットアップする必要があります。 以下は、ローカルで Docker コンテナとして実行する方法です。
docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin
エクスポーターパッケージをアプリケーションの依存関係としてインストールします。
composer require open-telemetry/exporter-zipkin
Zipkin エクスポーターを使用し、Zipkin バックエンドにデータを送信するように例を更新します。
$transport = \OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory::discover()
->create('http://zipkin:9411/api/v2/spans', 'application/json');
$zipkinExporter = new ZipkinExporter($transport);
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor($zipkinExporter)
);
$tracer = $tracerProvider->getTracer('io.opentelemetry.contrib.php');
エクスポートの遅延を最小限にする
ほとんどの PHP ランタイムは同期実行であり、処理をブロックします。 テレメトリーデータの送信は HTTP レスポンスがユーザーに届くまでの時間を遅延させる可能性があります。
fastcgi を使用している場合は、ユーザーへのレスポンス送信後に fastcgi_finish_request() を呼び出すことで、テレメトリーデータの送信による遅延がリクエスト処理を妨げないようにできます。
テレメトリーデータの転送が遅い場合(特に外部やクラウドベースのバックエンド向け)の影響を最小限に抑えるには、OpenTelemetry Collector をエージェントとして使用することを検討してください。 エージェントはテレメトリーデータを素早く受け取り、バッチ処理してバックエンドに送信できます。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!