当社の言語エージェントで標準のディストリビューティッド(分散)トレーシングやInfiniteトレーシングを有効にするには、次のことを知っておく必要があります。
始める前に状況について理解を深めたい場合、次のトピックをチェックしてください。
- スパンサンプリングのしくみは、ディストリビューティッド(分散)トレーシングオプションについて説明しています。
- APMへの影響では、現在APMを使用している場合どうなるかを扱っています。
ディストリビューティッド(分散)トレーシングを有効にするプロセスでは、次のステップを経ます。
ステップ1。前提条件
次のセクションをチェックし、希望するディストリビューティッド(分散)トレーシングオプションをお使いの環境で使用できることを確認します。主たるオプションは次のとおりです。
- 標準のディストリビューティッド(分散)トレーシング: headベースのサンプリング
- Infinite トレーシング: tailベースのサンプリング
- W3Cトレースコンテキストをサポート: 注にあるように、すべてのInfinite Tracing エージェントと標準のディストリビューティッド(分散)トレーシングで使用できます
ご希望の機能のあるエージェントのバージョンが見つかったら、エージェントをインストールまたはアップデートするヘルプについてのリンクに従います。最善の結果を得るには、既存エージェントを最新バージョンに更新してください。
- C SDK
-
必要なC SDKバージョンをインストール(コンパイル)するか、またはそのバージョンに更新します。最善の結果を得るには、最新バージョンのC SDKに更新してください。
オプション C SDKのバージョン 標準のディストリビューティッド(分散)トレーシング 1.1.0以降(W3Cトレースコンテキストはご利用いただけません)
Infinite Tracing 利用不可 - Go
-
必要なGoエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、Goエージェントの最新バージョンに更新してください。
オプション Goエージェントのバージョン 標準のディストリビューティッド(分散)トレーシング 2.1.0以降
W3Cトレースコンテキストを使用:3.1.0 以降
Infinite Tracing v3.5.0(W3Cトレースコンテキストを含む)
サポートされた環境:Go 1.9以降
- Java
-
必要なJavaエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、Goエージェントの最新バージョンに更新してください。
種類 Javaエージェントバージョン 標準のディストリビューティッド(分散)トレーシング 4.3.0以降
W3Cトレースコンテキストを使用:5.10以降
Infinite Tracing 5.12.1以降(W3Cトレースコンテキストを含む)
サポートされた環境:
- Java 8:アップデート252以降
- Java 9以降のすべてのバージョン
特別な場合については、Infinite Tracing: Java 7および8でのSSLの設定をご覧ください。
- .NET
-
必要な.NETエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、最新の.NETエージェントバージョンに更新してください。
オプション .NETエージェントのバージョン 標準のディストリビューティッド(分散)トレーシング 8.6.45.0以降
W3Cトレースコンテキストを使用:8.27.139.0以降
Infinite Tracing 8.30.0(W3Cトレースコンテキストを含む)
サポートされた環境:
- .NET Framework 4.5またはそれ以降
- .NET Core 2.0以降
- Node.js
-
必要なNode.jsエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、最新のNode.jsエージェントバージョンに更新してください。
オプション Node.jsエージェントバージョン 標準のディストリビューティッド(分散)トレーシング 4.7.0以降
W3Cトレースコンテキストを使用:6.4以降
Infinite Tracing 6.7.0(W3Cトレースコンテキストを含む)
サポートされた環境:Nodeバージョン10.10.0以降
- PHP
-
必要なPHPエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、Goエージェントの最新バージョンに更新してください。
オプション PHPエージェントのバージョン。 標準のディストリビューティッド(分散)トレーシング 8.4以降
W3Cトレースコンテキストを使用:9.8以降
Infinite Tracing 9.12.0.268以降 - Python
-
必要なPythonエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、最新のPythonエージェントのバージョンに更新してください。
オプション Pythonエージェントのバージョン 標準のディストリビューティッド(分散)トレーシング 4.2.0.100以降
W3Cトレースコンテキストを使用:5.6以降
Infinite Tracing 5.12.0.140(W3Cトレースコンテキストを含む)
サポートされた環境:CPythonのみ(pypyはサポート対象外)
- Ruby
-
必要なRubyエージェントバージョンをインストールするか、そのバージョンに更新します。最善の結果を得るには、Rubyエージェントの最新バージョンに更新してください。
また、Infinite Tracing 用の追加の Ruby エージェント gem をインストールします。
オプション Rubyエージェントのバージョン 標準のディストリビューティッド(分散)トレーシング newrelic_rpm 5.3.0.346 以降
W3Cトレースコンテキストを使用:newrelic_rpm 6.9 以降
Infinite Tracing newrelic_rpm 6.11.0.365 以降(W3Cトレースコンテキストを含む)
newrelic-infinite_tracing 6.11.0.375 以降
ステップ2。(Infiniteトレーシング)トレース オブザーバーを設定する
このセクションは、Infinity Tracingにのみ適用されます。標準のディストリビューティッド(分散)トレーシングを有効にしている場合、エージェントを設定するに進んでください。
Infinite トレーシングでは、スパンを受信するトレース オブザーバーをプロビジョニングする必要があります。トレース オブザーバーがスパンを調べ、実行可能なスパンを維持します。New Relic Edgeと呼ばれるAWSサービスのクラスターでトレース オブザーバーをプロビジョニングします。
EUプロバイダー地域のいずれかのトレース オブザーバーにデータを送信する場合でも、テールベースのサンプリングデータは米国のデータセンターに報告されるため、米国ベースのNew Relicアカウントが必要です。ご不明な点がございましたら、アカウント担当者にお問い合わせください。
Edgeアプリを使用して、トレース オブザーバーを設定します。このアプリには、いくつかのオプションの設定も含まれています。トレース オブザーバー モニタリングおよびスパン属性トレース フィルターです。これらのオプションを設定するかどうかわからない場合は、後で設定できます。
次の項目を完了します:
- 2a. トレース オブザーバー エンドポイントのセットアップ
-
- one.newrelic.comに移動します。
- メニューバーで、[アプリ]をクリックし、[Your apps(自分のアプリ)]を展開して、[New Relic Edge]をクリックします。
- 左上のドロップダウンでアカウントを選択します。
複数のアカウント階層にアクセスできる場合は、トレース オブザーバーが必要な階層にいることを確認します。
- トレース オブザーバーがリストされていない場合は、[新しいトレースオブザーバー]をクリックして追加し、分かりやすい名前を挿入して地域を選択し、[作成]をクリックします。
- 使用するトレース オブザーバーについては、[エンドポイント] ドロップダウンに移動し、隣接するクリップボードアイコンをクリックして、次の値をコピーします。
[エンドポイント] ドロップダウンの値 説明 言語エージェントの場合 コピーして後ほどステップ3でYOUR_TRACE_OBSERVER_HOSTとして使用します。エージェントを設定します。 その他のインテグレーションの場合 (オプション)保存して後ほどYOUR_TRACE_OBSERVER_URLとして2b. テストデータをトレース オブザーバーに送信するで使用します。 - (オプション)トレース オブザーバー メトリックの収集を開始する場合は、トレースオブザーバー モニタリングのトグルをクリックします。詳細については、トレース オブザーバー モニタリングを参照してください。
- (オプション)スパン属性トレースフィルターをカスタマイズする場合は、トレースフィルターの下にある歯車アイコンをクリックして、現在のルールを確認します。詳細については、スパン属性フィルターを参照してください。
- 2b. (オプション)テストデータをトレースオブザーバーに送信
-
このテストには、同じサービスからの1つのトレースと2つのスパンのあるサンプルペイロードが含まれます。
Test Service A
。このサービスに従い、テストリクエストを送信します:- Insert APIキーを取得または生成して、後ほどテストで使用できるようにします。
- 次の
curl
リクエストをテキストエディタにコピーします:curl
リクエスト-
curl -i -H "Content-Type: application/json" \ -H "Api-Key: YOUR_INSERT_API_KEY" \ -H 'Data-Format: newrelic' \ -H 'Data-Format-Version: 1' \ -X POST \ -d '[ { "common": { "attributes": { "environment": "staging" } }, "spans": [ { "trace.id": "123456", "id": "ABC", "attributes": { "duration.ms": 12.53, "host": "host123.test.com", "name": "/home", "service.name": "Test Service A" } }, { "trace.id": "123456", "id": "DEF", "attributes": { "duration.ms": 2.97, "host": "host456.test.com", "error.message": "Invalid credentials", "name": "/auth", "parent.id": "ABC", "service.name": "Test Service B" } } ] } ]' \ 'YOUR_TRACE_OBSERVER_URL'
- 自身の値を
curl
リクエストに挿入します:値 説明 YOUR_INSERT_API_KEY これをInsert APIキーに置き換えます(NerdGraph APIエクスプローラーのパーソナル APIキーとは異なります) YOUR_TRACE_OBSERVER_URL これを 2a トレース オブザーバー エンドポイントのセットアップでコピーした値に置き換えます。 - テキストエディタの内容をターミナルにコピーし、リクエストを実行します。
- テストで、成功を示す
HTTP/1.1 202 Accepted
が返されない場合、次の項目をチェックしもう一度行ってください:- Edgeアプリの値その他のインテグレーションの場合をYOUR_TRACE_OBSERVER_URLとして使用したことを確認します。
- YOUR_TRACE_OBSERVER_URLについて挿入した値の引用符が一重引用符であることを確認します。
- (ライセンスではなく)Insert APIキーを使用していることを確認します。
- テストで
HTTP/1.1 202 Accepted
が返された場合、New Relic Oneに移動し、スパン属性service.name = Test Service A
を使用してテストデータのクエリを表示します。サンプルペイロードにはエラー属性が含まれるため、エラーサンプラーにより保存するよう印が付けられます。エラー属性を削除するようペイロードを変更すると、ランダムサンプラーは、この特定のトレースを保存することを選択できません。トレースオブザーバーとTrace APIの両方でトレースを処理するには、最大で1分ほどかかります。
ステップ3。エージェントの設定
ディストリビューティッド(分散)トレーシングは、設定全体で有効になります。ディストリビューティッド(分散)トレーシングで変更する必要がある設定は、希望のタイプにより異なります:
- 標準のディストリビューティッド(分散)トレーシング
- Infinite Tracing(ステップ2のYOUR_TRACE_OBSERVER_HOSTが必要)
エージェントの次のセクションを見直し、必要な設定を確認します。詳細については、エージェントの設定をご覧ください。
サーバーサイドコンフィグレーションは、Infinity Tracingでは使用できません。
- C SDK
-
設定の概要は次のとおりです。設定の詳細については、Cアプリケーションについてディストリビューティッド(分散)トレーシングを有効にするをご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
newrelic_app_config_t
構成:newrelic_app_config_t* config; config = newrelic_create_app_config(app_name, license_key); config->distributed_tracing.enabled = true;
Infinite Tracing 利用不可 - Go
-
設定の概要は次のとおりです。設定の詳細については、Goアプリケーションについてディストリビューティッド(分散)トレーシングを有効にするをご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
-
ConfigOption
構成:newrelic.NewApplication( newrelic.ConfigAppName("Example App"), newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")), newrelic.ConfigDistributedTracerEnabled(true), )
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 設定の例:
-
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 }, )
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST=YOUR_TRACE_OBSERVER_HOST
-
- Java
-
設定の概要は次のとおりです。設定の詳細については、Javaエージェント設定: 設定ファイルをご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
-
設定ファイル(
newrelic.yml
)(common
スタンザの下にあり、スペース2個分のインデント付き):distributed_tracing: enabled: true
-
Javaシステムプロパティ:
-Dnewrelic.config.distributed_tracing.enabled=true
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 設定の例:
-
設定ファイル(
newrelic.yml
)(common
スタンザの下にあり、スペース2個分のインデント付き):distributed_tracing: enabled: true infinite_tracing: trace_observer: host: "YOUR_TRACE_OBSERVER_HOST"
-
Javaシステムプロパティ:
-Dnewrelic.config.distributed_tracing.enabled=true -Dnewrelic.config.infinite_tracing.trace_observer.host="YOUR_TRACE_OBSERVER_HOST"
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
-
- .NET
-
設定の概要は次のとおりです。設定の詳細については、.NETエージェント設定をご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
- 設定ファイル(
newrelic.config
):<configuration . . . > <distributedTracing enabled="true" /> </configuration>
- 環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 設定の例:
- 設定ファイル(
newrelic.config
):<configuration . . . > <distributedTracing enabled="true" /> <infiniteTracing> <trace_observer host="YOUR_TRACE_OBSERVER_HOST" /> </infiniteTracing> </configuration>
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
- 設定ファイル(
- Node.js
-
設定の概要は次のとおりです。設定の詳細については、Node.jsエージェント設定をご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
設定ファイル(
newrelic.js
):distributed_tracing: { enabled: true }
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 設定の例:
設定ファイル(
newrelic.js
):distributed_tracing: { enabled: true } infinite_tracing: { trace_observer: { host: 'YOUR_TRACE_OBSERVER_HOST' } }
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
- PHP
-
設定の概要は次のとおりです。設定の詳細については、PHPエージェント向けディストリビューティッド(分散)トレーシングをご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
-
設定ファイル(
newrelic.ini
):newrelic.distributed_tracing_enabled = true
Infinite Tracing 設定の例:
-
設定ファイル(
newrelic.ini
):newrelic.distributed_tracing_enabled = true newrelic.span_events_enabled = true newrelic.infinite_tracing.trace_observer_host= YOUR_TRACE_OBSERVER_HOST
-
- Python
-
設定の概要は次のとおりです。設定の詳細については、Pythonエージェント設定をご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定ファイル(
newrelic.ini
):distributed_tracing.enabled = true
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 次のインストールコマンドを使用します:
pip install newrelic[infinite-tracing]
設定ファイル(
newrelic.ini
):distributed_tracing.enabled = true infinite_tracing.trace_observer_host= YOUR_TRACE_OBSERVER_HOST
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
- Ruby
-
設定の概要は次のとおりです。設定の詳細については、Rubyエージェント設定をご覧ください。
種類 必要な設定 標準のディストリビューティッド(分散)トレーシング 設定の例:
-
設定ファイル(
newrelic.yml
):distributed_tracing: enabled: true
- 環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
Infinite Tracing 設定の例:
-
設定ファイル(
newrelic.yml
):distributed_tracing: enabled: true infinite_tracing: trace_observer: host: 'YOUR_TRACE_OBSERVER_HOST'
-
環境変数:
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST="YOUR_TRACE_OBSERVER_HOST"
-
プロキシ設定についてサポートが必要な場合は、プロキシサポートを参照してください。
ステップ4。トレースを表示
APMエージェントを更新し、データをトレースオブザーバーに送信するよう設定すると、トレースを表示できるようになります。次の2つの代わりの方法があります:
- 特定のサービスを含むトレースを表示
-
エンティティエクスプローラーを使用して、特定のサービスに移動し、そのサービスを含むトレースを表示できます。
- one.newrelic.comに移動します。
- 上部のメニューバーでエンティティエクスプローラーをクリックします。
- サービス名を入力してInfinity Tracingについて有効なサービスを絞り込み、Enterを押します。
- 左側のナビゲーションのモニターセクションで、ディストリビューティッド(分散)トレーシングをクリックします。
- アカウント全体でトレースを表示
-
このオプションを使用して、アクセスできる、組織のすべてのNew Relicアカウント全体ですべてのトレースを検索できます。
- one.newrelic.comに移動します。
- 上部のメニューバーでアプリケーションをクリックします。
- お気に入りの下にあるディストリビューティッド(分散)トレーシングをクリックします。
-
トレースを検索...検索で、検索語句を入力してサービスを検索します。たとえば、
service.name
またはtrace.id
クエリを行うには:service.name = YOUR_SERVICE_NAME trace.id = YOUR_TRACE_ID
手動でのインストゥルメント(自動インストゥルメントを行えない場合)
推奨事項:カスタムインストゥルメントを行う前に、以下をお読みください:
サービスでトレースヘッダーがその他のサービスに渡されない場合、ディストリビューティッド(分散)トレーシングのペイロードAPIを使用して、サービスの呼び出しおよび呼び出されたサービスをインストゥルメントできます。サービスの呼び出しでは、API呼び出しを使用して、呼び出されたサービスにより認められるペイロードを生成します。
- サービスの呼び出しをインストゥルメントする
-
サービスの呼び出しをインストゥルメントするには:
-
サービスの呼び出しを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。
-
ディストリビューティッド(分散)トレースのペイロードを生成するため、エージェントAPIの呼び出しを行います:C SDK | Go | Java | .NET | Node.js | PHP | Python | Ruby。
トレースでスパンの順序を適切に保つため、ペイロードを送信するスパンのコンテキストでペイロードを生成していることを確認します。
- そのペイロードを、宛先のサービスに行われた呼び出し(例としてはヘッダー内)に追加します。
-
(オプション)外部の呼び出しとして呼び出しを特定:
-
- 呼び出されたサービスをインストゥルメントする
-
呼び出されたサービスをインストゥルメントするには:
-
呼び出されたサービスを監視するAPMエージェントのバージョンが、ディストリビューティッド(分散)トレーシングをサポートしていることを確認します。
-
呼び出されたサービスのNew RelicエージェントがNew Relicトランザクションを特定しない場合、エージェントAPIを使用してトランザクションを宣言します:
- C SDK
-
トランザクションが進捗していないことを伝える1つの方法:
newrelic_create_distributed_trace_payload()
が呼び出されると、NULL
ポインターが返される。この問題を解決するには、手順に従い、C SDKを使用してトランザクションを作成します。 - Go
-
トランザクションが進捗していないことを伝える1つの方法:
Transaction.InsertDistributedTraceHeaders(h http.Header)
が呼び出されている場合、ヘッダが挿入されていません。トランザクションを作成するには、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_insert_distributed_trace_headers()
はfalse
を返します。トランザクションを作成するには、newrelic_start_transactionをご覧ください。 - Python
-
トランザクションが進捗していないことを伝えるには:
transaction = current_transaction()
を実行している際に、transaction
がNone
である。または、result = accept_distributed_trace_payload(payload)
を実行している場合、結果がFalse
である。background_task
を使用して、ウェブ以外のトランザクションをレポートします。Pythonインストゥルメンテーションの詳細については、トランザクションとセグメントの監視をご覧ください。 - Ruby
-
ラックベースのウェブフレームワークを使用しており、New Relicのラックインストゥルメンテーションが有効になっている場合、Rubyエージェントがトランザクション開始を扱います。その他の使用例については、
add_transaction_tracer
APIメソッドをご覧ください。
- 受信した呼び出しからペイロードを抽出します(一例としてヘッダーで)。
-
ペイロードを受け入れるため呼び出しを行います:C SDK | Go | Java | .NET | PHP | Node.js | Python | Ruby。
-