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

Elasticsearch:Use the cluster throttling plug-in (aliyun-qos)

最終更新日:Apr 21, 2026

`aliyun-qos` プラグインは、Alibaba Cloud Elasticsearch チームが開発したクラスターレベルの読み取り/書き込み速度制限プラグインです。上流サービスでトラフィックを制御できない場合、`aliyun-qos` プラグインを使用して、ビジネスの優先度に基づいて特定のインデックスの速度を制限できます。これにより、トラフィックを管理可能な状態に保ち、ご利用の Elasticsearch クラスターの安定性を確保できます。

注意事項

  • `aliyun-qos` プラグインはプリインストールされており、アンインストールはできません。その速度制限機能はデフォルトで無効になっています。このプラグインは、クラスターの安定性を保護するために設計されており、読み取りおよび書き込みトラフィックを正確に測定するためのものではありません。

  • プラグインのバージョン: `aliyun-qos` プラグインを使用する前に、最新バージョンに更新されていることを確認してください。Kibana コンソールにログインし、GET /_cat/plugins?v を実行してプラグインのバージョンを確認します。

    プラグインバージョンは、<code data-tag="code" id="e636a6365ci3p"><cluster version>_ali<internal version number> のフォーマットです (例: 7.10.0_ali1.6.0.28.17.0_ali2.2.0.4.1)。プラグインバージョンが最新でない場合は、以下の方法を参照してアップグレードしてください。

    • V7.10 クラスターの場合: コンソールで、カーネルをバージョン 1.6.0 にアップグレードします。詳細については、「クラスターバージョンのアップグレード」をご参照ください。

    • その他のクラスターバージョンの場合: Alibaba Cloud サポートにチケットを起票してプラグインをアップグレードします。アップグレード後、新しいバージョンを有効にするには、Elasticsearch クラスターを手動で再起動する必要があります。

    • プラグインのバージョンが rc4 より前の場合、unsupported_operation_exception エラーが発生します。`aliyun-qos` プラグインは、V6.7.0 以降を実行しているクラスターでのみアップグレードできます。それより前のバージョンを実行しているクラスターは、まず V6.7.0 以降にアップグレードする必要があります。

しきい値の評価

`aliyun-qos` プラグインは、クラスターレベルで速度制限を実行します。パフォーマンスのオーバーヘッドを最小限に抑えるため、すべてのノードで読み取りおよび書き込みトラフィックを正確に測定するわけではないため、実際のトラフィックは測定されたトラフィックと異なる場合があります。プラグインを使用する前に、以下のルールに基づいて速度制限のしきい値を評価してください:

  • クエリリクエスト

    クエリリクエストの速度制限しきい値 = クライアントから Elasticsearch へのエンドツーエンドの QPS (クエリ/秒)

    エンドツーエンドの QPS は、クライアントノードに 1 秒あたりに到達するクエリリクエストの数のみを指します。

  • 書き込みリクエスト

    書き込みリクエストの速度制限しきい値の計算ルールはクエリリクエストのルールと似ていますが、レプリカシャードの数に応じて調整が必要です。

    たとえば、2 つのデータノードと 1 つのインデックスを持つクラスターを考えます。インデックスには 1 つのプライマリシャードと 1 つのレプリカシャードがあります。各書き込み操作で 10 MB のデータが送信されます。レプリカシャードが存在するため、各データノードに 10 MB のデータが書き込まれます。さらに、Monitor、Audit、Watcher などの内部 X-Pack タスクも書き込みスループットを消費します。しきい値を設定する際には、このトラフィックのためのキャパシティを確保してください。

速度制限の有効化

`aliyun-qos` プラグインの速度制限機能はデフォルトで無効になっています。使用する前に有効にする必要があります。この機能を有効にするコマンドは、プラグインのバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": true
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": "true"
  }
}

速度制限の無効化

リミッターパラメーターを `false` または `null` に設定することで、速度制限機能を無効にできます。コマンドはバージョンによって異なります。

メソッド

最新の V7.10 バージョン

その他のバージョン

リミッターパラメーターを `false` に設定

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": false
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": "false"
  }
}

