すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:ARMS エージェント V3.2.8 以降のトレースサンプリングモードを選択する

最終更新日:Mar 13, 2025

このトピックでは、Application Real-Time Monitoring Service (ARMS) でサポートされているトレースサンプリングモードについて説明します。シナリオに基づいて適切なモードを選択することで、必要なトレースデータを低コストで取得できます。

用語

  • span: リモート呼び出しや内部メソッド呼び出しなど、リクエスト内の特定の操作。

  • root span: トレース内の最初の span。

  • local root span: 単一 サービス内のトレースの最初の span。

  • span context: span のコンテキスト。 span context は、リクエスト内の特定の操作に関連付けられています。

  • head-based sampling: root span で事前にサンプリングの決定を行い、トレース全体がサンプリングされるようにします。

  • non-head based sampling: head-based sampling がトリガーされない場合に有効になり、トレース内の任意の local root span でトリガーされる可能性があります。ほとんどの場合、トレースの整合性は保証されません。

サンプリングポリシーとマーク

ARMS は、重要なトレースデータをサンプリングするために、2 つの head-based sampling ポリシーと 3 つの non-head based sampling ポリシーを提供します。

サンプリングマーク

サンプリングマークは、EagleEye プロトコルを使用してプロセス間でトレースコンテキストが渡される場合に、トレースデータをサンプリングするかどうかを指定します。 リクエストヘッダーのキーは EagleEye-Sampled で、有効な値は次のとおりです。

  • s0: サンプリングされない

  • s1: サンプリングされる

サンプリングマークは、トレースデータがサンプリングされる local root span にサンプリング理由を記録することもできます。マークは属性の形式で span に格納されます。キーは sample.reason で、有効な値は次のとおりです。

  • s2: すべてのインターフェイスの最小サンプリング

  • s3: カスタムサンプリング

  • s4: 固定レートサンプリング

  • s5: 予約済み

  • s6: アダプティブサンプリング

  • s7: 予約済み

  • s8: Basic Edition サンプリング

  • s9: 失敗したリクエストのサンプリング

  • s10: 低速なリクエストのサンプリング

  • s11: 異常な呼び出しのサンプリング

Head-based sampling ポリシー

ARMS は、固定レートサンプリングとアダプティブサンプリングの 2 つの head-based sampling ポリシーをサポートしています。固定レートサンプリングは、最も一般的な head-based トレースサンプリングポリシーです。アダプティブサンプリングは、ARMS によって開発された費用対効果の高い head-based sampling ポリシーです。

固定レートサンプリング

トレースは、イングレス サービスで指定されたサンプリングレートに基づいてサンプリングされます。サンプリングされた span には、キーが sample.reason で値が s4 である属性が含まれています。image

