APM の用語と概念

APM UI には、アプリケーションのパフォーマンスをトラブルシューティングし、これを製品全体で関連付けるための多くのツールが用意されています。これは、分散されたシステムの問題を見つけて解決するのに役立ちます。

コンセプト説明
サービスサービスは、最新のマイクロサービスアーキテクチャの構成要素です。サービスは、アプリケーションを構築する目的で、エンドポイント、クエリ、またはジョブを広くグループ化します。
リソースリソースは、顧客アプリケーションの特定のドメインを表します。通常、これはインスツルメントされたウェブエンドポイント、データベースクエリ、またはバックグラウンドジョブです。
モニターAPM メトリクスモニターは、通常のメトリクスモニターと同様に機能しますが、APM 専用に調整されたコントロールを備えています。このモニターを使用して、ヒット、エラー、さまざまなレイテンシー測定に関するサービスレベルでアラートを受信します。
トレーストレースは、アプリケーションがリクエストを処理するのにかかった時間とこのリクエストのステータスを追跡するために使用されます。各トレースは、1 つ以上のスパンで構成されます。
スパンスパンは、特定の期間における分散システムの論理的な作業単位を表します。複数のスパンでトレースが構成されます。
サービスエントリスパンスパンとは、サービスへのリクエストに対するエントリーポイントメソッドとなるサービスエントリスパンを指します。フレームグラフ上の直属の親のカラーが異なる場合、この値を Datadog APM 内で可視化することができます。
トレースルートスパンスパンがトレースのエントリポイントになる場合、ルートスパンとなります。そのスタートは、トレースの開始を示します
トレースメトリクストレースメトリクスは自動的に収集され、他の Datadog メトリクスと同様の 15 か月の保持ポリシーで保持されます。これを使用して、ヒット、エラー、またはレイテンシーを特定し、アラートを発信することができます。統計およびメトリクスは、常に_すべての_トレースに基づき算出されるため、Ingestion controls による影響を受けません。
Indexed SpanIndexed Span は、Retention Filter またはレガシー版の App Analytics で分析されたスパンによりインデックスされたすべてのスパンを表し、Analytics での検索、クエリ、監視に使用することができます。
スパンタグTrace View でリクエストを関連付けたり、Analytics でフィルターしたりするためのキーと値のペアの形式のタグスパン。
Retention FiltersRetention Filter は Datadog UI 内に設定されたタグベースのコントロールで、15 日間にわたって Datadog でインデックスするスパンの種類を決定します。
Ingestion ControlsIngestion controls は Datadog に最大 100% のトレースを送信し、 15 分間の Live Search および分析を行う際に使用されます。
サブレイヤーメトリクスサブレイヤーメトリクスはトレース内における任意のタイプ / サービスの実行時間を指します。
実行時間スパンが ‘active’ と判断される合計時間 (子スパンの完了まで待機しません) 。

サービス

アプリケーションのインスツルメンテーションの後、サービス一覧画面が APM データのメインランディングページになります。

サービス一覧画面

サービスは、最新のマイクロサービスアーキテクチャの構成要素です。サービスは、インスタンスをスケーリングする目的で、エンドポイント、クエリ、またはジョブを広くグループ化します。以下はその例です。

  • URL エンドポイントのグループは、API サービスの下でグループ化できます。
  • 1 つのデータベースサービス内でグループ化された DB クエリのグループ。
  • crond サービスで構成された定期的なジョブのグループ。

以下のスクリーンショットは、e コマースサイトビルダー向けのマイクロサービス分散システムです。web-storead-serverpayment-dbauth-service はすべて、APM のサービスとして表されます。

サービスマップ

すべてのサービスはサービス一覧画面にあり、サービスマップに視覚的に表示されます。各サービスには独自のサービス詳細画面があり、スループット、レイテンシー、エラー率などのトレースメトリクスを表示および検査できます。これらのメトリクスを使用して、ダッシュボードウィジェットの作成、モニターの作成、およびサービスに属するウェブエンドポイントやデータベースクエリなどのすべてのリソースのパフォーマンスの確認を行います。

