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

Application Real-Time Monitoring Service:ARMS の収束ポリシー

最終更新日:Sep 10, 2026

Application Real-Time Monitoring Service (ARMS) エージェントは、リクエスト数、エラー数、応答時間などのメトリックデータを収集します。データの多様性と精度を向上させるため、メトリックには IP アドレス、SQL ステートメント、URL などのディメンションが含まれます。

一部のディメンションでは、高カーディナリティとして知られる多数の一意の値が生成されることがあります。たとえば、URL テンプレートが /api/v1/users/{ID}/info の RESTful API は、ユーザー ID ごとに異なる URL を生成します。高カーディナリティは、ストレージに負荷をかけ、書き込み損失やクエリの低速化を引き起こし、コストを増大させます。

この問題に対処するため、ARMS は高カーディナリティのディメンション値を正規化されたプレースホルダーに置き換える収束ポリシーを適用します。

説明 ARMS エージェント V4.x 以降では、すべての収束がエージェント上で実行され、100% のデータ精度が提供されます。元の値と収束後の値の両方がトレースデータに記録されます。収束前の元の値を確認するには、Trace Explorer を使用してください。

クイックリファレンス:収束フォーマット

次の表は、プレースホルダーのフォーマットと、それぞれが表示されるシナリオをまとめたものです。

フォーマットシナリオ
{ARMS_IP}:port同じポートにアクセスする IP アドレスの数がしきい値 (デフォルト:50) を超えた場合。
{ARMS_STATIC_REQ} または {ARMS_S_XXX}URL が静的リソースを指している場合。
{ARMS_ATTACK_REQ}URL にサイバー攻撃に悪用される可能性のある文字列が含まれている場合。
{ARMS_PARAMED_REQ}URL にクエリパラメーターが含まれている場合。
{ARMS_OTHERS}ある期間内に記録されたディメンション値の数がカーディナリティスペースのしきい値を超えた場合。デフォルトのしきい値については、カーディナリティスペースの収束をご参照ください。
{ARMS_NUMBER}URL のパスセグメント (/ で分割) がすべて数字で、長すぎるか、または非常に多様である場合。
{ARMS_WORD}URL のパスセグメント (/ で分割) がすべて単語で、長すぎるか、または非常に多様である場合。
{ARMS_ANY}URL のパスセグメント (/ で分割) が英数字の混合文字列で、長すぎるか、または非常に多様である場合。
{XXX}URL が Spring Controller アノテーションを使用している場合。
*メモリ統計ベースの収束 (ARMS エージェント V4.x 未満のみ)。

収束ポリシー

すべての収束ポリシーはデフォルトで有効になっています。カーディナリティスペースの収束を除くすべてのポリシーは、手動で無効にできます。

説明 各ポリシーは特定のデータの型をサポートしています。サポートされるデータの型は、以下の各ポリシーのセクションで指定されています。

Spring アノテーションベースの収束

パス変数を持つ RESTful API の場合、生のリクエスト URL をディメンション値として使用すると拡散が発生します。ARMS は、Spring のルーティングアノテーション (@RequestMapping など) からパス情報を読み取り、代わりにアノテーションで定義されたパスをディメンション値として使用します。

プロパティ詳細
ロジックSpring URL のルーティングアノテーションからパス情報を読み取ります。
フォーマットルーティングアノテーションで設定された値。
サポートされるデータの型URL (インバウンドサービス URL のみ。アウトバウンド URL はサポートされていません)。
場所ARMS エージェント
サポートされるエージェントバージョン2.9.1.2 以降

例

次の APIController は、パス変数を使用してユーザー情報を取得する RESTful エンドポイントを定義します。@RequestMapping("/api/v1/user/{userId}/info") アノテーションは URL パターンを指定します。

@RestController
@RequestMapping("/api/v1")
public class APIController {

    @RequestMapping("/user/{userId}/info")
    public String getUserInfo(@PathVariable("userId") String userId) {
        return "hello " + userId;
    }
}

結果:/api/v1/user/1234/info は /api/v1/user/{userId}/info に収束されます。

