重要
PHP Agentバージョン9.21.0.311以降、分散トレースはデフォルトで有効になっており、スパン数はデフォルトで2000、最大で10000に設定できるようになりました。これにより、非推奨となるクロスアプリケーショントレースが置き換えられます。分散トレース設定が取り込みのニーズに対応していることを確認してください。
New Relic の PHP エージェントは、 分散型トレース (PHP エージェント バージョン 9.8 以降、 W3C Trace Context を含む) をサポートしています。これにより、リクエストが分散システムを通過する際の経路を確認することができます。このドキュメントでは、PHP アプリケーションやサービスで分散型トレースを有効にするための PHP 固有のヒントを紹介します。
PHPの分散型トレーシングを有効にする
重要
分散トレースを有効にすると、アプリケーション間のトレースが暗黙的に無効になります。 PHPエージェントは、 クロスアプリケーショントレース構成値を無視し、この値がfalse
に設定されているかのように動作します。
PHP エージェントの分散トレースを有効または無効にするには、以下の手順に従います。
該当する場合は、PHPエージェント をアップデートして、分散型トレーシングをサポートするようにしてください(バージョン8.4以降、ただし、最も完全な機能を得るためにはバージョン9.8以降を推奨します)。
トランザクショントレーサー構成オプションが有効になっていることを確認します(デフォルトは
true
)。newrelic.transaction_tracer.enabled = truedistributed_tracing_enabled
構成オプションを使用してPHPエージェントの分散トレースを有効(または無効)にします。newrelic.distributed_tracing_enabled = trueトランザクショントレーサーの閾値 の値を適切な値に設定する。 推奨。
- すべてのトランザクションを分散トレースの対象にする場合は、この値を
0
秒に設定します。 - 実行時間の長いトランザクションのトレースのみに関心がある場合、またはトランザクションごとにトレースを生成すると許容できないアプリケーションパフォーマンスが発生する場合は、この値を
0
秒より高く設定します。
例えば:
newrelic.transaction_tracer.threshold = 0- すべてのトランザクションを分散トレースの対象にする場合は、この値を
オプションで、W3Cトレースコンテキストトレースのみが必要な場合は、
newrelic.distributed_tracing_exclude_newrelic_header
構成オプションを使用してNew RelicDistributedTracingヘッダーを無効にできます。newrelic.distributed_tracing_exclude_newrelic_header = 1
コンフィグレーションの設定でスパンを有効にします。
newrelic.span_events_enabled = true
エージェントが新しく設定された値を取り込むために、必ずウェブサーバー(またはその他のPHP SAPI)を再起動してください。
インフィニット トレースの有効化
Infinite Tracing (PHP エージェント バージョン 9.12 以降) は、分散型トレーシングを拡張し、New Relic Edge と呼ばれる AWS 上のサービスクラスタで動作するトレースオブザーバーにスパンデータを収集します。PHP エージェントは、すべてのスパンをトレースオブザーバーに送信し、それらをトレースにまとめて New Relic で表示できるようにします。
Infinite Tracingを有効にするには、分散型トレーシングを有効にし、以下の追加設定を行います。
newrelic.span_events_enabled = true
newrelic.infinite_tracing.trace_observer.host=" YOUR_TRACE_OBSERVER_HOST"
自動分散型トレーシング装置の活用
PHPエージェントは、いくつかのネイティブなPHP関数やサードパーティのHTTPクライアントを自動的に計測し、分散されたトレース情報を提供します。これらは以下の通りです。
- PHP関数
file_get_contents
- PHP関数
curl_exec
およびcurl_multi_exec
- ガズル4、ガズル5、ガズル6
- Drupalの
drupal_http_request function
- Laravelのキュー・ジョブ
トレースの詳細レベルの設定
分散トレーシングのサポートは、PHPエージェントの トランザクショントレーサー に依存します。 分散トレーシングが有効になっている場合 、 スパン は、トランザクショントレーサーが見る各セグメントに対して作成されます。
スパンがサンプリングされると、PHPエージェントは、外部呼び出しに関連するスパンを他のスパンよりも優先し、期間の降順で記録されます。トランザクションごとにサンプリングされるスパンの最大数を決定するためのini設定があり、パフォーマンスに影響を与える可能性があります。
PHP関数呼び出しについて報告されている重要でないスパンが多すぎる場合は、 newrelic.transaction_tracer.detail
を0
に設定することで、トランザクショントレーサーの詳細を減らすことができます。次に、 newrelic.transaction_tracer.custom
構成設定またはnewrelic_add_custom_tracer
APIメソッドを使用して、トレースに追加する特定のPHP関数またはメソッドのトレースセグメントとスパンを追加できます。
重要
PHPエージェントバージョン8.4〜8.7の場合:分散トレースが有効になっている場合、これらのバージョンはnewrelic.transaction_tracer.detail
が0
に設定されているかのように動作します(上記のとおり)。その結果、PHP関数呼び出しはスパンを生成しません。 PHP関数呼び出しに関連するスパンを取得するには、バージョン9.0以降に更新してください。
トレースの詳細についてログを調べる
ログとアプリケーションのデータを統合して、トラブルシューティングをより簡単かつ迅速に行うことができます。コンテキストのログでは、エラーとトレースに関連するログメッセージをアプリケーションのUIで直接表示できます。
- Transactionsページでトレースをクリックして、Trace detailsページに移動します。
- トレースの詳細ページで、See logsをクリックします。
- 各ログメッセージに関連する詳細を表示するには、メッセージを直接クリックしてください。
また、Kubernetesクラスターなどのインフラストラクチャデータのコンテキストでログを表示することもできます。別のUIページに切り替える必要はありません。
アプリケーションやサービスを手動でインストルメントする
重要
バージョン9.8では、W3C Trace Contextのサポートが追加されました。これに伴い、アプリケーションを手動でインストルメントするためのAPIは、JSONペイロード関連の関数から
newrelic_create_distributed_trace_payload()
および newrelic_accept_distributed_trace_payload($payload),
ヘッダー配列フォームnewrelic_insert_distributed_trace_headers($outbound_headers)
およびnewrelic_accept_distributed_trace_headers($inbound_headers)
に。
JSON関数は現在、非推奨とされており、将来のリリースで削除される予定です。
サポートされていないライブラリを使用している場合や、HTTPベースではない分散システムコンポーネント(メッセージングキューなど)を使用している場合は、PHPエージェントAPIを使用して、分散トレースに含めるべきトランザクションを手動で特定することができます。これは、2つのステップで行います。
- サービスやアプリケーションを変更して、 create or insert 分散型トレースデータ
- 他のトランザクションやリクエストによって作成された 分散型トレースデータを受け入れるように、サービスやアプリケーションを変更します。
以下の例では、一般的なメッセージ/ジョブキューを使用しています。実際の詳細は、分散トレースにどのようなシステムを追加しようとしているかによって異なりますが、基本的なコンセプトは同じです。また、ジョブキューを例に挙げましたが、これらのメソッドは 任意の 分散システムコンポーネントに使用することができます。
ヒント
ペイロードの作成 や ヘッダーの挿入 では、このリクエストやトランザクション、リクエストを分散型トレースに参加させたいことを New Relic に伝えています。 accept とすると、現在のリクエストやトランザクションとその親のリクエストやトランザクションをリンクさせていることになる。
より詳細な情報を得るため、またはサービス間の接続を確認するために手動でインスツルメンテーションを使用する場合の詳細については、 分散型トレースAPIに関するドキュメント を参照してください。
ヘッダーAPI
ペイロードAPI(非推奨)
コマンドラインPHPプログラム
PHPコマンドラインから実行されるPHPプログラムは、常にエージェントの分散トレーサーによってサンプリングされます。実行するプログラムによっては、これらのプロセスで、分散トレースのコレクションに過剰な表現が見られる場合があります。このような状況では、 newrelic.ini files
のper-directory newrelic.enabled
設定を使用して、コマンドラインインストルメンテーションを無効にすることを選択できます。