リミッターパラメーターを `null` に設定

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": null
  }
}
PUT _cluster/settings
{
  "persistent": {
    "apack.qos.ratelimit.enabled": null
  }
}

リミッターの設定 (最新の V7.10 バージョン)

以下のリミッター設定は、V7.10 クラスター用の `aliyun-qos` プラグインにのみ適用されます。

リミッター設定は、`limiters` と `tags` の 2 つの部分で構成されます。`tags` セクションはリソース制限の範囲を定義し、`limiters` セクションは特定の速度制限タイプとしきい値を定義します。リミッターは標準またはデフォルトにすることができます。タグ値を `**` に設定することで、デフォルトリミッターを作成できます。たとえば、各シャードのデフォルトスループットや、各アプリケーションのデフォルト QPS を設定できます。リクエストが制限を超えると、Elasticsearch は後続のリクエストを拒否します。

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
     ${action}.${limiter_type}:${threshold}
  },
  "tags": {
    ${tagName}:${tagValue}
  },
  "priority":0,
  "params":{
      "watchMode":true
  }
}

パラメーター

説明

action

速度制限の対象となるアクション。異なるタイプのリクエストを制限するために使用されます。

  • write: ドキュメントの書き込みリクエスト。`index` および `create` 操作を含みます。

  • update: ドキュメントの更新リクエスト。

  • delete: ドキュメントの削除リクエスト。

  • search: クエリリクエスト。

  • search_shards: インデックスのシャード総数をクエリするリクエスト。

limiter_type

速度制限タイプ。レート、同時実行数、リクエストごとの制限の 3 つのカテゴリがサポートされています。

  • rate: レート制限。整数のみ受け付けます。

  • qps: クエリレート。整数のみ受け付けます。

  • tps: 書き込みレート。整数のみ受け付けます。

  • throughput: データスループット。`write`、`update`、`delete` アクションでのみサポートされます。単位は GB、MB、KB があります。最大値は 2 GB です。

  • thread_count: 同時リクエスト数を制限します。

  • concurrent_count: リクエストの同時実行数。リクエスト内の特定の操作に基づいて計算されます。たとえば、search_shards.concurrent_count:20 は、最大 20 の同時シャードクエリを許可します。

  • max_per_request: 1 つのリクエスト内の特定のタイプの操作の最大数。たとえば、update.max_per_request:10 は、1 つの Bulk リクエストで最大 10 の更新操作を許可します。

  • max_size_per_request: 1 つのリクエストの最大サイズ。`write`、`update`、`delete` アクションでのみサポートされます。

threshold

速度制限のしきい値。

-1 以上の整数。

一部のタイプは単位付きの文字列をサポートしています。詳細については、`limiter_type` の説明をご参照ください。

tagName

タグ名。

  • node: 現在のノードの名前。

  • is_master: 現在のノードがマスターノードであるかどうかを指定します。対応するタグ値は `true` または `false` です。

  • index: インデックス名。複数のインデックスの場合は、配列を使用します。エイリアスが渡された場合、実際のインデックス名に解決されます。このタグは `IndicesRequest` のサブクラスでのみ使用可能です。

  • shard: シャード名。`index[id]` の形式です。例: `test[0]`。このタグは `ReplicationRequest` のサブクラスでのみ使用可能です。

  • index_in_url: URL からのインデックス文字列。エイリアスが渡された場合、このタグはエイリアスを保持します。このタグは `IndicesRequest` のサブクラスでのみ使用可能です。

tagValue

タグ値。

文字列または文字列の配列。配列が使用された場合、タグは配列内のいずれかの値に一致します。完全一致、ワイルドカード付きのプレフィックス一致、およびすべての値がサポートされています。例:

  • 完全一致: "abc"

  • プレフィックス一致: "ab*"

  • すべての値: "**"

    ワイルドカード値を使用すると、デフォルトのスロットラーが定義されます。これは、このタグの任意の値に対して特定のスロットラーが生成されることを意味します。たとえば、index:"**",search.tps:1 を指定すると、各インデックスの検索レートは、合計検索レートが 1 に制限されるのではなく、デフォルトで 1 に制限されます。