サービス詳細画面に期待していた HTTP エンドポイントが表示されませんか?APM では、エンドポイントはサービス名以上でサービスに接続されます。また、トレースのエントリポイントスパンの `span.name` を使用して行われます。たとえば、上記のウェブストアサービスでは、`web.request` がエントリポイントスパンです。詳細についてはこちらをご覧ください。

リソース

リソースは、顧客アプリケーションの特定のドメインを表します。通常は、インスツルメントされたウェブエンドポイント、データベースクエリ、またはバックグラウンドジョブです。ウェブサービスの場合、これらのリソースは、静的なスパン名 web.request でグループ化された動的なウェブエンドポイントの場合があります。データベースサービスでは、スパン名が db.query のデータベースクエリになります。たとえば、web-store サービスには、チェックアウト、updateing_carts、add_item などを処理するリソース(ウェブエンドポイント)が自動的にインスツルメントされています。各リソースには、特定のエンドポイントにスコープされたトレースメトリクスを持つ独自のリソースステータス画面があります。トレースメトリクスは、他の Datadog メトリクスと同様に使用できます。ダッシュボードにエクスポートしたり、モニター作成に使用したりできます。リソースステータス画面には、すべてのトレーススパンの集約ビュー、リクエストのレイテンシー分布、およびこのエンドポイントに対して行われたリクエストを示すトレースを含むスパンサマリーウィジェットも表示されます。

トレース

トレースは、アプリケーションがリクエストを処理するのにかかった時間とこのリクエストのステータスを追跡するために使用されます。各トレースは、1 つ以上のスパンで構成されます。リクエストの存続期間中、サービス全体の分散呼び出し(HTTP ヘッダーを介して trace-id が挿入/抽出されるため)、自動的にインスツルメントされたライブラリOpenTracing などのオープンソースツールを使用した手動インスツルメンテーションをフレームグラフビューで見ることができます。トレースビューページで、各トレースは、ログをトレースに接続するタグをスパンに追加するランタイムメトリクスを収集するなど、プラットフォームの他の部分に接続する情報を収集します。

トレースビュー

スパン

スパンは、特定の期間におけるシステム内の論理的な作業単位を表します。各スパンは、span.name、開始時間、期間、およびスパンタグで構成されます。たとえば、スパンは、別のマシンでの分散呼び出しに費やされた時間、または大きなリクエスト内の小さなコンポーネントに費やされた時間を表すことができます。スパンは相互にネストでき、これによりスパン間に親子関係が作られます。

以下の例では、スパン rack.request はトレースのエントリーポイントスパンです。これは、ウェブストアのサービス詳細画面が rack.request という名前のエントリーポイントスパンを持つトレースで構成されるリソースを表示していることを意味します。この例では、アプリケーション側に追加されたタグ(merchant.store_namemerchant.tier など)も示されています。これらのユーザー定義のタグは、Analytics で APM データを検索、分析するために使用できます。

スパン

サービスエントリスパン

スパンとは、サービスへのリクエストに対するエントリーポイントメソッドとなるサービスエントリスパンを指します。フレームグラフ上の直属の親のカラーが異なる場合、この値を Datadog APM 内で可視化することができます。フレームグラフ画面の右側にはサービスの一覧も表示されます。

トレースルートスパン

スパンがトレースの最初のスパンになる場合、トレースルートスパンとなります。ルートスパンは、トレースされたリクエストのエントリポイントメソッドです。そのスタートは、トレースの開始を示します。

以下の例におけるサービスエントリスパンは次の通りです。

  • rack.request (_ルートスパン_でもある)
  • aspnet_coremvc.request
  • 以下で最上位にある緑色のスパン aspnet_coremvc.request
  • オレンジ色の各 mongodb スパン
スパン

スパンサマリー

スパンサマリーテーブルには、すべてのトレースでスパンが表示される頻度、トレースの何パーセントにスパンが含まれるか、スパンの平均期間、リクエストの合計実行時間の一般的な割合など、すべてのトレースで集計されたスパンのメトリクスが表示されます。これにより、コード内の N+1 問題を検出し、アプリケーションのパフォーマンスを向上させることができます。

スパンサマリーテーブルは、サービスエントリースパンを含むリソースにのみ利用可能です。

スパンサマリーテーブルには、以下の列が含まれます。

Average spans per trace
スパンが少なくとも 1 回存在する、現在のリソースを含むトレースのスパンの平均発生回数。
Percentage of traces
スパンが少なくとも 1 回存在する現在のリソースを含むトレースの割合。
Average duration
スパンが少なくとも 1 回存在する、現在のリソースを含むトレースのスパンの平均期間。
Average percentage of execution time
スパンが少なくとも 1 回存在する、現在のリソースを含むトレースについて、スパンがアクティブだった実行時間の平均比率。
スパンサマリーテーブル

トレースメトリクス

トレースメトリクスは自動的に収集され、他の Datadog メトリクスと同様の 15 か月の保持ポリシーで保持されます。これを使用して、ヒット、エラー、またはレイテンシーを特定し、アラートを発信することができます。トレースメトリクスは、サービスまたはリソースとともにトレースを受信するホストによってタグ付けされます。たとえば、ウェブサービスをインスツルメントした後、Metric Summary のエントリポイントスパン web.request のトレースメトリクスが収集されます。

ダッシュボード

トレースメトリクスは、Service または Resource ページからダッシュボードにエクスポートできます。さらに、既存のダッシュボードからトレースメトリクスを照会できます。

モニタリング

トレースメトリクスは、監視に役立ちます。APM モニターは、New MonitorsService、または Resource ページで設定できます。推奨されるモニターのセットは、Service または Resource ページで利用できます。

トレースエクスプローラー

15 分間で収集されたトレースの 100% および 15 日間におけるすべての Indexed Span探索および分析を実行します。

Indexed Span

Indexed Span は、Datadog に 15 日間保管された [Retention Filter](#Retention Filters) でインデックスされたスパンを表し、スパンに含まれるタグによるトレース検索および Analytics での検索、クエリ、監視に使用することができます。

取り込み後にタグベースの Retention Filter を作成して、サービスごとにインデックス化されたスパンの正確な数を制御および可視化することができます。

スパンタグ

Trace View でリクエストを関連付けたり、Analytics でフィルターしたりするためのキーと値のペアの形式のタグスパン。タグは、単一のスパンに追加することも、すべてのスパンにグローバルに追加することもできます。以下の例では、リクエスト(merchant.store_namemerchant.tier など)がタグとしてスパンに追加されています。

スパンタグ

アプリケーションのスパンをタグ付けするには、このチュートリアルをご覧ください。

タグがスパンに追加されたら、タグをクリックしてファセットとして追加し、Analytics でタグを検索およびクエリします。これが完了すると、このタグの値はすべての新しいトレースに保存され、検索バー、ファセットパネル、トレースグラフクエリで使用できます。

ファセットの作成

Retention Filters

Datadog UI でタグベースのフィルターを設定して 15 日間のスパンをインデックスし、トレース検索と Analytics で使用できるようにします。

Ingestion controls

サービスから Datadog にトレースの 100% を送信し、[タグベースの Retention Filter](#Retention Filters) と結合させて 15 日間で最もビジネス的に重要なトレースを維持します。

サブレイヤーメトリクス

トレーシングアプリケーションメトリクスsublayer_servicesublayer_type でタグ付けし、トレース内のサービスの実行時間を個別に確認することもできます。

サブレイヤーメトリクスは、サービスが下流に依存する場合にのみ利用可能です。

実行時間

実行時間は、あるスパンがアクティブである時間、つまり子スパンを持たない時間を合計して計算されます。非同期の作業では、これは簡単です。下図では、スパン 1 の実行時間は $\D1 + \D2 + \D3$ となります。スパン 2 とスパン 3 の実行時間は、それぞれの幅になります。

実行時間

子スパンが同時進行する場合、実行時間は重複する時間を同時進行するスパンの数で割って計算されます。下図の場合、スパン 2 とスパン 3 は同時進行で (どちらもスパン 1 の子スパン)、スパン 3 の時間だけ重なっているため、スパン 2 の実行時間は $\D2 ÷ 2 + \D3$、スパン 3 の実行時間は $\D2 ÷ 2$ となります。

同時進行作業の実行時間