New Relic 分散トレースの仕組み

New Relic はモダンな分散システムの動作を監視し、分析できるようにするために、分散トレース機能を提供しています。ここでは、New Relic の分散トレースの仕組みを説明します。機能の概要と利点については分散トレースの紹介を参照してください。

ヘッダーを利用してトレースを伝播する

分散トレースが有効になっている場合 New Relic エージェントはサービスのリクエストに HTTP もしくは newrelic のメッセージングヘッダーを追加します。ヘッダーには、後でスパンをリンクするのに役立つ情報が含まれています。情報とは、トレースやスパン ID、New Relic のアカウント ID、サンプリング情報などのメタデータです。

あるサービスが他のサービスを呼び出すと、そのヘッダーはダウンストリームのサービスに伝播されます。これらのダウンストリームサービスでも分散トレースが有効になっていて、信頼できる New Relic アカウントにレポートしている場合は、引き続きヘッダーを他のサービスに伝播します。これはリクエストが完了するまで続きます。

一部のサービスではヘッダを自動的に伝播しないプロキシを介して通信することがあります。その場合は、newrelic ヘッダーの値をソースから宛先に伝播できるように、そのプロキシを設定する必要があります。設定方法は使用するプロキシのドキュメントを確認してください。

現在、New Relic を含む分散トレース機能実装は、ベンダー固有のヘッダーを使用して分散トレースのコンテキストを伝播しています。New Relic は W3C Distributed Tracing ワーキンググループに参加しています。このグループは、すべてのベンダーの分散トレースの実装で機能する標準となるヘッダー名とコンテンツの策定に取り組んでいます。これが標準化された場合は、New Relic はこの基準を採用します。

データ収集と保存

分散トレースは TransactionSpan 両方のイベント・タイプを生成します。

  • Span イベント: スパンとはサービスやサービスファンクションの処理時間を表します。Span イベントは、いくつかのサンプリングルールに基き New Relic エージェントによって作成されます。このイベントタイプの属性を知りたい場合は、スパン属性をご覧ください。
  • Transaction イベント: エンティティが New Relic エージェントによって監視されている場合、そのエンティティへのリクエストは Transaction イベントを1つ生成します。トランザクションデータを使って、分散トレースデータをカスタム属性などの他の APM 機能に結び付けることができます。このイベントタイプの属性を確認するには、トランザクション属性をご覧ください。

Distributed tracing ページに、トレースに含めるために選択されたスパンとトランザクションが組み合わされて完全なトレースが表示されます。UI に表示されないスパンやトレースに含まれないトランザクションを含むイベントは、New Relic Insights からクエリ可能です。できます。

New Relic UIに 分散トレースデータを表示する方法については、分散トレースのデータを理解するをご覧ください。

トレースデータのサンプリング

New Relic の分散トレース機能は大量のデータをレポートして処理しています。典型的なトレースでは、多くのイベントが含まれており、それぞれに独自の属性セットを持ちます。通常、New Relic エージェントごとに1分間に多くのトレースがレポートされます。

このため、New Relic はトレースデータの代表をサンプルとして採取します。このサンプルはより大きいデータ集団の特性を表しています。

APM のメトリックデータはサンプルされません。分散トレースは、メトリック・データではなくイベント・データを収集します。イベントデータとメトリックデータの違いについては、データの違いをご覧ください。

サンプリング処理の詳細:

トレース開始時のサンプリング
分散トレースを利用する最初のサービスでは、10リクエストがサンプリングされます。そのサービスのスループットは、リクエストのサンプリング頻度の調整に使われます。これについては後で詳しく説明します。

分散トレースを利用する最初の New Relic が監視するサービスを trace origin トレースオリジン]と呼びます。トレースオリジンはリクエストをランダムに選択してトレースします。その決定はそのリクエストが通る下流のサービスに伝播します。リクエストが完了すると、そのリクエストが通ったサービスによって作成されたすべてのスパンが、完全なエンドツーエンドトレースとして New Relic UI で確認できます。

APM エージェントには、1分あたりに収集できるトランザクション数の制限があります(これはエージェントによって異なります)。1分間に収集されるスパン数の制限(エージェントインスタンスごとに1000)があります。この制限があるため、トレースオリジンのトレースのデフォルト数は 10トレース/分です。

APM エージェントは、10 トレースのコレクションを1分間かけ、代表サンプルを取得します。正確なサンプリングレートは直前の1分間のトランザクション数によって異なります。レートはトランザクションのスループットに反応して上昇または下降します。

たとえば、直前の1分間に100トランザクションあった場合、エージェントは同様の数のトランザクションを予測し、トレースする10トランザクションのうち1個を選択します。

エージェントのスパン限界とサンプリング
New Relic エージェントは毎分1,000スパンの制限があります。エージェントはサンプリングとマークされた全スパンを分散トレースの一部として保持しようとします。

多くの分散システムの平均的なマイクロサービスは、リクエストごとに10〜20スパンを生成します。その場合、エージェントのスパン限界は選択されたスパンすべてを保持し、そのサービスはトレース内に完全な詳細情報を保持します。

ただし、サービスへのリクエストの中にはスパンが多数生成されるため、エージェントのスパン限界に達するものもあります。そうなると、トレースによってはそのサービスの詳細が表示されないことがあります。