priority

リミッターの優先度。

整数。デフォルト値: 0。

値が大きいほど優先度が高くなります。リクエストが複数のデフォルトリミッターに一致する場合、最も優先度の高いものだけが有効になります。

params

高度なパラメーター。

watchMode: 監視モードを有効にするかどうかを指定します。有効な値: `true` および `false` (デフォルト)。`true` に設定すると、Elasticsearch は拒否されたリクエスト数をメトリクスに記録しますが、制限は強制しません。これにより、ルールを適用する前にその効果をプレビューでき、設定ミスを防ぐことができます。API の詳細については、よくある質問のセクションをご参照ください。

リミッター設定の例

クエリの QPS 速度制限の設定

インデックスにしきい値を設定することで、クライアントノードでのクエリ QPS を制限できます。1 秒あたりのクエリリクエスト数がしきい値を超えると、Elasticsearch は後続のリクエストを拒否します。

`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

アクション

最新の V7.10 バージョン

その他のバージョン

単一インデックスのクエリ QPS 速度制限の設定

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "twitter"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "twitter",
  "search.max_queries_per_sec": 1000
}

特定の名前プレフィックスを持つインデックスのクエリ QPS 速度制限の設定

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "nginx-log-*",
  "search.max_queries_per_sec": 1000
}

各インデックスに個別にクエリ QPS 速度制限を設定

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "**"
  }
}

index:** は任意のインデックスを表します。たとえば、クラスターに A、B、C の 3 つのインデックスがある場合、3 つすべてのインデックスの速度制限値は 1000 になります。

サポートされていません。

すべてのインデックスの合計クエリ QPS 制限を設定

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "*"
  }
}

index:* は任意のインデックスを示します。たとえば、クラスターに A、B、C という名前の 3 つのインデックスがある場合、これら 3 つのインデックスの合計速度制限値は 1000 になります。これは、このタグを設定しない場合と同じ効果があります。

PUT /_qos/_ratelimit/<limiterName>
{
  "search.index_patterns": "*",
  "search.max_queries_per_sec": 1000
}

複数のルールを定義できます。リクエストがいずれかのルールに一致すると、速度制限がトリガーされます。

クエリ QPS が設定された制限を超えると、システムはエラーメッセージを返します。エラーメッセージはバージョンによって異なります:

  • 最新の V7.10 バージョン

    {
      "error": {
        "root_cause": [
          {
            "type": "status_exception",
            "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
          }
        ],
        "type": "status_exception",
        "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
      },
      "status": 429
    }
  • その他のバージョン

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
      },
      "status": 429
    }

書き込みの TPS 速度制限の設定

TPS (トランザクション/秒) のしきい値を設定することで、クライアントノードが受信する 1 秒あたりの書き込みリクエスト数を制限できます。1 秒あたりの書き込みリクエスト数がしきい値を超えると、Elasticsearch は後続のリクエストを拒否します。

`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.tps": "100000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

サポートされていません

Bulk リクエストのスループット速度制限の設定

クライアントノードでの Bulk API リクエストの書き込みスループットを、バイト/秒で制限を設定することで制限できます。書き込みスループットがこの制限を超えると、Elasticsearch は後続のリクエストを拒否します。

`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.throughput": "100MB"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "bulk.index_patterns": "nginx-log-*",
  "bulk.max_throughput_in_bytes": 104857600
}

複数のルールを定義できます。リクエストがいずれかのルールに一致すると、速度制限がトリガーされます。

Bulk リクエストのリクエストサイズ速度制限の設定

クライアントノードで 1 回の Bulk API リクエストのサイズを制限できます。リクエストがこのサイズ制限を超えると、Elasticsearch はそれを拒否します。

`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.max_size_per_request": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT /_qos/_ratelimit/<limiterName>
{
  "bulk.index_patterns": "nginx-log-*",
  "bulk.max_request_size_in_bytes": 1000
}

複数のルールを定義できます。リクエストがいずれかのルールに一致すると、速度制限がトリガーされます。

