分散トレースのデータの理解と利用方法

New Relic の分散トレースは、分散システムの動作を監視、分析するのに役立ちます。ここでは以下のことを説明します。

APM Pro ユーザーのみ利用可能です。

ここでは、New Relic UI 上に表示されるデータを理解することに焦点を当てています。この機能の動作に関する仕組みついては、分散トレースの仕組みをご覧ください。

Distributed tracing UI の機能

New Relic distributed tracing main UI screenshot

rpm.newrelic.com/apm > (選択したアプリケーション) > Distributed tracing: 散布図、フィルター、タイムピッカー、トレースリストを使って対象としたいトレースを絞り込めます。

Distributed tracing ページ(上のスクリーンショット)のメインの機能を以下で紹介します。

  1. 散布図: 選択した時間帯のトレースがプロットされます。異常値が簡単に見つかるでしょう。トレース詳細を表示するには、プロットポイントを選択します。赤い点はエラーのあるトレースを示しています。
  2. トレースリスト: トレースのリストは、ルートスパンの処理時間トレース内のスパン数、エラー数、サービス数などの情報を表示します。トレースの詳細を表示するには、そのトレースを選択します。
  3. フィルター: 特定の値を持つスパンを含むトレースのみを表示するには、属性別にフィルタリングします。フィルターの提案を表示するには、フィルタ検索フィールドをクリックします。 (!=, >, <, IN) などの演算子を使用するには、フィルタのドロップダウンを選択します。フィルタリングの詳細については、フィルタルールをご覧ください。

トレース詳細を調べる

New Relic distributed tracing details UI page screenshot

rpm.newrelic.com/apm > (選択したアプリケーション) > Distributed tracing > (選択したトレース) > (選択したスパン): トレースタイムライン、トレースのウォーターフォール、スパンの詳細ビューを使用すると、トレースをよりよく理解できます。

トレースが選択されると、そのトレースの詳細が表示されます(上のスクリーンショットを参照)。

  1. トレースのタイムライン: トレースの全体的な構造を表示します。トレース内の特定の期間を見たい場合は、その領域をクリックして対象範囲をドラッグします。赤いスパンはエラーを示します。
  2. トレースのウォーターフォール: 選択したトレースセクションのスパンを表示します。赤いスパンはエラーを示します。トレースの作成方法については、データ収集をご覧ください。
  3. スパンの詳細: スパンを選択して、チャート、属性、フルスパン名などの詳細を表示します。コンテキストが存在する場合、完全なスパン名が関連する APM UI ページにリンクします。異なる種類のスパンには異なる詳細があります。

UI 表示のルールとロジックについては、ルールと UI 通知をご覧ください。

利用例

New Relic の分散トレース機能を使用して問題を解決する例をいくつか示します。

レイテンシ問題を診断し、修正する
  1. エンジニアは、サービスが頻繁に遅延が発生していることを示すアラート通知を受け取ったとします。
  2. エンジニアは APM の Overview ページに行き、依存するサービスからの応答時間が大幅に増加していることに気づいたとします。
  3. Distributed tracing ページに移動し、duration > 2 (継続時間> 2)のフィルタを適用します。すると、その処理時間を超えるスパンを持つトレースのみを表示できます。
  4. 異常に長い遅延は発生しているトレースを調べます。非常にレスポンスの遅いデータベースのクエリをしているサービスに呼び出しが行われていることがわかりました。
  5. そのサービスの所有者を確認し、予期せぬ高スループットのために現在チームがデータベースのスケーリングに取り組んでいることを知ることにができました。
複数のサービスにまたがるリクエストのエラー分析
  1. エンジニアは多くのサービスにまたがる複雑なトランザクションで発生したエラーのトラブルシューティングを担当しているとします。
  2. まずは、Distributed tracing ページに移動し、特定のリクエストに絞り込みます。
  3. エラーを含むトレースに絞り込みます。
  4. トレースの詳細を見ると、エラーを発生させたリクエスト経路に沿ったスパンを見ることができます。
  5. エラークラスとメッセージに注目すると、トレース内のスパンからサービスをすることができ、そのエラーが頻繁に発生していることが分かるでしょう。次に、サービス所有者にそのエラーを調べるよう依頼します。

New Relic Insights クエリの例

分散トレースは、Span イベントTransaction イベントの両方を生成します。New Relic Insights でこのデータをクエリできます。また、これらのデータを利用した Insights ダッシュボードも作成できます。

ここでは、NRQL クエリの例をいくつか紹介します。

