クラスタAPIの解決

指定されたインデックス式を解決して、ローカルクラスタを含む各クラスタに関する情報を返します。

このエンドポイントは、クロスクラスタ検索を行う前に、検索に含めるべきリモートクラスタを特定するのに役立ちます。

このエンドポイントでは、クロスクラスタ検索と同じインデックス式を使用します。インデックスおよびクラスタ除外もこのエンドポイントでサポートされています。

インデックス式内の各クラスタについて、次の情報が返されます:

  • 1. クエリを実行している(”ローカル”)クラスタが、インデックス式のスコープ内の各リモートクラスタに現在接続されているかどうか
  • 2. 各リモートクラスタがskip_unavailabletrueまたはfalseとして構成されているかどうか
  • 3. そのクラスタにインデックス式に一致するインデックス、エイリアス、またはデータストリームが存在するかどうか
  • 4. クロスクラスタ検索を行った際にエラーが返される可能性があるかどうか(ユーザーがインデックスをクエリする権限を持っていない場合の認証エラーを含む)
  • 5. Elasticsearchサーバーのバージョン情報

Python

  1. resp = client.indices.resolve_cluster(
  2. name="my-index-*,cluster*:my-index-*",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.resolve_cluster(
  2. name: 'my-index-*,cluster*:my-index-*'
  3. )
  4. puts response

Js

  1. const response = await client.indices.resolveCluster({
  2. name: "my-index-*,cluster*:my-index-*",
  3. });
  4. console.log(response);

コンソール

  1. GET /_resolve/cluster/my-index-*,cluster*:my-index-*

このコマンドは、ローカルクラスタとエイリアスcluster*で始まるすべてのリモート構成クラスタに関する情報を返します。各クラスタは、my-index-*に一致するインデックス、エイリアス、またはデータストリームがあるかどうかの情報を返します。

リクエスト

GET /_resolve/cluster/<index_expression>

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットデータストリーム、インデックス、またはエイリアスに対してview_index_metadataread、またはmanage インデックス特権を持っている必要があります。

パスパラメータ

  • <index_expression>
  • (必須、文字列) 解決するインデックス、エイリアス、およびデータストリームの名前またはインデックスパターンをカンマ区切りで指定します。マルチターゲット構文を使用します。リモートクラスタに関するリソースは、<cluster>:<name>構文を使用して指定できます。

クエリパラメータ

  • expand_wildcards
  • (オプション、文字列) ワイルドカードパターンが一致できるインデックスのタイプ。リクエストがデータストリームをターゲットにできる場合、この引数はワイルドカード式が隠しデータストリームに一致するかどうかを決定します。カンマ区切りの値をサポートします。open,hiddenのような有効な値は:
    • all
    • すべてのデータストリームまたはインデックスに一致します。隠しインデックスを含みます。隠しものも含まれます。
    • open
    • 開いている非隠しインデックスに一致します。非隠しデータストリームにも一致します。
    • closed
    • 閉じた非隠しインデックスに一致します。非隠しデータストリームにも一致します。データストリームは閉じることができません。
    • hidden
    • 隠しデータストリームおよび隠しインデックスに一致します。openclosed、またはその両方と組み合わせる必要があります。
    • none
    • ワイルドカードパターンは受け付けられません。
      デフォルトはopenです。
  • ignore_unavailable
  • (オプション、ブール値) falseの場合、リクエストは存在しないまたは閉じたインデックスをターゲットにするとエラーを返します。デフォルトはfalseです。
    デフォルトはfalseです。
  • allow_no_indices
  • (オプション、ブール値) falseの場合、リクエストは、ワイルドカード式、インデックスエイリアスまたは_all値が存在しないまたは閉じたインデックスのみをターゲットにするとエラーを返します。この動作は、リクエストが他のオープンインデックスをターゲットにしている場合でも適用されます。たとえば、foo*,bar*をターゲットにするリクエストは、fooで始まるインデックスが存在しても、barで始まるインデックスが存在しない場合にエラーを返します。
    デフォルトはtrueです。
  • ignore_throttled
  • (オプション、ブール値) trueの場合、具体的、拡張された、またはエイリアスされたインデックスは、凍結時に無視されます。デフォルトはfalseです。
    [7.16.0] 7.16.0で非推奨。

クロスクラスタ検索の前にこのエンドポイントを使用する利点

次のような場合に、検索からクラスタまたはインデックスを除外したい場合があります:

  • 1. リモートクラスタが現在接続されておらず、skip_unavailable=falseとして構成されている。これらの条件下でクロスクラスタ検索を実行すると、検索全体が失敗します
  • 2. クラスタにインデックス式に一致するインデックス、エイリアス、またはデータストリームがない(またはユーザーがそれらを検索する権限を持っていない)。たとえば、インデックス式がlogs*,remote1:logs*で、remote1クラスタにlogs*に一致するインデックス、エイリアス、またはデータストリームがない場合、そのクラスタをクロスクラスタ検索に含めると、そのクラスタから結果は返されません。
  • 3. インデックス式(および指定したクエリパラメータの組み合わせ)が検索時に例外をスローする可能性が高い。これらの場合、_resolve/clusterレスポンスの”error”フィールドが存在します。(ここにセキュリティ/権限エラーも表示されます。)
  • 4. リモートクラスタが、検索で使用したい機能をサポートしていない古いバージョンである。

Python

  1. resp = client.indices.resolve_cluster(
  2. name="my-index*,clust*:my-index*",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.resolve_cluster(
  2. name: 'my-index*,clust*:my-index*'
  3. )
  4. puts response

Js

  1. const response = await client.indices.resolveCluster({
  2. name: "my-index*,clust*:my-index*",
  3. });
  4. console.log(response);

コンソール

  1. GET /_resolve/cluster/my-index*,clust*:my-index*

APIは次のレスポンスを返します:

コンソール-結果

  1. {
  2. "(local)": {
  3. "connected": true,
  4. "skip_unavailable": false,
  5. "matching_indices": true,
  6. "version": {
  7. "number": "8.13.0",
  8. "build_flavor": "default",
  9. "minimum_wire_compatibility_version": "7.17.0",
  10. "minimum_index_compatibility_version": "7.0.0"
  11. }
  12. },
  13. "cluster_one": {
  14. "connected": true,
  15. "skip_unavailable": true,
  16. "matching_indices": true,
  17. "version": {
  18. "number": "8.13.0",
  19. "build_flavor": "default",
  20. "minimum_wire_compatibility_version": "7.17.0",
  21. "minimum_index_compatibility_version": "7.0.0"
  22. }
  23. },
  24. "cluster_two": {
  25. "connected": true,
  26. "skip_unavailable": false,
  27. "matching_indices": true,
  28. "version": {
  29. "number": "8.13.0",
  30. "build_flavor": "default",
  31. "minimum_wire_compatibility_version": "7.17.0",
  32. "minimum_index_compatibility_version": "7.0.0"
  33. }
  34. }
  35. }
各クラスタには独自のレスポンスセクションがあります。リクエストを送信したクラスタは”(local)”としてラベル付けされています。
クエリを実行しているクラスタは、各リモートクラスタにリクエストを送信しようとします。成功した場合、connected=true
各リモートクラスタのskip_unavailable設定は、ローカルクラスタで構成されています。
そのクラスタに指定されたインデックス式に一致するインデックス、エイリアス、またはデータストリームがあるかどうかを示します。
Elasticsearchサーバーのバージョン。

クロスクラスタ検索の潜在的な問題を特定する

次のリクエストは、クエリを変更することで検索の失敗を防ぐ方法のいくつかの例を示しています。

Python

  1. resp = client.indices.resolve_cluster(
  2. name="not-present,clust*:my-index*,oldcluster:*",
  3. ignore_unavailable=False,
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.resolve_cluster(
  2. name: 'not-present,clust*:my-index*,oldcluster:*',
  3. ignore_unavailable: false
  4. )
  5. puts response

Js

  1. const response = await client.indices.resolveCluster({
  2. name: "not-present,clust*:my-index*,oldcluster:*",
  3. ignore_unavailable: "false",
  4. });
  5. console.log(response);

コンソール

  1. GET /_resolve/cluster/not-present,clust*:my-index*,oldcluster:*?ignore_unavailable=false

コンソール-結果

  1. {
  2. "(local)": {
  3. "connected": true,
  4. "skip_unavailable": false,
  5. "error": "no such index [not_present]"
  6. },
  7. "cluster_one": {
  8. "connected": true,
  9. "skip_unavailable": true,
  10. "matching_indices": false,
  11. "version": {
  12. "number": "8.13.0",
  13. "build_flavor": "default",
  14. "minimum_wire_compatibility_version": "7.17.0",
  15. "minimum_index_compatibility_version": "7.0.0"
  16. }
  17. },
  18. "cluster_two": {
  19. "connected": false,
  20. "skip_unavailable": false,
  21. "matching_indices": true,
  22. "version": {
  23. "number": "8.13.0",
  24. "build_flavor": "default",
  25. "minimum_wire_compatibility_version": "7.17.0",
  26. "minimum_index_compatibility_version": "7.0.0"
  27. }
  28. },
  29. "oldcluster": {
  30. "connected": true,
  31. "skip_unavailable": false,
  32. "matching_indices": true
  33. }
  34. }
ローカルクラスタにはnot_presentというインデックスがありません。それに対して検索すると、指定されたignore_unavailable=falseパラメータを使用して”no such
index”エラーが返されます。他のタイプのエラーもここに表示される可能性があります。たとえば、指定されたインデックスを検索する権限がない場合のセキュリティ
権限エラーなどです。
cluster_oneリモートクラスタには、パターンmy-index*に一致するインデックスがありません。パターンに一致するインデックスがないか、インデックスが閉じている可能性があります。(これを確認するには、
インデックスを解決する APIを使用できます。)
cluster_twoリモートクラスタは接続されていません(接続の試行が失敗しました)。このクラスタはskip_unavailable=falseとしてマークされているため、検索からこのクラスタを除外するために-cluster_two:*を検索インデックス式に追加することをお勧めします。
oldclusterリモートクラスタは、一致するインデックスがあることを示していますが、バージョン情報は含まれていません。これは、クラスタのバージョンが8.13.0で_resolve/cluster APIの導入以前のものであることを示しています。したがって、クロスクラスタ検索から除外することをお勧めします。(注:エンドポイントは、一致するインデックスがあることを確認するためにインデックスを解決する APIを使用しました。)