ディストリビューティッド(分散)トレーシングの有効化

このドキュメントは、以下について説明します:

APMデータに加え、当社のディストリビューティッド(分散)トレーシング機能は次のデータソースをサポートします。

APMの互換性および要件

New Relic APMデータをディストリビューティッド(分散)トレーシングUIで取得するには、APM Proサブスクリプションが必要です。

New Relic APMエージェントについてディストリビューティッド(分散)トレーシングを有効にする前に、移行ガイドを読み、既存のAPM機能への影響とセットアップの推奨についてご確認ください。

ディストリビューティッド(分散)トレーシングは、次のバージョンのAPMエージェントでサポートされています。最善の結果を得るには、既存エージェントを最新バージョンに更新してください。

If you have questions about W3C Trace Context, see Introduction to distributed tracing.

言語 バージョン Version with W3C Trace Context support
C SDK 1.1.0 or higher: インストール(コンパイル)またはアップデート 利用不可
Goエージェント 2.1.0 or higher: インストールまたはアップデート 3.1
Javaエージェント 4.3.0 or higher: インストールまたはアップデート 5.10
.NETエージェント 8.6.45.0 or higher: インストールまたはアップデート

利用不可

Although a .NET agent for W3C Trace Context is not currently available, if you have any existing .NET agents that initiate traces as the root service, do not upgrade any other downstream New Relic agents.

Node.js 4.7.0 or higher: インストールまたはアップデート 6.4
PHP 8.4 or higher: インストールまたはアップデート 利用不可
Python 4.2.0.100 or higher: インストールまたはアップデート 5.6
Ruby 5.3.0.346 or higher: インストールまたはアップデート 6.9

APMエージェント向けにディストリビューティッド(分散)トレーシングを有効にする

最善の結果を得るには、できる限り多くのサービスとアプリケーションについてディストリビューティッド(分散)トレーシングを有効にしてください。それにより、トレースの詳細のレベルが高まり、問題の分析の改善に役立ちます。

APMエージェント向けにディストリビューティッド(分散)トレーシングを有効にするには:

  1. 以下の点については、移行ガイドをお読みください。
    • 既存のAPM機能への、ディストリビューティッド(分散)トレーシングを有効にすることの影響。
    • ディストリビューティッド(分散)トレーシングの設定についての推奨。
  2. ディストリビューティッド(分散)トレーシングをサポートするバージョンに、APMのバージョンをアップデートします。
  3. ディストリビューティッド(分散)トレーシングを使用する各アプリケーションについて、エージェントのconfigファイルまたはその他の使用可能な設定オプションを使用して、機能を有効にします:C SDK | Go | Java | .NET | Node.js | PHP | Python | Ruby

その他のデータソースを有効にするには、以下をご覧ください。

トレーシングをブロックする仲介サービスを設定する

New Relicのディストリビューティッド(分散)トレーシングは、リクエストパスでサービスからサービスにヘッダー情報を伝搬して機能します。一部のサービスでは、ヘッダーを自動的に伝搬しないプロキシまたはその他の仲介サービスを通じて通信を行います。この場合、newrelicヘッダーの値をソースから送信先に伝搬できるよう、そのプロキシを設定する必要があります。

仲介サービスに関する詳細情報については、トラブルシューティングをご覧ください。

次のステップ

ディストリビューティッド(分散)トレーシングを有効にした後でのステップは、次のようになる可能性があります。

手動インストゥルメンテーション:APIを使用して、ディストリビューティッド(分散)トレーシングヘッダーを渡す

カスタムインストゥルメントを行う前に、以下をお読みになることをお勧めします。

サービスでトレースヘッダーがその他のサービスに渡されない場合、ディストリビューティッド(分散)トレーシングのペイロードAPIを使用して、サービスの呼び出しおよび/または呼び出されたサービスをインストゥルメントできます。サービスの呼び出しでは、API呼び出しを使用して、呼び出されたサービスにより認められるペイロードを生成します。

サービスの呼び出しをインストゥルメントするには:

  1. サービスの呼び出しを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。

  2. ディストリビューティッド(分散)トレースのペイロードを生成するため、エージェントAPIの呼び出しを行います:C SDK | Go | Java | .NET | Node.js | PHP | Python | Ruby

    トレースでスパンの順序を適切に保つため、ペイロードを送信するスパンのコンテキストでペイロードを生成していることを確認します

  3. そのペイロードを、宛先のサービスに行われた呼び出し(例としてはヘッダー内)に追加します。
  4. オプション:外部の呼び出しとして呼び出しを特定:

呼び出されたサービスをインストゥルメントするには:

  1. 呼び出されたサービスを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。

  2. 呼び出されたサービスのNew RelicエージェントがNew Relicトランザクションを特定しない場合、エージェントAPIを使用してトランザクションを宣言します:

    C SDK

    トランザクションが進捗していないことを伝える1つの方法:newrelic_create_distributed_trace_payload()が呼び出されると、NULLポインターが返される。この問題を解決するには、手順に従い、C SDKを使用してトランザクションを作成します。

    Go

    トランザクションが進捗していないことを伝える1つの方法:when Transaction.InsertDistributedTraceHeaders(h http.Header) is called, no headers are inserted. トランザクションを作成するには、Goトランザクションのインストゥルメントをご覧ください。

    Java

    トランザクションが進捗していないことを伝える1つの方法:createDistributedTracePayload()が呼び出されると、空の文字列が返される。トランザクションを作成するには、Javaエージェントトランザクション関連のAPIをご覧ください。

    .NET

    トランザクションが進捗していないことを伝える1つの方法:CreateDistributedTracePayload()空のペイロードを返す。トランザクションを作成するには、.NETカスタムインストゥルメンテーションの概要をご覧ください。

    Node.js

    トランザクションが進捗していないことを伝える1つの方法:Node.jsエージェントログが、次のものと同様のエラーをレポートする:

    No transaction found when calling Transaction.acceptDistributedTracePayload.

    startWebTransactionを使用してウェブトランザクションを作成するか、startBackgroundTransactionを使用してウェブ以外のトランザクションを取得します。

    PHP

    トランザクションが進捗していないことを伝える1つの方法:newrelic_create_distributed_trace_payload()が空のペイロードを返す。トランザクションを作成するには、newrelic_start_transactionをご覧ください。

    Python

    トランザクションが進捗していないことを伝えるには:transaction = current_transaction()を実行している際に、transactionNoneである。または、result = accept_distributed_trace_payload(payload)を実行している場合、結果がFalseである。

    background_taskを使用して、ウェブ以外のトランザクションをレポートします。Pythonインストゥルメンテーションの詳細については、トランザクションとセグメントの監視をご覧ください。

    Ruby

    ラックベースのウェブフレームワークを使用しており、New Relicのラックインストゥルメンテーションが有効になっている場合、Rubyエージェントがトランザクション開始を扱います。その他の使用例については、add_transaction_tracer APIメソッドをご覧ください。

  3. 受信した呼び出しからペイロードを抽出します(一例としてヘッダーで)。
  4. ペイロードを受け入れるため呼び出しを行います:C SDK | Go | Java | .NET | PHP | Node.js | Python | Ruby

その他のヘルプ

推奨する詳細情報: