PHPにOpenTelemetryを導入する
VaxilaはOpenTelemetryの仕組み (計装)を利用してデータを送信しています。
このページではPHPのデータをVaxilaに送信する方法を解説します。
PHP向けOpenTelemetry
OpenTelemetryにはPHP用のSDKが用意されています。
このSDKに加えて、LaravelやPDO用のSDKを使用すると、既存の実装を変更せずに計装することができます。
Collectorを使用するべきか
Vaxilaを使用する場合、SDKからデータを直接Vaxilaに送信するのではなく、Collectorを使うこともできます。
しかし、PHPの多くのランタイムは全ての処理が終わるまでリクエストをブロッキングするため、直接Vaxilaにデータを送信すると、Vaxilaに送信している時間の分だけリクエストも遅くなってしまいます。
そのため、Collectorを使用して、ユーザーへの返答をできるだけ速くすることを推奨しています。
ただし、fastcgi
の fastcgi_finish_request()
を使用すると、Vaxilaへの送信を待つことなくユーザーにレスポンスを返すことができます。その場合は、直接Vaxilaにデータを送信しても問題になることはないでしょう。
Collectorを使用する方法は、以下のページを参照してください。
導入方法
PHPには複数のWebフレームワークが存在しますが、このページでは Laravel
への導入方法を説明します。
他のフレームワークを使っている場合もほぼ同じ方法で計装することができます。
以下のステップでVaxilaを導入できます。
拡張ライブラリ (PECL) の追加
パッケージの追加
環境変数の設定
独自の計装 (任意)
1. 拡張ライブラリ (PECL) の追加
PECL を使用して OpenTelemetry 用の拡張ライブラリをインストールします。
その後、インストールした拡張を php.ini
に追加します。
2. パッケージの追加
Laravel や PDO用のパッケージを追加します。
このページではLaravelを例にするため opentelemetry-auto-laravel
を使用しています。SlimやSymfonyなど別のフレームワークを使用している場合、それぞれにあったパッケージを、以下のページから検索することができます。
3. 環境変数の設定
パッケージのインストール後、以下の環境変数を設定するとデータがCollectorへ送信されるようになります。
これらの環境変数を、オートロードが開始する前に設定してください。
OTEL_SERVICE_NAME
と OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
の値は各環境にあわせた値へ変更してください。 また、OTEL_TRACES_EXPORTER
を console
に設定すると、データがログに出力されるようになるので、送信が動かない時のデバッグに便利です。
以上で、インストールが完了し、Collectorを通して、Vaxilaにデータが送られるようになりました。
4. 独自の計装 (任意)
独自のSpanを追加することで、任意の範囲を計装することができます。
計装によって、変数の値や処理時間を記録することができるようになります。
具体的には、下のように startSpan
を使用すると計装が追加できます。
計装の方法は他にも用意されています。詳細はOpenTelemetryのドキュメントを参照してください。
最終更新