固定レートサンプリングポリシーを設定するには、次の手順を実行します。

  1. ARMS console にログインします。左側のナビゲーションウィンドウで、[アプリケーション監視] > [アプリケーションリスト] を選択します。

  2. [アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。

    説明

    [言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。

    Java图标: Java アプリケーション

    image: Go アプリケーション

    image: Python アプリケーション

    ハイフン ([-]): Managed Service for OpenTelemetry で監視されるアプリケーション。

  3. 上部のナビゲーションバーで、[構成] > [カスタム構成] を選択します。

  4. [サンプリング設定] セクションで、サンプリングレートを設定できます。 [サンプリング戦略] パラメーターを [固定サンプリングレート] に設定します。 [サンプルレートの割合] フィールドにパーセント値を入力します。たとえば、10 と入力すると、サンプリングレートは 10% になります。

    説明

    変更はすぐに有効になります。アプリケーションを再起動する必要はありません。デフォルト値は 10 です。サンプリングレートを上げると、追加のシステムリソースが消費されます。デフォルト値を維持することをお勧めします。

  5. [保存] をクリックします。

アダプティブサンプリング

ビジネスによってトラフィックが大きく異なる場合があります。インターフェイス読み取りトラフィックは、書き込みトラフィックよりもはるかに大きいことが多く、インターフェイス書き込みに関連するトレースデータは、インターフェイス読み取りに関連するトレースデータよりも重要です。重要なトレースデータと重要度の低いトレースデータ間のサンプリングの不均衡を防ぐために、ARMS はアダプティブサンプリングを提供します。リクエストが最も多い 1,000 のインターフェイスのトレースは、LFU (Least Frequently Used) アルゴリズムに基づいて個別にサンプリングされます。これらのトレースごとに 1 分あたり 10 個のトレースがサンプリングされ、他のすべてのインターフェイスに対して 1 分あたり 10 個のトレースがサンプリングされます。サンプリングされた span には、キーが sample.reason で値が s6 である属性が含まれています。image

アダプティブサンプリングポリシーを設定するには、次の手順を実行します。

  1. ARMS console にログインします。左側のナビゲーションウィンドウで、[アプリケーション監視] > [アプリケーションリスト] を選択します。

  2. [アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。

    説明

    [言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。

    Java图标: Java アプリケーション

    image: Go アプリケーション

    image: Python アプリケーション

    ハイフン ([-]): Managed Service for OpenTelemetry で監視されるアプリケーション。

  3. 上部のナビゲーションバーで、[構成] > [カスタム構成] を選択します。

  4. [サンプリング設定] セクションで、[サンプリング戦略] パラメーターを [アダプティブサンプリング] に設定します。

    説明

    変更はすぐに有効になります。アプリケーションを再起動する必要はありません。

  5. [保存] をクリックします。

Non-head based sampling ポリシー

Head-based sampling は、トレース内の任意の span でトリガーされる可能性があり、トレースの整合性は保証されません。低速なリクエストまたは失敗したリクエストに関連する span や、頻度の低い span またはユーザー定義の span など、関心のある重要なトレースデータをすべてサンプリングできない場合があります。

すべてのインターフェイスの最小サンプリング

各インターフェイスのトレースは、1 分間に少なくとも 1 回自動的にサンプリングされます。サンプリングされた span には、キーが sample.reason で値が s2 である属性が含まれています。

image

失敗したリクエストまたは低速なリクエストのサンプリング

重要

失敗したリクエストまたは低速なリクエストのトレースをサンプリングする前に、アプリケーション詳細ページに移動し、上部のナビゲーションバーから [構成] > [カスタム構成] を選択し、[詳細設定] セクションの [呼び出しチェーンの圧縮] スイッチをオンにします。このスイッチはデフォルトでオンになっています。

リクエストが次のいずれかの条件を満たす場合、関連するトレースは自動的にサンプリングされます。

  • HTTP インターフェイスの場合、200 以外の状態コードが返されます。他のインターフェイスの場合、イベントトラッキングに使用されるメソッドによって例外がスローされます。

  • インターフェイスの内部実行中に例外が発生し、フレームワークのイングレス サービスにスローされません。

  • 操作呼び出しの時間が、[カスタム構成] ページで構成された低速呼び出しのしきい値を超えています。

    説明

    分位数が有効になっている場合、その操作の 99 パーセンタイルを超える時間がかかる呼び出しも、低速呼び出しのサンプリングルールに一致します。

サンプリングされた span には、キーが sample.reason で値が s9s11、または s10 である属性が含まれています。具体的な値は、どの条件が満たされるかによって異なります。

image.png

カスタムサンプリング

名前、プレフィックス、またはサフィックスを指定して、トレースを完全にサンプリングするインターフェイスを指定できます。サンプリングされた span には、キーが sample.reason で値が s3 である属性が含まれています。

image.png

カスタムサンプリングポリシーを設定するには、次の手順を実行します。

  1. ARMS console にログインします。左側のナビゲーションウィンドウで、[アプリケーション監視] > [アプリケーションリスト] を選択します。

  2. [アプリケーションリスト] ページで、上部のナビゲーションバーでリージョンを選択し、管理するアプリケーションの名前をクリックします。

    説明

    [言語] 列に表示されるアイコンは、アプリケーションが記述されている言語を示します。

    Java图标: Java アプリケーション

    image: Go アプリケーション

    image: Python アプリケーション

    ハイフン ([-]): Managed Service for OpenTelemetry で監視されるアプリケーション。

  3. 上部のナビゲーションバーで、[構成] > [カスタム構成] を選択します。

  4. [サンプリング設定] セクションで、インターフェイス名、プレフィックス、またはサフィックスを指定します。

    説明

    変更はすぐに有効になります。アプリケーションを再起動する必要はありません。

  5. [保存] をクリックします。

フローチャート

A、B、C の 3 つの サービス間で生成されるトレースを例に挙げます。上記のサンプリングポリシーによって、span がサンプリングされるかどうかが決まります。次のフローチャートは、サンプリングの決定方法を示しています。各決定は、リクエストが A、B、または C にあるとき、および現在の span が local root span か root span かによって行う必要があります。

フローチャートでは、次の色が使用されています。

  • 紫: トレースの root span でのみトリガーされる head-based sampling を示します。A では 1 つのサンプリング決定のみが行われます。

  • 青: head-based sampling がトリガーされない場合、トレース内の任意の span でサンプリングをトリガーします。A がサンプリングしないことを決定したとします。リクエストが B にあるとき、B はカスタムサンプリング、最小サンプリング、またはそのいずれも実装しないかを決定します。サンプリングが実装されている場合、span に添付された属性は C に渡されます。A、B、C で 3 つのサンプリング決定が行われます。

  • 緑: head-based sampling、カスタムサンプリング、および最小サンプリングがトリガーされない場合、トレース内の任意の span でサンプリングをトリガーします。A がサンプリングしないことを決定したとします。リクエストが B にあるとき、B はリクエストが低速か失敗したか、およびサンプリングを実装するかどうかを決定します。サンプリングが実装されている場合、span に添付された属性は C に渡されません。A、B、C で 3 つのサンプリング決定が行われます。

参照

トレースがサンプリングされた後、フィルター条件と集約ディメンションを構成して、トレースデータをリアルタイムで分析できます。詳細については、「トレース分析」をご参照ください。