あるアプリのデータストアの処理時間をパーセンタイル形式で
SELECT percentile(duration, 50, 95) from Span where category = 'datastore' and appName = 'YOUR_APP_NAME' since 4 hours ago TIMESERIES 1 minute
アプリのデータストアのクエリ処理時間をホスト別で
SELECT average(duration) from Span where appName = 'YOUR_APP_NAME' and category = 'datastore' facet host TIMESERIES 1 minute
あるサービスのあるメソッドの平均処理時間をホスト別で
SELECT average(duration) from Span where appName = 'YOUR_APP_NAME' and name = 'FUNCTION_NAME' facet host TIMESERIES 1 minute
あるサービスが呼び出した外部サービスのヒストグラムを外部 URI別に
SELECT histogram(duration, 10, 60) from Span where category = 'http' and appName = 'YOUR_APP_NAME' facet externalUri since 4 hours ago
全アプリの外部呼び出しの平均処理時間
SELECT average(duration) from Span where category = 'http' since 4 hours ago facet externalUri timeseries 1 minute

トレースルールと制限

分散トレース UI に関するいくつかのルールと制限は次のとおりです。

サンプリングとスパンの制限
New Relic エージェントはエージェントインスタンスごとに収集できるスパンの数が 1,000 に制限されています。そして、トレース用に選択されたリクエストをサンプリングの対象として選択します。サンプリングとエージェントのスパン制限について詳しく知りたい方は、サンプリングをご覧ください。.

UIに表示されるスパンの最大は 10,000 です。

トータルスパン vs 表示されるスパン
トレースの詳細ページには、Total spans (合計スパン)数と Spans displayed (表示用スパン)数の両方が表示されます。トレースリストには、合計スパンが表示されます。

トレース詳細ビューには、レポートされ、格納されているスパンを表示するわけではありません、そのため、これらの異なるカウント数に意味があります。スパンが表示されない理由はいくつかあります。そのいくつかを紹介します。

  • UI には、サービスやクロス・プロセス操作(プロセス境界へ入る、出る操作)への最初のリクエストを表すスパンを表示します。プロセス内のアクティビティを表すスパンは表示されません。
  • APM が監視するアプリが複数のアプリ名としてレポートしている場合、トレース・ウォーターフォール・ビューはそのサービスの単一スパンを表示します。しかし、実際にはアプリケーション名ごとに1つのスパン・イベントが複数報告されています。
  • トレースごとに表示できるスパンの最大数は10,000です。
  • New Relic に報告されたエラーは、表示されないエラーを含むスパンとは別の追加スパンを作成します。

New Relic Insights では表示されないスパンも含めて、収集された全スパンに対してクエリできます。

フィルタールール

フィルタを管理するいくつかのルールを紹介します。

  • フィルタリングに利用できる属性は現在のアプリケーションからのみです。 フィルタリングに使用できる属性は、現在 New Relic が表示しているアプリケーションで利用可能な属性だけです。表示されるはずの属性が表示されない場合は、表示しているアプリケーションで使用できない属性である可能性があります。そのような場合は、アプリケーションのトップ画面に移動し、その属性が取り込まれるアプリを選択してください。
  • 複数属性フィルタは、最初に選択された属性影の響を受ける。 分散トレースのレポートにはトランザクションイベントとスパンイベントという2種類のイベントデータがあります。フィルターで属性を選択すると、属性がアタッチされたイベントによって使用可能な属性が決定されます。たとえば、Transaction イベントにアタッチされている属性をフィルタリングし、別の属性値にフィルタを追加しようとすると Transaction イベントの属性のみ使えます。
クロス・アカウントのアクセス制限

そのサービスを監視している New Relic アカウントが、アカウントと同じマスターアカウント配下やアカウントと同じ顧客パートナーシップ下にある場合、サービスのトレース詳細を確認できます。そのサービスに適切な権限がない場合、トレースのメタデータが制限されます。難読化には以下が含まれます。

  • トレースのウォーターフォールビューでは、スパン名は空白です。
  • アプリケーション名の代わりにアプリケーション ID が表示されます。
  • アカウント名の代わりにアカウント ID が表示されます。
  • スループットとレイテンシのチャートは表示されません。
  • 表示されない属性があります。
ウォーターフォールビューには不完全なスパン名が表示される
スパンをウォーターフォールビューに表示すると、スパン名を人間が判読可能な形式で表示できます。スパンの完全な名前を見つけるには、そのスパンを選択してスパンの完全名の値を表示します。完全な名前を知っていることは、New Relic Insights でデータを照会する際に役に立ちます。