1 回の書き込みリクエストのサイズが設定された制限を超えると、システムはエラーメッセージを返します。エラーメッセージはバージョンによって異なります:

  • 最新の V7.10 バージョン

    {
      "error" : {
        "root_cause" : [
          {
            "type" : "status_exception",
            "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
          }
        ],
        "type" : "status_exception",
        "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
      },
      "status" : 400
    }
  • その他のバージョン

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
      },
      "status": 413
    }

シャードクエリの同時実行数速度制限の設定

同時シャードクエリ数を設定することで、クラスターの負荷を軽減できます。`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

サポートされていません

複数のルールを定義できます。リクエストがいずれかのルールに一致すると、速度制限がトリガーされます。

複数のリミッター設定

1 つのリミッター設定内に複数の制限を定義できます。`index` と `index_patterns` の値は、完全なインデックス名またはワイルドカード付きの名前にすることができます。コマンドはバージョンによって異なります。

最新の V7.10 バージョン

その他のバージョン

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000",
    "write.tps": "100000",
    "write.throughput": "1000000",
    "write.max_size_per_request": "1000",
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

サポートされていません

複数のルールを定義できます。リクエストがいずれかのルールに一致すると、速度制限がトリガーされます。

リミッター設定の取得

リミッター設定を取得するコマンドは、バージョンによって異なります。

アクション

最新の V7.10 バージョン

その他のバージョン

すべてのリミッター設定の取得

GET /_qos/limiter
GET /_qos/_ratelimit

指定した単一のリミッター設定の取得

GET /_qos/limiter/<limiterName>
GET /_qos/_ratelimit/<limiterName>

指定した複数のリミッター設定の取得。複数のリミッター名はカンマ (,) で区切ります。ワイルドカードはサポートされていません。

GET /_qos/limiter/<limiterName1,limiterName2>
GET /_qos/_ratelimit/<limiterName1,limiterName2>

リミッター設定の削除

リミッター設定を削除するコマンドは、バージョンによって異なります。

アクション

最新の V7.10 バージョン

その他のバージョン

指定した単一のリミッター設定の削除

DELETE /_qos/limiter/<limiterName>
DELETE /_qos/_ratelimit/<limiterName>

指定した複数のリミッター設定の削除。複数のリミッター名はカンマ (,) で区切ります。ワイルドカードはサポートされていません。

DELETE /_qos/limiter/<limiterName1,limiterName2>
DELETE /_qos/_ratelimit/<limiterName1,limiterName2>

よくある質問

Q: 速度制限に関連する監視メトリクスを取得するにはどうすればよいですか?

A: 以下の API を使用できます:

  • 現在のメトリックデータの取得

    • すべてのメトリクスの現在のデータの取得

      GET /_qos/limiter/nodes/stats
    • 特定のノードの現在のメトリックデータの取得

      GET /_qos/limiter/nodes/{nodeId}/stats
    • 特定のノードとリミッターの現在のメトリックデータの取得

      GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
  • 履歴メトリックデータの取得

    • すべてのメトリクスの履歴データの取得

      GET /_qos/limiter/metric
    • 特定のリミッターの履歴メトリックデータの取得

      GET /_qos/limiter/metric/{limiterId}

プラグインのアップグレードに関する注意事項

`aliyun-qos` プラグインを最新バージョンにアップグレードする際には、以下の点にご注意ください:

  • 旧バージョンと新バージョンの実装メカニズムの違いにより、アップグレードプロセス中に速度制限機能が一時的に利用できなくなる場合があります。マスターノードのプラグインがアップグレードされると、自動的に復元されます。

  • データ変換プロセス中に、一部のリミッターが旧フォーマットから変換できない場合があります。変換に失敗した場合は、以下のコマンドを実行して再試行してください。コマンドがエラーを返した場合、`hasError` が `false` になるまで複数回実行できます。

    POST /_qos/limiter/ops/upgrade

    上記のコマンドがエラーメッセージ (例: unknown action) を返す場合、これはクラスターにレガシーのスロットラーがないことを示します。このメッセージは無視してかまいません。