title | tags | metaDescription | freshnessValidatedDate | translationType | |||
---|---|---|---|---|---|---|---|
分散トレースUIを理解して使用する |
|
For New Relic's distributed tracing feature: learn how to use the UI and understand the data displayed. |
never |
machine |
import newRelicOneDistributedTracingQueryExample1 from 'images/new-relic-one-distributed-tracing-query-example-1.webp'
import newRelicOneDistributedTracingQueryExample2 from 'images/new-relic-one-distributed-tracing-query-example-2.webp'
import newRelicOneDistributedTracingScatterplot from 'images/new-relic-one-distributed-tracing-scatterplot.webp'
import distributedtracingLeftPaneFilters from 'images/distributed-tracing_screenshot-crop_left-pane-filters.webp'
import newRelicOneDistributedTracingHistogramSelection from 'images/new-relic-one-distributed-tracing-histogram-selection.webp'
import distributedTracingTraceDetailsPageTimelineView from 'images/distributed-tracing-trace-details-page-timeline-view.webp'
import distributedTracingTraceDetailsPageLatencyView from 'images/distributed-tracing-trace-details-page-latency-view.webp'
import distributedTracingTraceDetailsPage from 'images/distributed-tracing-trace-details-page.webp'
import newRelicDistributedTracingServiceIcon from 'images/new-relic-distributed-tracing-service-icon.webp'
import newRelicDistributedTracingInprocessIcon from 'images/new-relic-distributed-tracing-inprocess-icon.webp'
import newRelicDistributedTracingDatabasesIcon from 'images/new-relic-distributed-tracing-databases-icon.webp'
import newRelicDistributedTracingExternalIcon from 'images/new-relic-distributed-tracing-external-icon.webp'
import distributedTracingBrowserSpanIcon from 'images/distributed-tracing-browser-span-icon.webp'
import newRelicDistributedTracingLambdaIcon from 'images/new-relic-distributed-tracing-lambda-icon.webp'
import newRelicDistributedTracingLinesImage from 'images/new-relic-distributed-tracing-lines-image.webp'
import newRelicDistributedTracingErrorIcon from 'images/new-relic-distributed-tracing-error-icon.webp'
import newRelicDistributedTracingAnomalousIcon from 'images/new-relic-distributed-tracing-anomalous-icon.webp'
import newRelicDistributedTracingOrphanIcon from 'images/new-relic-distributed-tracing-orphan-icon.webp'
import newRelicDistributedTracingMultiappIcon from 'images/new-relic-distributed-tracing-multiapp-icon.webp'
import newRelicDistributedTracingClientServerTimeIndicator from 'images/new-relic-distributed-tracing-client-server-time-indicator.webp'
import newRelicDistributedTracingClientSpanTime from 'images/new-relic-distributed-tracing-client-span-time.webp'
import distributedtracingFragmentedTrace from 'images/distributed-tracing_screenshot-crop_fragmented-trace.webp'
import distributedtracingFocusonExample from 'images/distributed-tracing_screenshot-crop_focus-on-example.webp'
import distributedtracingPreservedTrace from 'images/distributed-tracing_screenshot-crop_preserved-trace.webp'
ディストリビュートトレース は、分散システムの動作を監視・分析するのに役立ちます。分散トレースを有効にすると、UIツールを使ってトレースを検索したり、分析したりすることができます。
多くのサービスにまたがるトランザクションのエラーのトラブルシューティングを行う場合は、次のようにします。
- 分散トレーシング UI ページを開きます 。
- トレースをソートする フィルターを使って特定のリクエストを見つけ出し、エラーを含むトレースだけを表示することができます。
- トレースの詳細ページで、エラーの原因となったリクエスト ルートに沿ったスパンを確認します。
- エラークラスとメッセージに注意しながら、トレースのスパンからサービスに移動して、エラーが高い割合で発生していることを確認します。
ここでは、分散型トレースのUIに用意されたオプションについて説明します。
特定のサービスのトレースを表示するには:
-
左側のパネルの
Your system
の下で、検査するトレースが含まれるエンティティを選択します。
-
左側のペインで
Distributed tracing
をクリックします。
または、すべてのアカウントのトレースを表示するには:
-
one.newrelic.com > All Capabilities
に移動します。
-
Traces
タイルをクリックします。
トレースとスパンを見つけて問題を解決できるようにするためのさまざまなツールが用意されています。分散トレーシングの開始ページには、トレースのデフォルトのリストが表示されます。次のツールを使用して、このリストをすばやく調整できます。
**Find traces**クエリ バーを使用すると、トレースの検索範囲をすばやく絞り込むことができます。 クエリ バーに入力を開始するか、ドロップダウンを使用して複合クエリを作成することができます。クエリの検索結果は、トレースの属性ではなく、 [スパン](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#span) の属性に基づいています。特定の条件を持つスパンを定義すると、検索ではそのスパンを含むトレースが表示されます。
複数の属性を持つフィルターを使用した場合、最初に選択された属性の影響を受けます。分散トレーシングでは、トランザクションイベントとスパンの2種類のデータをレポートします。フィルタで属性を選択すると、その属性が添付されているデータタイプによって、利用可能な属性が決まります。たとえば、トランザクション イベントに関連付けられた属性をフィルタリングした場合、属性値を追加してフィルタリングしようとすると、トランザクション イベントの属性しか利用できません。
トレースのクエリは [NRQL](/docs/insights/nrql-new-relic-query-language/using-nrql/introduction-nrql) (クエリ言語) に似ていますが、いくつかの主な例外があります。
* 文字列値には引用符は必要ありません(たとえば、 `appName = MyApp`または`appName = 'MyApp'`のいずれかを使用できます)
* `like`演算子は`%`を必要としません(たとえば、 `appName like product`または`appName like %product%`のいずれかを使用できます)。
以下に、クエリ バーの使用方法の 2 つの例を示します。
<Tabs>
<TabsBar>
<TabsBarItem id="query-example-1">
2つのサービスに触れる痕跡を探す
</TabsBarItem>
<TabsBarItem id="query-example-2">
<><InlineCode>のような</InlineCode> 演算子を使用してエラー スパンを検索する</>
</TabsBarItem>
</TabsBar>
<TabsPages>
<TabsPageItem id="query-example-1">
下の画像のクエリは、その痕跡を見つけます。
1. WebPortalとInventory Serviceの両方のアプリケーションを通過
2. インベントリサービスのデータストアの呼び出しに500ms以上の時間がかかる
3. 任意の [スパン](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#span) のエラーを含みます。
<img
title="Distributed tracing example query 1"
alt="new-relic-one-distributed-tracing-query-example-1.png"
src={newRelicOneDistributedTracingQueryExample1}
/>
<figcaption>
に行く <DNT>**[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Apps > Distributed tracing**</DNT>
</figcaption>
</TabsPageItem>
<TabsPageItem id="query-example-2">
下の画像のクエリは、その痕跡を見つけます。
1. WebPortalアプリケーションを通過するスパンを含み、WebPortalアプリケーションのいずれかのスパンでエラーが発生した場合
2. `customer_user_email`属性にトレースの任意の場所で`hotmail.com`で終わる値が含まれるスパンが含まれます。
<img
title="new-relic-one-distributed-tracing-query-example-2.png"
alt="Distributed tracing - query example 2"
src={newRelicOneDistributedTracingQueryExample2}
/>
<figcaption>
に行く <DNT>**[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Apps > Distributed tracing**</DNT>
</figcaption>
</TabsPageItem>
</TabsPages>
</Tabs>
<Collapser id="2" title="左ペインのフィルターを選択します"
ページ上部のクエリ バーに加えて、左側のペインでさまざまなフィルターを使用して、関心のあるトレースを見つけることができます。
<img
title="Screenshot showing left-pane filters"
alt="Screenshot showing left-pane filters"
src={distributedtracingLeftPaneFilters}
/>
* <DNT>**Infinite tracing data**</DNT>: 無限トレース機能に関連するトレースのみを表示する場合に選択します。
* <DNT>**Multi span traces only**</DNT>: 単一スパンのトレースを非表示にするには、これを使用します。
* <DNT>**Error filters**</DNT>: <DNT>**Errors**</DNT>の下で、フィルタリングするエラーを選択します。
* <DNT>**Histogram filters**</DNT>: 左ペインの下部にある<DNT>**Errors**</DNT>の下で、 <DNT>**More filters**</DNT>をクリックするとヒストグラム フィルターが表示されます。 スライダーをドラッグして値を変更します(例: <DNT>**Trace duration**</DNT> 。
* 大なり比較を行うには、スライダの左端をドラッグします。
* 小なり比較を行うには、スライダの右端をドラッグします。
* スライダーの両端を中央に向かってドラッグして、範囲でフィルタリングします。
<img
title="new-relic-one-distributed-tracing-histogram-selection.png"
alt="Distributed tracing - histogram"
src={newRelicOneDistributedTracingHistogramSelection}
/>
<figcaption>
スライダーをドラッグすると、トレースのリストとトレース チャートに表示される内容の両方が変更されます。
</figcaption>
トレース グループを使用すると、トレースの概要を把握できるため、類似したトレースのグループに対する要求の動作を理解できます。これは、トレース数、期間、およびエラーの低下または急増を理解するのに役立ちます。トレース グループの 1 つをクリックすると、選択した特定のトレース グループのコンテキストですべての標準的な詳細が表示されます。
<DNT>**Group similar traces**</DNT>がオンになっている場合、ディストリビューティッド(分散)トレーシングのページ上部に 3 つのグラフが表示されます。 これらのグラフには、グラフの下の表にリストされている各トレース グループのトレース数、95 パーセンタイル期間、およびエラー数が表示されます。 これらのグラフのフィルターを変更するには、左側のペインのフィルターを参照してください。
<Collapser id="4" title="散布図で外側のトレースを表示する"
トレース散布図は、外れ値のトレースを見つけるための簡単な方法です。 これは、ページ上部の<DNT>**Group similar traces**</DNT>トグルをオフにすると、ディストリビューティッド(分散)トレーシングの開始ページで利用できます。
散布図では、グラフ上にカーソルを移動してトレースの詳細を表示したり、個々のポイントをクリックして詳細を表示することができます。
<img
title="new-relic-one-distributed-tracing-histogram-selection.webp"
alt="Screenshot showing the distributed tracing scatter plot chart."
src={newRelicOneDistributedTracingScatterplot}
/>
散布図に表示される内容を制御します。
1. <DNT>**View by**</DNT>
ドロップダウンで期間の種類を選択します。
* <DNT>
**Backend duration**
</DNT>
* <DNT>
**Root span duration**
</DNT>
* <DNT>
**Trace duration**
</DNT>
2. <DNT>**Facet traces by**</DNT>
で、次のいずれかのオプションを選択します。
* <DNT>**Root entry span**</DNT>
: ルート サービスのエンドポイントであるルート トランザクションでグループ化します。 サービス A がサービス B を呼び出し、サービス B がサービス C を呼び出すトレースでは、ルート エントリ スパンはサービス A のエンドポイントです。 たとえば、「サービス A - GET /ユーザー/%」などです。
* <DNT>**Root entity**</DNT>
: トレースの最初のエンティティの名前でグループ化します。 サービス A がサービス B を呼び出し、サービス B がサービス C を呼び出すトレースでは、ルート エンティティはサービス A になります。
* <DNT>**Errors**</DNT>
: トレースにエラーが含まれているかどうかでグループ化します。
3. 散布図のフィルターを変更する方法のヒントについては、左ペインのフィルターを確認してください。
ここでは、分散型トレーシングのUIの詳細、ルール、制限について説明します。
スパンレベルのエラーは、エラーがプロセスのどこで発生し、どのように上昇し、どこで処理されたかを示します。エラーで終わったすべてのスパンは、UI にエラーが表示され、そのトレースの合計エラー数に貢献します。ここでは、スパンエラーを理解するための一般的なヒントをご紹介します。
* エラーのあるスパンは、ディストリビューティッド(分散)トレーシングUIで赤く強調表示されます。 各スパンの<DNT>**Error Details**</DNT>ペインで詳細情報を確認できます。
* エラーで終了したすべてのスパンは、スパンエラー数にカウントされます。
* 同じスパンで複数のエラーが発生した場合、優先順位に従って1つだけがスパンに書き込まれます。
* A `noticeError`
* そのスパンの範囲内での直近のスパンエラー
この表では、さまざまなスパンエラーの処理方法について説明します。
<table>
<thead>
<tr>
<th style={{ width: "200px" }}>
エラーの種類
</th>
<th>
説明
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
エラーで終わるスパン
</td>
<td>
スパンの境界を越えたエラーは、エラーが捕捉されるかトランザクションを終了するまで、そのスパンと、同じくエラーで終了するすべての祖先スパンでエラーが発生します。エラーが捕捉されるかトランザクションが終了するまで、そのスパンとエラーで終了する先祖のスパンでエラーが発生します。
</td>
</tr>
<tr>
<td>
通知エラー
</td>
<td>
エージェント`noticeError` APIの呼び出しまたは自動エージェントインストルメンテーションによって通知されたエラーは、現在実行中のスパンに付加されます。
</td>
</tr>
<tr>
<td>
レスポンスコードエラー
</td>
<td>
レスポンスコードのエラーは、次のように関連するスパンに付けられます。
* クライアントスパン:プレフィックスが`http`または`db`の外部トランザクション。
* エントリースパン。レスポンスコードエラーで終わるトランザクションの場合。
これらのスパンの応答コードは、属性`http.statusCode`としてキャプチャされ、そのスパンにアタッチされます。
</td>
</tr>
<tr>
<td>
OpenTelemetryのエラー
</td>
<td>
右側のペインの<DNT>**Error Details**</DNT>ボックスには、 `otel.status_code = ERROR`を含むスパンが入力され、 `otel.status_description`の内容が表示されます。
<Callout variant="tip">
アプリ/サービスによって処理される OpenTelemetry スパン イベントは、スパン エラー ステータスとは独立して表示され、必ずしもスパン エラー ステータスに関連付けられているわけではありません。 右側のペインで<DNT>**View span events**</DNT>をクリックすると、スパン イベントの例外と非例外を表示できます。
</Callout>
</td>
</tr>
</tbody>
</table>
<Collapser id="anomalous-spans" title="変則的なスパン"
UIでスパンが異常と表示される場合は、以下の両方が当てはまることを意味します。
* 過去6時間の同一サービスの同名のスパンの平均値と比較して、2標準偏差以上遅れる。
* スパンの持続時間がトレースの持続時間の10%以上である。
<Collapser id="client-server-time" title="クライアントのスパン時間:クライアントとサーバーのスパンの時間差"
あるプロセスが別のプロセスを呼び出し、両方のプロセスがNew Relicによってインスツルメンテーションされている場合、トレースには呼び出しのクライアント側の表現とサーバー側の表現の両方が含まれます。 [クライアント側のスパン](/docs/understand-dependencies/distributed-tracing/get-started/how-new-relic-distributed-tracing-works#trace-structure) (呼び出し側のプロセス)は、サーバー側のスパン (呼び出されたプロセス)と比較して、時間に関連した差異が生じる可能性があります。このような違いは、以下のような原因が考えられます。
* システムクロックの時間差によるクロックスキュー
* ネットワークの遅延やDNS解決の遅れなどによる期間の違い
UIでは、サーバーのスパンと同じスペースに、クライアントのスパンのアウトラインを表示することで、これらの時間的な違いを示しています。このスパンは、クライアントのスパンの継続時間を表しています。
このような時間のズレの要因をすべて特定することはできませんが、よくあるスパンのパターンとそれを理解するためのヒントをご紹介します。
<img
title="new-relic-distributed-tracing-client-span-time.jpg"
alt="New Relic distributed tracing client vs server time discrepancy diagram"
src={newRelicDistributedTracingClientSpanTime}
/>
A.クライアントスパンがサーバースパンよりも長い場合、これは、ネットワーク時間、キュー時間、DNS解決時間、または表示されないロードバランサーからの遅延などの多くの領域での遅延が原因である可能性があります。 B.サーバースパンが開始する前にクライアントスパンが開始および終了する場合、これはクロックスキューが原因であるか、サーバーが応答の送信後に継続する非同期作業を実行していることが原因である可能性があります。 C.クライアントスパンがサーバースパンの後に開始する場合、これはクロックスキューである可能性があります。
<Collapser id="fragmented-traces" title="断片化された痕跡"
断片化されたトレースは、スパンが欠落しているトレースです。 スパンの欠落または親スパン ID が無効な場合、その子スパンはトレースの残りの部分から分離され、「孤立」状態になります。 孤立したスパンはトレースの下部に表示され、トレースの残りの部分への接続線がなくなります。 断片化されたスパンがある場合は、詳細ページの上部に<DNT>**Fragmented**</DNT>という単語が表示されます。
<img
style={{ width: "70%",align: "left" }}
title="Screenshot showing how to locate a fragmented trace"
alt="Screenshot showing how to locate a fragmented trace"
src={distributedtracingFragmentedTrace}
/>
UI に示される孤立したスパン プロパティのタイプ:
* <DNT>**No root span.**</DNT> リクエストの最初の操作であるルート スパンがありません。 この場合、最も古いタイムスタンプを持つスパンがルートとして表示されます。
* <DNT>**Orphaned span.**</DNT> 親スパンが欠落している単一のスパン。 これは、親スパンの ID が子スパンと一致しないことが原因である可能性があります。
* <DNT>**Orphaned trace fragment.**</DNT> グループ内の最初のスパンが孤立スパンである、接続されたスパンのグループ。
これには以下のような理由があります。
* <DNT>**Collection limits.**</DNT> 一部の高収益アプリケーションでは、収集制限 ( [APMエージェント収集制限](#1k-limit)やAPI制限など) を超える場合があります。 このような状況が発生すると、トレースのスパンが欠落する可能性があります。 この問題を解決する 1 つの方法は、制限に達しないように一部のレポートをオフにすることです。
* <DNT>**Incorrect instrumentation.**</DNT> アプリケーションが誤ってインストゥルメントされた場合、トレースコンテキストを正しく渡さず、トレースが断片化されます。 この問題を解決するには、孤立したスパンを生成しているデータ ソースを調べて、インストゥルメンテーションが正しく行われていることを確認します。 スパンのデータ ソースを見つけるには、そのデータ ソースを選択して、そのスパンの詳細を調べます。
* <DNT>**Spans still arriving**</DNT>一部の親スパンがまだ収集されていない場合は、トレース全体がレポートされるまで一時的なギャップが発生する可能性があります。
* <DNT>**UI display limits.**</DNT> トレースが 10K スパンの表示制限を超えると、孤立したスパンが発生する可能性があります。
<Collapser id="preserved-traces" title="保存された痕跡"
保存されたトレースは、元のトレースのスナップショットに似ています。以前に表示され、保存期間を過ぎた完全なトレースがアーカイブされます。延長保存を購入していない限り、完全なトレースは 7 日間のみ利用できます (これは UI に自動的に反映されます)。ただし、保存されたトレースは最長 1 年間存在し、通常は元のトレースと同様に機能します。
保存されたトレースには、スパン パフォーマンス データやスパン異常データは表示されないことに注意してください。保存されたトレース内のエンティティが削除されたり、有効期限が切れたり、データのレポートが停止されたりすると、保存されたトレースにアクセスできなくなる可能性があります。
<img
style={{ width: "70%",align: "left" }}
title="Screenshot showing how to locate a preserved trace"
alt="Screenshot showing how to locate a preserved trace"
src={distributedtracingPreservedTrace}
/>
<Collapser id="account-access" title="アカウントへのアクセスに応じてトレース情報を難読化"
他のサービスを監視する New Relic アカウントにアクセスできない場合、スパンやサービスの詳細の一部が UI で難読化されます。難読化には以下のようなものがあります。
* アスタリスクで隠されたスパン名
* サービス名をNew RelicのアカウントIDとアプリIDに変更
アカウントへのアクセスに影響する要因については、 [アカウントへのアクセス](/docs/accounts/accounts-billing/account-structure/factors-affecting-access-features-data/#account-access) をご参照ください。
<Collapser id="1k-limit" title="スパンリミットとサンプリング"
[言語エージェント: アダプティブ サンプリング を](/docs/apm/distributed-tracing/getting-started/how-new-relic-distributed-tracing-works#trace-origin-sampling)参照してください。
<Collapser id="prettified-span-names" title="ウォーターフォールビューでの不完全なスパン名"
スパンのウォーターフォールを表示すると、スパン名が完全なスパン名よりも人間が判読しやすい不完全な形式で表示される場合があります。 完全な名前を見つけるには、そのスパンを選択し、 <DNT>**Full span name**</DNT>を探します。 完全な名前を知っていると、NRQL を使用してそのデータをクエリするときに役立ちます。
<Collapser id="span-counts" title="スパンの欠落、スパン/サービス数の不一致"
トレースには、時々、不足しているスパンやサービスがある(またはあるように見える)場合があります。これは、 [trace list](#trace-list) で表示されるトレースのスパンやサービスの数と、 [trace details](#trace-details) のページで表示される数との間の不一致として現れます。
スパンの欠落やカウントの不一致の理由は以下の通りです。
* <InlinePopover type="apm"/>エージェントが[スパンの収集制限](/docs/distributed-tracing/concepts/how-new-relic-distributed-tracing-works/#trace-origin-sampling)に達した可能性があります。
* ネットワークの遅延やクエリの問題などの理由で、スパンが最初にカウントされても、トレース表示されないことがあります。
* UI が 10K スパンの表示制限に達した可能性があります。
収集されたすべてのスパン (表示されていないスパンも含む) は、 [NRQL でクエリ](/docs/apm/distributed-tracing/ui-data/example-insights-queries-distributed-trace-data)できます。
これらの UI ツールに加えて、「 分散トレース データのクエリ」で NRQL クエリの例を確認することもできます。
<UserJourneyControls nextStep={{"path":"/docs/distributed-tracing/ui-data/trace-details/","title":"次のステップ:","body":"トレース詳細 UI を理解する"}}/>