メモリ統計ベースの収束

Spring Web フレームワークを使用しないアプリケーションや、アノテーションベースの収束が失敗した場合、ARMS はメモリ統計ベースの収束にフォールバックします。

説明 このポリシーは、ARMS エージェント V4.x 未満のバージョンにのみ適用されます。
プロパティ詳細
ロジック1. 事前定義されたデリミタ (/ や = など) で各入力を分割し、用語のセットを識別します。2. 各位置での一意の値の数 (カーディナリティ) をカウントします。カーディナリティが事前定義されたしきい値を超えた場合、その位置の用語は * に置き換えられます。
フォーマット* を含む文字列。
サポートされるデータの型すべて
場所ARMS エージェント
サポートされるエージェントバージョン2.x、および 2.x より後で 4.x より前のバージョン

例

アプリケーションが URL テンプレート /api/v1/user/${userId}/info を提供します。メモリ統計モジュールはユーザー ID の拡散を検出し、URL を /api/v1/user/*/info に収束させます。

カスタム収束

カスタム収束ルールを定義して、URL を正規表現と照合し、指定されたターゲットに置き換えます。

プロパティ詳細
ロジックカスタム収束ルールを順次照合します。最初に一致したルールが適用されます。
フォーマット設定によって決まります。
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

例

カスタムルール:/api/v1/user/[\d]+/info に一致するすべての URL を /api/v1/getUserInfo に収束させます。

結果:正規表現 /api/v1/user/[\d]+/info に一致するすべての URL は /api/v1/getUserInfo に収束されます。

静的リソースの収束

一部の古いバージョンの ARMS エージェントは、静的リソースのメトリックを監視します。静的リソースの URL は頻繁に変更されるため、これらのメトリックではデフォルトで収束が有効になっています。

プロパティ詳細
ロジックURL のサフィックスが静的リソース拡張子のデフォルトリストと一致するかどうかを確認します。一致する場合、URL は収束されます。
フォーマットデフォルト:{ARMS_STATIC_REQ}。チケットを送信して詳細設定を有効にすると、フォーマットにはリソースのサフィックスが含まれます (例:{ARMS_S_JPG})。
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

デフォルトの静的リソース拡張子:

.log .7z .tgz .jpg .jpeg .png .gif .css .js .ico .woff2 .xml .svg .pdf .txt .text .ppt .word .xlsx .tar.gz .tar.bz2 .sh .yml .yaml .zip .gz .ttf .woff .eot .rar .properties

例

デフォルトでは、/api/v1/hello.jpg は {ARMS_STATIC_REQ} に収束されます。詳細設定を有効にすると、{ARMS_S_JPG} に収束されます。

サイバー攻撃リクエストの収束

サービスはサイバー攻撃リクエスト (例えば、/etc/passwd ファイルの読み取り試行など) を受信することがあります。これらのリクエストは攻撃者によって作成され、頻繁に変更されます。これらすべてを記録すると、ストレージリソースに負荷がかかります。

プロパティ詳細
ロジックURL にサイバー攻撃で一般的に悪用される文字が含まれているかどうかを確認します。含まれている場合、URL は収束されます。
フォーマット{ARMS_ATTACK_REQ}
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

デフォルトの文字:' $ \ ' !

例

/app/v1/user/info?cmd='more /etc/passwd' は {ARMS_ATTACK_REQ} に収束されます。

クエリパラメーターの収束

デフォルトでは、ARMS エージェントは URL を収集する際にクエリパラメーターをキャプチャしません。ただし、一部の URL には拡散を引き起こす可能性のあるクエリパラメーターが含まれています。

プロパティ詳細
ロジックURL にクエリパラメーターが含まれているかどうかを確認します。含まれている場合、URL は収束されます。
フォーマットデフォルト:{ARMS_PARAMED_REQ}。チケットを送信して詳細設定を有効にすると、収束結果は URL パスを保持し、パラメーターを {ARMS_REQ_PARAMS} に置き換えます。
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

デフォルトのクエリパラメーターデリミタ:; ? &

例

デフォルトでは、/api/v1/user/info?userId=12345 は {ARMS_PARAMED_REQ} に収束されます。詳細設定を有効にすると、/api/v1/user/info?{ARMS_REQ_PARAMS} に収束されます。

無意味な単語の収束

長すぎる単語や数字の文字列を持つ URL は、拡散する可能性が高くなります。ARMS は、指定された長さのしきい値を超えるパスセグメントを置き換えます。

プロパティ詳細
ロジックURL をスラッシュ (/) で用語の配列に分割し、各用語を次の長さのしきい値と照合します:最大単語長 (64 文字)、最大数字長 (10 文字)、および単語内の最大数字長 (10 文字)。
フォーマット長すぎる数字:{ARMS_NUMBER}。長すぎる単語:{ARMS_WORD}。長すぎる英数字混合文字列:{ARMS_ANY}。
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

例

/api/2024040710/hello2024040710 は /api/{ARMS_NUMBER}/{ARMS_ANY} に収束されます。

インテリジェント収束

上記のポリシーが適用された後も、一部の拡散した URL が残る場合があります。ARMS は、アルゴリズムを使用して定期的に収束ルールを生成し、これらの URL を処理します。

プロパティ詳細
ロジック1. アルゴリズムを使用してサンプル URL をグループ化します。2. 各グループの URL パターンを識別し、収束ルールを生成します。3. グループ間で収束ルールをマージします。
フォーマット拡散した数字セグメント:{ARMS_NUMBER}。拡散した文字セグメント:{ARMS_WORD}。拡散した英数字混合セグメント:{ARMS_ANY}。
サポートされるデータの型URL
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

例

/api/product/1/info
/api/product/2/info
....
/api/product/N/info

サーバーは、正規表現 /api/product/[\d]+/info を使用してこれらの URL を照合し、/api/product/{ARMS_NUMBER}/info に収束させます。

SQL の正規化

ARMS エージェントは、シャーディング、アノテーション、またはインラインリテラルが原因で、多数の SQL ステートメントを収集する場合があります。ARMS は、拡散した値を置き換えることで各 SQL ステートメントを正規化します。

プロパティ詳細
ロジック1. アノテーションを削除します。2. プレーンテキストを置き換えます。3. シャーディングされたデータベース名とテーブル名を置き換えます。
フォーマット相違する数字または文字は置き換えられます。
サポートされるデータの型SQL
場所ARMS エージェント
サポートされるエージェントバージョン4.x 以降

例

select * from cache_0 where ckey='23'

結果:

select * from cache_{NUM} where ckey=?

IP アドレスの収束

アプリケーションが IP アドレスを介してアクセスされる多くの外部サービスに依存している場合、ARMS エージェントは多数の一意の IP アドレスを収集し、拡散を引き起こす可能性があります。

プロパティ詳細
ロジック1. ポートごとに IP アドレスをグループ化します。2. グループ内の IP アドレスの数がしきい値 (デフォルト:50) を超えた場合に収束を適用します。
フォーマット{ARMS_IP}:port
サポートされるデータの型IP
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

例

1.1.1.1:8080
...
1.1.1.255:8080

これらの IP アドレスは {ARMS_IP}:8080 に収束されます。

カーディナリティスペースの収束

上記のポリシーは、URL におけるほとんどの高カーディナリティの問題を解決します。ただし、SQL ステートメントやその他のデータの型では、依然として多数のディメンション値が記録される可能性があります。これを防ぐため、ARMS は各期間内に記録されるディメンション値の数を制限します。

説明 このポリシーは手動で無効にすることはできません。
プロパティ詳細
ロジック1. 固定サイズのカーディナリティスペースを定期的に生成します。2. 各ディメンション値について、カーディナリティスペースに存在するかどうかを確認します。存在する場合は、値はそのまま返されます。存在しない場合は、値がカーディナリティスペースに追加されます。スペースがいっぱいの場合、{ARMS_OTHERS} が返されます。
フォーマット{ARMS_OTHERS}
サポートされるデータの型すべて
場所ARMS エージェント V4.x 以降:エージェント。ARMS エージェント V4.x 未満:サーバー。
サポートされるエージェントバージョンすべて

時間ごとのデフォルトしきい値

項目時間ごとのしきい値
URL インターフェイス500
スケジューリングタスク1,000
RPC インターフェイス1,000
アップストリームインターフェイス200
通常 SQL 呼び出し100
低速 SQL 呼び出し100
外部リクエスト URL200
外部リクエストアドレス100

例

カーディナリティスペースのサイズが 1 時間あたり 100 レコードに設定されているとします。外部サービスアドレス:

www.a1.com
www.a2.com
....
www.a1000.com

1 時間あたり最初の 100 アドレスのみが記録されます。それ以降のアドレスは {ARMS_OTHERS} に収束されます。

実行順序

収束ポリシーは、以下にリストされている順序で順次実行されます。ディメンション値がポリシーに一致すると、残りのポリシーはスキップされます。

ARMS エージェント V4.x 未満

エージェント側:

  • URL: Spring アノテーションベースの収束 > メモリ統計ベースの収束

  • SQL: メモリ統計ベースの収束

  • IP およびその他: メモリ統計ベースの収束

サーバー側:

  • URL: カスタム収束 > サイバー攻撃リクエストの収束 > クエリパラメーターの収束 > 静的リソースの収束 > 無意味な単語の収束 > インテリジェント収束 > カーディナリティスペースの収束

  • SQL: カスタム収束 > カーディナリティスペースの収束

  • IP およびその他: カスタム収束 > IP アドレスの収束 > カーディナリティスペースの収束

ARMS エージェント V4.x 以降

エージェント側:

  • URL: Spring アノテーションベースの収束 > カスタム収束 > サイバー攻撃リクエストの収束 > クエリパラメーターの収束 > 静的リソースの収束 > 無意味な単語の収束 > インテリジェント収束 > カーディナリティスペースの収束

  • SQL: カスタム収束 > SQL の正規化 > カーディナリティスペースの収束

  • IP およびその他: カスタム収束 > IP アドレスの収束 > カーディナリティスペースの収束

サーバー側: N/A (すべての収束はエージェントで実行されます)。

よくある質問

収束前の元の値を確認する方法

  • ARMS エージェント V4.x 以降: 元の値と収束後の値の両方がトレースデータに記録されます。元の値を確認するには、Trace Explorer を使用してください。

  • ARMS エージェント V4.x 未満: 収束はサーバー側で行われるため、元の値は利用できません。

カスタム収束ルールの設定方法

ARMS コンソールでカスタム収束ルールを定義します。アプリケーション詳細ページで、上部のナビゲーションバーから [設定] > [収束] を選択します。

image

たとえば、正規表現 /api/v1/user/\d+/info を指定して、一致するすべての URL を /api/v1/user/userId/info に収束させます。これにより、URL /api/v1/user/124343543/info は /api/v1/user/userId/info に収束されます。

特定の URL を収束から除外する方法

ARMS コンソールで、収束から除外する URL を指定します。前の質問で説明したのと同じ [設定] > [収束] ページに移動します。

たとえば、/api/v1/user/9999/info を収束から除外した場合、この URL は /api/v1/user/userId/info には収束されません。

エージェント側の収束とサーバー側の収束の違い

エージェント側の収束は、データをサーバーにレポートする前に ARMS エージェント上でデータを処理します。これにより、サーバーの処理負荷が軽減され、100% のデータ精度が提供されます。

サーバー側の収束は、エージェントのバージョンが特定のポリシーをサポートしていない場合に適用されます。エージェント側の収束がない場合、エージェントは未収束のデータパケットをサーバーに送信します。大きなパケットは、次の 2 つのリスクを生じさせます:

  • データ損失: 過度に大きなパケットは拒否される可能性があります。

  • 精度の低下: サーバー側の処理制限により、収束データの精度が影響を受ける可能性があります。

最新バージョンの ARMS エージェントにアップグレードして、すべての収束ポリシーをエージェント上で実行してください。