分散トレースを使用すると、分散システム全体でのリクエストの全過程を確認できます。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以降ではデフォルトでオンになっています。
- 無限トレース(テールベースのサンプリング):当社のクラウドベースのサービスは、すべてのトレースを受け入れ、それらをソートして最も重要なものを見つけます。標準トレースを設定した後、このオプションを追加することをお勧めします。これは、すべてのトレースを分析し、最も重要なトレースをサンプリングするための構成オプションを提供するためです。
分散トレースを開始するために必要なすべての手順は、次のとおりです。
- 新しいPHPエージェント:新しいエージェントのインストールのためのヘッドベースおよびテールベースのサンプリングの手順
- 古いPHPエージェント:古いPHPエージェントがある場合のトレースオプション
- トレースの詳細レベルの設定
- PHPエージェントAPIを使用してアプリケーションとサービスを手動でインストルメント化する
新しいPHPエージェント
標準の分散トレース(ヘッドベースのサンプリング)を試すだけの場合でも、無限トレース(テールベースのサンプリング)を設定する場合でも、標準のトレースを設定することから始める必要があります。ヘッドベースのサンプリングを実行するために、APMエージェントのインストールについて説明します。その後、Infinite Tracingを設定できます。これはオプションですが、推奨されます。
エージェントをインストールして、標準の分散トレースを取得します
これは、サービスにAPMエージェントをまだインストールしていない場合、または追加のサービスをインストルメント化する場合に、標準の分散トレースを設定するための最良のアプローチです。
このAPMエージェントでインストルメント化されたサービスがすでにいくつかあり、それらを分散トレースに含めたい場合は、各サービスの分散トレースを手動で有効にする必要があります。古いPHPエージェントのオプションを参照してください。
ヒント
分散トレースを設定するには、NewRelicアカウントが必要です。まだお持ちでない場合は、無料のアカウントをすばやく作成できます。
ステップ1.サービスを特定する
どのサービスがリクエストに対応しているかを把握し、各サービスをインストルメント化してトレースデータをNewRelicに送信できるようにします。
ステップ2.各サービスをAPMエージェントでインストルメント化する
トランザクションに関係するサービスごとに、エージェントのインストールルーチンを繰り返します。一部のサービスが他の言語を使用している場合は、それらの言語のインストール手順を繰り返すだけです。
インストールルーチンを開始するには、下のタイルをクリックします。各エージェントのインストールが完了したら、ここに戻ってトレースを表示するためのヒントを確認してください。
ステップ3.トレースを表示する
各サービスをAPMエージェントでインストルメント化した後、アプリケーションでトラフィックを生成して、トレースをキャプチャできるようにします。UIでトレースを表示する方法は次のとおりです。
UIでトレースを見つけるための詳細については、以下を参照してください。
無限トレースの設定(推奨)
APMエージェントの標準分散トレース(上記)は、トレースの最大10%をキャプチャしますが、すべてのデータを分析して最も関連性の高いトレースを見つけたい場合は、無限トレースを設定できます。
ヒント
この機能の詳細については、「 無限トレース」を参照してください。
開始する前に、まず要件を満たしていることを確認してください。
手順1.新しいエージェントのインストールを完了します
Infinite Tracingセットアップは、標準の分散トレース用の新しいエージェントインストールからのインストルメンテーションステップに基づいています。エージェントのインストールが完了したら、トレースオブザーバーのセットアップを続行します。
ステップ2.トレースオブザーバーを設定します
トレースオブザーバーは、すべてのトレースを収集して分析するNewRelicAWSベースのサービスです。トレースオブザーバーの設定の手順に従います。完了したら、トレースオブザーバー情報をここに戻し、次の手順に進んでエージェントを構成します。
手順3:エージェントを無限トレース用に構成する
無限トレース構成設定には、標準の分散トレースに加えて、トレースオブザーバーに関する情報が含まれます。サーバー側の構成は、無限トレースでは使用できないことに注意してください。
ヒント
プロキシ設定についてサポートが必要な場合は、 プロキシサポートを参照してください。
ステップ4.(オプション)無限トレースをカスタマイズする
エージェント構成設定を追加すると、NewRelicUIにデータが表示されるようになります。データの分析に時間を費やした後、無限トレースの機能のいくつかを調整することをお勧めします。
古いPHPエージェントのオプション
古いPHPエージェントを使用している場合は、有効にする前に、必要な分散トレース機能がサポートされていることを確認してください。
互換性ガイド
以下の互換性情報を確認した後、 「古いPHPエージェントの構成」を参照してください。
古いPHPエージェントを構成する
分散トレースを有効にするには、以下の設定を参照してください。
ヒント
分散トレースを使用せずに古いエージェントを使用している場合は、分散トレースをオンにする前に、APMへの影響を確認してください。
トレースの詳細レベルの設定
分散トレーシングのサポートは、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 or insert 分散型トレースデータ
- 他のトランザクションやリクエストによって作成された 分散型トレースデータを受け入れるように、サービスやアプリケーションを変更します。
以下の例では、一般的なメッセージ/ジョブキューを使用しています。実際の詳細は、分散トレースにどのようなシステムを追加しようとしているかによって異なりますが、基本的なコンセプトは同じです。また、ジョブキューを例に挙げましたが、これらのメソッドは 任意の 分散システムコンポーネントに使用することができます。
ヒント
ペイロードの作成 や ヘッダーの挿入 では、このリクエストやトランザクション、リクエストを分散型トレースに参加させたいことを New Relic に伝えています。 accept とすると、現在のリクエストやトランザクションとその親のリクエストやトランザクションをリンクさせていることになる。
より詳細な情報を得るため、またはサービス間の接続を確認するために手動でインスツルメンテーションを使用する場合の詳細については、 分散型トレースAPIに関するドキュメント を参照してください。
ヘッダーAPI
ペイロードAPI(非推奨)
コマンドラインPHPプログラム
PHPコマンドラインから実行されるPHPプログラムは、常にエージェントの分散トレーサーによってサンプリングされます。実行するプログラムによっては、これらのプロセスで、分散トレースのコレクションに過剰な表現が見られる場合があります。このような状況では、 newrelic.ini files
のper-directory newrelic.enabled
設定を使用して、コマンドラインインストルメンテーションを無効にすることを選択できます。