New Relicには、C、Go、Java、Node.js、.NET、PHP、PythonおよびRubyのAPM言語エージェントがあります。これらはそれぞれ、ディストリビューティッド(分散)トレーシングのパワーを活用する方法を提供しています。
ヒント
始める前に状況について理解を深めたい場合は、次のトピックをチェックしてください。
- スパンサンプリングのしくみは、ディストリビューティッド(分散)トレーシングオプションについて説明しています。
- APMへの影響が、現在のAPMユーザーであるが、ディストリビューティッド(分散)トレーシングを設定していない場合は何を期待すべきかを物語っています。
標準ディストリビューティッド(分散)トレーシングのクイックスタート(推奨):
サービスにNew Relic APMエージェントをインストールしていない、または追加サービスをインストゥルメントする場合は、これが標準ディストリビューティッド(分散)トレーシングを設定する最善のアプローチです。
ヒント
ディストリビューティッド(分散)トレーシングを設定するにはNew Relicアカウントが必要です。アカウントがない場合は、すぐに
無料アカウントを作成できます。
手順1: サービスの特定
各トレースデータをNew Relicに送信できるように、どのサービスをインストゥルメントするかを把握します。
手順2: 各サービスをAPMエージェントにインストゥルメント
各サービスのインストゥルメントに役立つさまざまな言語のインストレーション支援があります。
インストゥルメントする各サービスのインストレーション支援を実行し、各インストレーションが一意のアプリケーション名となるようにする必要があります。
任務を開始するには、言語のリンクをクリックします。
ヒント
インストレーション支援があるこのクイックスタートアプローチでは、実行する各サービスのディストリビューティッド(分散)トレーシングが自動的に有効化されますが、ディストリビューティッド(分散)トレーシングに参加するNew Relic APMエージェントがすでにある場合は、手動でディストリビューティッド(分散)トレーシングを有効化する必要があります。古いAPMエージェントのオプションを参照してください。
手順3: トレースの表示
各サービスをAPMエージェントにインストゥルメント後、アプリケーションにトラフィックを生成すると、トレースを取得できます。UIでトレースを表示する方法は、以下の2つです。
以下は、特定のサービスのトレースを表示できる方法の1つです。
- one.newrelic.comに移動します。
- 上部のメニューバーでAPMをクリックします。
- サービスをクリックします。
- 左側のナビゲーションのモニターセクションで、ディストリビューティッド(分散)トレーシングをクリックします。
- 必要なトレースが表示されない場合は、
trace.id
でフィルタリングできます。
このオプションを使用すると、アクセスできる組織のすべてのNew Relicアカウント全体ですべてのトレースを検索できます。
- one.newrelic.comに移動します。
- 上部のメニューバーのデータを参照をクリックしてから、トレースをクリックします。
- 左のペインでエンティティを選択します。
- 必要なトレースが表示されない場合は、
trace.id
でフィルタリングできます。
UIでトレースを検索する追加ヘルプ:
無限トレーシング(高度なオプション)のセットアップ
APMエージェント(上)の標準ディストリビューティッド(分散)トレーシングはトレースの最大10%を取得しますが、すべてのデータを分析し、最も関連のあるトレースを検索すると、無限トレーシングを設定できます。この標準ディストリビューティッド(分散)トレーシングの代替は、C SDKを除く、すべてのAPM言語エージェントに使用できます。
始める前に、要件を満たしていることを確認します。
手順1: 上のクイックスタートのディストリビューティッド(分散)トレーシングのインストゥルメントを完了します。
無限トレーシング設定は、標準ディストリビューティッド(分散)トレーシングのクイックスタートからインストゥルメンテーション手順で構築されます。
手順2: トレースオブザーバの設定
トレースオブザーバは、すべてのトレースを収集および分析するNew Relic AWSベースのサービスです。トレースオブザーバの手順に従います。終了したら、ここにトレースオブザーバ情報を返し、次の手順でエージェントの設定を続行します。
手順3: 無限トレーシングのエージェントの設定
無限トレーシング設定には、標準ディストリビューティッド(分散)トレーシングとトレースオブザーバに関する情報が含まれます。下の言語エージェントの設定を検索します。
設定の概要は、次のとおりです。設定の詳細については、Goアプリケーションのディストリビューティッド(分散)トレーシングの有効化を参照してください。
タイプ | 必要な設定 |
---|
無限トレーシング | 設定オプション: newrelic.Config 構成:
app, err := newrelic.NewApplication(
newrelic.ConfigAppName(YOUR_APP_NAME),
newrelic.ConfigLicense(YOUR_LICENSE_KEY),
func(cfg *newrelic.Config) {
cfg.DistributedTracer.Enabled = true
cfg.InfiniteTracing.TraceObserver.Host = YOUR_TRACE_OBSERVER_HOST
},
)
環境変数:
|
設定の概要は、次のとおりです。設定の詳細については、.NETエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
無限トレーシング | 設定オプション: 設定ファイル(newrelic.config ): <configuration . . . >
<distributedTracing enabled="true" />
<infiniteTracing>
<trace_observer host="YOUR_TRACE_OBSERVER_HOST" />
</infiniteTracing>
</configuration>
環境変数:
|
設定の概要は、次のとおりです。設定の詳細については、Node.jsエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
無限トレーシング | 設定オプション: 設定ファイル(newrelic.js ): 環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
|
設定の概要は、次のとおりです。設定の詳細については、Pythonエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
無限トレーシング | このインストレーションコマンドでライブラリをプルダウンしてから、設定ファイルまたは環境変数を設定します。 pip install newrelic[infinite-tracing]
設定オプション: 設定ファイル(newrelic.ini ): distributed_tracing.enabled = true
infinite_tracing.trace_observer_host= YOUR_TRACE_OBSERVER_HOST
環境変数: |
設定の概要は、次のとおりです。設定の詳細については、Rubyエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
無限トレーシング | 設定オプション: 設定ファイル(newrelic.yml ): 環境変数:
|
手順 4. (オプション)無限トレーシングのカスタマイズ
エージェント設定を追加すると、New Relic UIにデータの表示が開始されるはずです。データ分析に時間を費やすと、以下の無限トレーシングの一部を調整する必要があります。
古いAPMエージェントのオプション
古いAPMエージェントがある場合は、このセクションを使用して必要なディストリビューティッド(分散)トレーシング機能がサポートされているかを把握します。
互換性情報に従うのは、基本設定を標準ディストリビューティッド(分散)トレーシングへの切り替えを示すセクションです。古いエージェントが無限トレーシングをサポートし、設定する場合は、上の手順を参照します。
互換性ガイド
下の言語エージェントを検索し、既存のエージェントがディストリビューティッド(分散)トレーシングを使用できるかを確認します。
必要なC SDKバージョンをインストール(コンパイル)、またはそのバージョンに更新します。最善の結果を得るには、最新バージョンのC SDKに更新してください。
オプション | C SDKのバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 1.1.0 以上(W3Cトレースコンテキストは利用できません) |
無限トレーシング | 利用不可 |
必要なGoエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、Goエージェントの最新バージョンに更新してください。
オプション | Goエージェントのバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 2.1.0 以上 W3Cトレースコンテキストを使用:3.1.0以上 |
無限トレーシング | v3.5.0(W3Cトレースコンテキストを含む) サポートされている環境: Go 1.9以上 |
必要なJavaエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、最新のJavaエージェントバージョンに更新します。
タイプ | Javaエージェントバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 4.3.0以上 W3Cトレースコンテキストを使用: 5.10以上 |
無限トレーシング | 5.12.1以上(W3Cトレースコンテキストを含む) サポートされている環境: Java 8: 252以上に更新 Java 9以上のすべてのバージョン
|
必要な.NETエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、最新の.NETエージェントバージョンに更新します。
オプション | .NETエージェントのバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 8.6.45.0以上 W3Cトレースコンテキストを使用: 8.27.139.0以上 |
無限トレーシング | 8.30.0(W3Cトレースコンテキストを含む) サポートされている環境: - .NET Framework 4.5以上
- .NET Core 2.0以上
|
必要なNode.jsエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、最新のNode.jsエージェントバージョンに更新します。
オプション | Node.jsエージェントバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 4.7.0以上 W3Cトレースコンテキストを使用: 6.4以上 |
無限トレーシング | 7.3.0 (W3Cトレースコンテキストを含む) サポートされている環境: Nodeバージョン10.10.0以上 |
必要なPHPエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、最新PHPエージェントバージョンに更新します。
オプション | PHPエージェントのバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 8.4以上 W3Cトレースコンテキストを使用: 9.8以上 |
無限トレーシング | 9.12.0.268以上 |
必要なPythonエージェントバージョンをインストール、またはそのバージョンに更新します。最善の結果を得るには、最新のPythonエージェントのバージョンに更新します。
オプション | Pythonエージェントのバージョン |
---|
標準ディストリビューティッド(分散)トレーシング | 4.2.0.100以上 W3Cトレースコンテキストを使用: 5.6以上 |
無限トレーシング | 5.12.0.140(W3Cトレースコンテキストを含む) サポートされている環境: CPythonのみ(pypyはサポートされていません) |
ディストリビューティッド(分散)トレーシングは、設定全体で有効化されます。以下のエージェント特定のセクションを確認してください。エージェント設定の一般ヘルプについては、エージェントの設定を参照してください。
重要
サーバーサイドコンフィグレーションは、無限トレーシングでは使用できません。
設定の概要は、次のとおりです。設定の詳細については、Goアプリケーションのディストリビューティッド(分散)トレーシングの有効化を参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: ConfigOption 構成:
newrelic.ConfigAppName("Example App"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), newrelic.ConfigDistributedTracerEnabled(true),
環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
設定の概要は、次のとおりです。設定の詳細については、Javaエージェント設定: 設定ファイルを参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: |
無限トレーシング | 設定オプション: |
設定の概要は、次のとおりです。設定の詳細については、.NETエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: 設定ファイル(newrelic.config ): <distributedTracing enabled="true" />
環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
設定の概要は、次のとおりです。設定の詳細については、Node.jsエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: 設定ファイル(newrelic.js ): 環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
設定の概要は、次のとおりです。設定の詳細については、PHPエージェント向けディストリビューティッド(分散)トレーシングを参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: 設定ファイル(newrelic.ini ): newrelic.distributed_tracing_enabled = true
|
設定の概要は、次のとおりです。設定の詳細については、Pythonエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定ファイル(newrelic.ini ): distributed_tracing.enabled = true
環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
設定の概要は、次のとおりです。設定の詳細については、Rubyエージェント設定を参照してください。
タイプ | 必要な設定 |
---|
標準ディストリビューティッド(分散)トレーシング | 設定オプション: 設定ファイル(newrelic.yml ): 環境変数: NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
|
ヒント
プロキシ設定についてサポートが必要な場合は、プロキシサポートを参照してください。
手動でのインストゥルメント(自動インストゥルメントを行えない場合)
推奨:カスタムインストゥルメントを行う前に、以下をお読みになることをお勧めします。
サービスでトレースヘッダーがその他のサービスに渡されない場合は、ディストリビューティッド(分散)トレーシングのペイロードAPIを使用して、サービスの呼び出しおよび呼び出されたサービスをインストゥルメントできます。サービスの呼び出しでは、API呼び出しを使用して、呼び出されたサービスにより認められるペイロードを生成します。
サービスの呼び出しをインストゥルメントするには:
サービスの呼び出しを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。
ディストリビューティッド(分散)トレースペイロードを生成するエージェントAPIコールの呼び出し: C SDK | Go | Java | .NET | Node.js | PHP | Python | Ruby。
重要
トレースでスパンの順序を適切に保つため、ペイロードを送信するスパンのコンテキストでペイロードを生成していることを確認します。
そのペイロードを、宛先のサービスに行われた呼び出し(例、はヘッダー内)に追加します。
(オプション)外部の呼び出しとして呼び出しを特定します。
呼び出されたサービスをインストゥルメントするには:
呼び出されたサービスを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。
呼び出されたサービスのNew RelicエージェントがNew Relicトランザクションを特定しない場合は、エージェントAPIを使用してトランザクションを宣言します。
トランザクションが進行していないことを示す方法: newrelic_create_distributed_trace_payload()
がコールされると、NULL
ポインターが返されます。この問題を解決するには、手順に従い、C SDKを使用してトランザクションを作成します。
トランザクションが進行していないことを示す方法: Transaction.InsertDistributedTraceHeaders(h http.Header)
がコールされると、ヘッダーは挿入されません。トランザクションを作成する場合は、Goトランザクションのインストゥルメントを参照してください。
トランザクションが進行していないことを示す方法: Transaction.insertDistributedTraceHeaders(Headers)
がコールされると、ヘッダーは挿入されません(このAPIにはエージェント6.4.0+が必要です)。トランザクションを作成する場合は、Javaエージェントトランザクション関連のAPIを参照してください。
トランザクションが進行していないことを示す方法: newrelic_insert_distributed_trace_headers()
はfalse
を返します。トランザクションを作成する場合は、newrelic_start_transactionを参照してください。
トランザクションが進行していないことを示す: transaction = current_transaction()
が実行されると、トランザクション
はなし
です。または、result = accept_distributed_trace_payload(payload)
を実行している場合は、結果はFalse
です。
background_task
を使用して、ウェブ以外のトランザクションをレポートします。Pythonインストゥルメンテーションの詳細については、トランザクションとセグメントの監視を参照してください。
ラックベースのウェブフレームワークを使用しており、New Relicのラックインストゥルメンテーションが有効になっている場合は、Rubyエージェントがトランザクションの開始を処理します。その他の使用例については、add_transaction_tracer
APIメソッドを参照してください。
受信した呼び出しからペイロードを抽出します(例、ヘッダーで)。
ペイロードを受け入れるコールの呼び出し: C SDK | Go | Java | .NET | PHP | Node.js | Python | Ruby。