分散トレースを使用すると、分散システム全体でのリクエストの全過程を確認できます。PHPエージェントは、いくつかのネイティブPHP関数、および一部のサードパーティHTTPクライアントを分散トレースで自動的に計測します。
- PHP関数
file_get_contents
- PHP関数
curl_exec
およびcurl_multi_exec
- ガズル4、ガズル5、ガズル6
- Drupalの
drupal_http_request function
- Laravelのキュー・ジョブ
PHPエージェントの場合、2種類の分散トレースを提供します(詳細については、 スパンサンプリングの仕組みを参照してください)。
標準(ヘッドベースのサンプリング):トレースが到着する前に、受け入れて分析するトレースの設定パーセンテージを決定します。これにより、トレースがどのように役立つかを確認するための確実な出発点が得られます。PHPエージェント9.21.0以降ではデフォルトでオンになっています。
Infinite Tracing (tailベースサンプリング): 当社のクラウドベースのサービスは、すべてのトレースを受け入れ、それらを並べ替えて最も重要なものを見つけます。 Infinite tracing はすべてのトレースを分析し、最も重要なトレースをサンプリングするための設定オプションを提供します。
標準のディストリビューティッド(分散)トレーシング (ヘッドベースサンプリング) を試したい場合でも、無限トレーシング (テールベースサンプリング) もセットアップしたい場合でも、まず標準トレーシングをセットアップする必要があります。
標準の分散トレース
サービスに エージェントをまだインストールしていない場合、これが標準のディストリビューティッド(分散)トレーシング を設定するための最良の方法です。APM
ヒント
New Relic PHPエージェントをインストールすると、標準のディストリビューティッド(分散)トレーシングがデフォルトでオンになります。 オフにしたい場合は、設定ガイドをご覧ください。
サービスを特定する
どのサービスがリクエストに対応しているかを把握し、各サービスをインストルメント化してトレースデータをNewRelicに送信できるようにします。
トレースを表示
各サービスをAPMエージェントでインストルメント化した後、アプリケーションでトラフィックを生成して、トレースをキャプチャできるようにします。UIでトレースを表示する方法は次のとおりです。
UIでトレースを見つけるための詳細については、以下を参照してください。
無限のトレース
エージェント用の 標準のディストリビューティッド(分散)トレーシングは トレースの最大 APM10% をキャプチャしますが、すべてのデータを分析して最も関連性の高いトレースを見つけたい場合は、 無限トレーシング を設定できます。
始める前に、まず要件を満たしていることを確認してください。
標準ディストリビューティッド(分散)トレーシングのセットアップを完了する
Infinite Tracing セットアップは、標準のディストリビューティッド(分散)トレーシングに基づいて構築されています。 したがって、上記の手順を完了したことを確認してから、トレース オブザーバーのセットアップを続行してください。
トレース オブザーバーをセットアップする
トレースオブザーバーは、すべてのトレースを収集して分析するNewRelicAWSベースのサービスです。トレースオブザーバーの設定の手順に従います。完了したら、トレースオブザーバー情報をここに戻し、次の手順に進んでエージェントを構成します。
無限トレース用にエージェントを構成する
無限トレース構成設定には、標準の分散トレースに加えて、トレースオブザーバーに関する情報が含まれます。サーバー側の構成は、無限トレースでは使用できないことに注意してください。
ヒント
プロキシ設定についてサポートが必要な場合は、 プロキシサポートを参照してください。
(オプション) 無限トレースをカスタマイズする
エージェント構成設定を追加すると、NewRelicUIにデータが表示されるようになります。データの分析に時間を費やした後、無限トレースの機能のいくつかを調整することをお勧めします。
トレースの詳細レベルの設定
分散トレーシングのサポートは、PHPエージェントの トランザクショントレーサー に依存します。 分散トレーシングが有効になっている場合 、 スパン は、トランザクショントレーサーが見る各セグメントに対して作成されます。
スパンがサンプリングされると、PHPエージェントは、外部からの電話に関連するスパンを他のスパンよりも優先し、その期間の降順で記録します。
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以降に更新してください。
PHPエージェントAPIを使用してアプリケーションとサービスを手動でインストルメント化する
重要
W3C トレース コンテキストのサポートは、バージョン 9.8 で追加されました。これにより、アプリケーションを手動で計測するための 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またはinsertのディストリビューティッド(分散)トレーシングデータに変更します
- 他のトランザクションまたはリクエストによって作成されたacceptディストリビューティッド(分散)トレーシング データにサービスまたはアプリケーションを変更します。
次の例では、汎用メッセージ/ジョブ キューを使用します。 実際の詳細は、ディストリビューティッド(分散)トレーシングに追加しようとしているシステムの種類によって異なりますが、中核となる概念は同じです。 また、ここではジョブ キューを例として使用しましたが、これらのメソッドはany分散システム コンポーネントでも使用できます。
ヒント
create a payload または insert headers を実行すると、 New Relicに対して、このリクエストまたはトランザクション、あるいはディストリビューティッド(分散)トレーシングへの参加リクエストが必要であることを伝えます。 これらをacceptすると、現在のリクエストまたはトランザクションがその親リクエストまたはトランザクションにリンクされます。
より詳細な情報を得るため、またはサービス間の接続を確認するために手動でインスツルメンテーションを使用する場合の詳細については、 分散型トレースAPIに関するドキュメント を参照してください。
ヘッダーAPI
ペイロードAPI(非推奨)
コマンドラインPHPプログラム
PHPコマンドラインから実行されるPHPプログラムは、常にエージェントの分散トレーサーによってサンプリングされます。実行するプログラムによっては、これらのプロセスで、分散トレースのコレクションに過剰な表現が見られる場合があります。このような状況では、 newrelic.ini files
のper-directory newrelic.enabled
設定を使用して、コマンドラインインストルメンテーションを無効にすることを選択できます。