分散トレースの有効化

New Relic の 分散トレースは、分散システム全体のリクエストを監視します。ここでは、この機能をサポートしている New Relic エージェントで分散トレースを有効にする方法と分散トレースを手動で設定する方法について説明します。

互換性と要件

分散トレースを利用するには、APM Pro プランを契約している必要があります。また、現在、以下のAPM エージェントのみで使用できます。

分散トレースの有効化

分散トレースを有効にする前に、有効化による APM 機能への影響やシステム全体に展開していくにあたったの New Relic が推奨するプランを知るために、移行ガイドを読むことを強くお勧めします。

分散トレースを有効にする手順は以下のとおりです。

  1. 分散トレースをサポートしているバージョンに APM エージェントを更新します。(上記を参照)
  2. APM エージェントの設定で機能を有効にします。

トレースをブロックするプロキシの設定

New Relic の分散トレースは、リクエストパス内のサービスからサービスへヘッダー情報を伝播することによって機能します。一部のサービスは、ヘッダーを自動的に伝播しないプロキシを介して通信することがあります。その場合は、newrelic ヘッダーの値をそのサービスから宛先に伝播できるようにプロキシを設定してください。具体的な手順については、ご利用のプロキシのマニュアルを参照してください。

次にやること

分散トレースを有効にしたら、次のやるであろうことを紹介します。

エージェント API を使ったカスタム計測

APM エージェントの API を使って、分散トレースとして自動的に検出されないシステムやサービスを計測します。API を使って、呼び出し側サービスと呼び出される側のサービスの両方を計測します。呼び出し元のサービスは API コールを使ってペイロードを生成します。ペイロードは呼び出されているサービスの API コールによって受け入れられます。

これらの API を実装する一般的な手順は次のとおりです。

呼び出しサービスを計測する

呼び出しサービスを計測する手順は以下のとおりです。

  1. 監視するサービスで利用している APMエージェントが分散トレースをサポートしていることを確認してください。
  2. 分散トレースのペイロードを生成するエージェント API (JavaNode.jsPythonRuby)をコールします。注: トレース内のスパンを適切な順序で維持するには、送信するスパンのコンテキストでペイロードを生成する必要があります
  3. そのペイロードを宛先のサービス(たとえば、ヘッダー)に行われた呼び出しに追加します。
  4. オプション: その呼び出しを外部呼び出しとして識別します。Java, Node.js, Python, Ruby

呼び出されたサービスを計測する

呼び出されたサービスを計測する手順は以下のとおりです。

  1. 監視するサービスで利用している APMエージェントが分散トレースをサポートしていることを確認してください。
  2. 呼び出されたサービスの New Relic エージェントが New Relic トランザクションを識別しない場合は、エージェントAPI を使ってトランザクションを宣言します。

    Java
    トランザクションが進行中でないことを伝える 1つの方法: createDistributedTracePayload() が呼び出されると、空の文字列が返されます。

    トランザクションを作成する方法については、Java エージェントのトランザクションに関する API をご覧ください。

    Node.js
    トランザクションが進行中でないことを通知する1つの方法: Transaction.acceptDistributedTracePayload を呼び出すと、「No transaction found」(トランザクションが見つかりません)と似たエラーを Node.js エージェントログに報告します。

    startWebTransaction を使って Web トランザクションを作成したり、startBackgroundTransaction を使って Web 以外のトランザクションをキャプチャします。

    Python
    トランザクションが進行中でないことを通知する1つの方法: transaction = current_transaction() が実行されると、transactionNone になります。他の方法としては、result = accept_distributed_trace_payload(payload) が実行されると、結果はFalse となります。

    background_task を使って、Web以外のトランザクションをレポートできます。Python の計測について詳しい情報は、トランザクションとセグメントの監視をご覧ください。

    Ruby
    Rack ベースの Web フレームワークを使用しており、New Relic の Rack計測を有効にしている場合、エージェントはトランザクションの開始を処理します。その他の場合については、add_transaction_tracer API メソッドをご覧ください。
  3. 受信したコール(ヘッダなど)からペイロードを抽出します。
  4. ペイロードを受け入れるための呼び出しを呼び出します。Java, Node.js, Python, Ruby