インデックスライフサイクル管理エラーのトラブルシューティング

ライフサイクルポリシーを実行する際に、必要なインデックス操作を行うステップでエラーが発生する可能性があります。この場合、ILMはインデックスをERRORステップに移動します。ILMがエラーを自動的に解決できない場合、ポリシー、インデックス、またはクラスターの根本的な問題を解決するまで実行が停止します。

たとえば、インデックスが少なくとも5日経過したときに4つのシャードに縮小するshrink-indexポリシーがあるかもしれません:

Python

  1. resp = client.ilm.put_lifecycle(
  2. name="shrink-index",
  3. policy={
  4. "phases": {
  5. "warm": {
  6. "min_age": "5d",
  7. "actions": {
  8. "shrink": {
  9. "number_of_shards": 4
  10. }
  11. }
  12. }
  13. }
  14. },
  15. )
  16. print(resp)

Ruby

  1. response = client.ilm.put_lifecycle(
  2. policy: 'shrink-index',
  3. body: {
  4. policy: {
  5. phases: {
  6. warm: {
  7. min_age: '5d',
  8. actions: {
  9. shrink: {
  10. number_of_shards: 4
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.ilm.putLifecycle({
  2. name: "shrink-index",
  3. policy: {
  4. phases: {
  5. warm: {
  6. min_age: "5d",
  7. actions: {
  8. shrink: {
  9. number_of_shards: 4,
  10. },
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

コンソール

  1. PUT _ilm/policy/shrink-index
  2. {
  3. "policy": {
  4. "phases": {
  5. "warm": {
  6. "min_age": "5d",
  7. "actions": {
  8. "shrink": {
  9. "number_of_shards": 4
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }

新しいインデックスにshrink-indexポリシーを適用することを妨げるものは何もありません。インデックスには2つのシャードしかありません:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "index.number_of_shards": 2,
  5. "index.lifecycle.name": "shrink-index"
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. 'index.number_of_shards' => 2,
  6. 'index.lifecycle.name' => 'shrink-index'
  7. }
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. "index.number_of_shards": 2,
  5. "index.lifecycle.name": "shrink-index",
  6. },
  7. });
  8. console.log(response);

コンソール

  1. PUT /my-index-000001
  2. {
  3. "settings": {
  4. "index.number_of_shards": 2,
  5. "index.lifecycle.name": "shrink-index"
  6. }
  7. }

5日後、ILMはmy-index-000001を2つのシャードから4つのシャードに縮小しようとします。縮小アクションはシャードの数を増やすことができないため、この操作は失敗し、ILMはmy-index-000001ERRORステップに移動します。

ILM Explain APIを使用して、何が問題だったのかを確認できます:

Python

  1. resp = client.ilm.explain_lifecycle(
  2. index="my-index-000001",
  3. )
  4. print(resp)

Ruby

  1. response = client.ilm.explain_lifecycle(
  2. index: 'my-index-000001'
  3. )
  4. puts response

Js

  1. const response = await client.ilm.explainLifecycle({
  2. index: "my-index-000001",
  3. });
  4. console.log(response);

コンソール

  1. GET /my-index-000001/_ilm/explain

次の情報が返されます:

コンソール-結果

  1. {
  2. "indices" : {
  3. "my-index-000001" : {
  4. "index" : "my-index-000001",
  5. "managed" : true,
  6. "index_creation_date_millis" : 1541717265865,
  7. "time_since_index_creation": "5.1d",
  8. "policy" : "shrink-index",
  9. "lifecycle_date_millis" : 1541717265865,
  10. "age": "5.1d",
  11. "phase" : "warm",
  12. "phase_time_millis" : 1541717272601,
  13. "action" : "shrink",
  14. "action_time_millis" : 1541717272601,
  15. "step" : "ERROR",
  16. "step_time_millis" : 1541717272688,
  17. "failed_step" : "shrink",
  18. "step_info" : {
  19. "type" : "illegal_argument_exception",
  20. "reason" : "the number of target shards [4] must be less that the number of source shards [2]"
  21. },
  22. "phase_execution" : {
  23. "policy" : "shrink-index",
  24. "phase_definition" : {
  25. "min_age" : "5d",
  26. "actions" : {
  27. "shrink" : {
  28. "number_of_shards" : 4
  29. }
  30. }
  31. },
  32. "version" : 1,
  33. "modified_date_in_millis" : 1541717264230
  34. }
  35. }
  36. }
  37. }
インデックスを管理するために使用されているポリシー: shrink-index
インデックスの年齢: 5.1日
インデックスが現在いるフェーズ: warm
現在のアクション: shrink
インデックスが現在いるステップ: ERROR
実行に失敗したステップ: shrink
エラーの種類とその説明。
shrink-indexポリシーからの現在のフェーズの定義

これを解決するには、ポリシーを更新してインデックスを5日後に1つのシャードに縮小することができます:

Python

  1. resp = client.ilm.put_lifecycle(
  2. name="shrink-index",
  3. policy={
  4. "phases": {
  5. "warm": {
  6. "min_age": "5d",
  7. "actions": {
  8. "shrink": {
  9. "number_of_shards": 1
  10. }
  11. }
  12. }
  13. }
  14. },
  15. )
  16. print(resp)

Ruby

  1. response = client.ilm.put_lifecycle(
  2. policy: 'shrink-index',
  3. body: {
  4. policy: {
  5. phases: {
  6. warm: {
  7. min_age: '5d',
  8. actions: {
  9. shrink: {
  10. number_of_shards: 1
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.ilm.putLifecycle({
  2. name: "shrink-index",
  3. policy: {
  4. phases: {
  5. warm: {
  6. min_age: "5d",
  7. actions: {
  8. shrink: {
  9. number_of_shards: 1,
  10. },
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

コンソール

  1. PUT _ilm/policy/shrink-index
  2. {
  3. "policy": {
  4. "phases": {
  5. "warm": {
  6. "min_age": "5d",
  7. "actions": {
  8. "shrink": {
  9. "number_of_shards": 1
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }

失敗したライフサイクルポリシーステップの再試行

インデックスをERRORステップに置いた問題を修正したら、ILMにステップを再試行するよう明示的に指示する必要があるかもしれません:

Python

  1. resp = client.ilm.retry(
  2. index="my-index-000001",
  3. )
  4. print(resp)

Js

  1. const response = await client.ilm.retry({
  2. index: "my-index-000001",
  3. });
  4. console.log(response);

コンソール

  1. POST /my-index-000001/_ilm/retry

その後、ILMは失敗したステップを再実行しようとします。ILM Explain APIを使用して進捗を監視できます。

一般的なILM設定の問題

min_ageの計算方法

ILMポリシーを設定するか、ILMでのロールオーバーの自動化を行う際には、min_ageがロールオーバー時間またはインデックス作成時間のいずれかに対して相対的であることに注意してください。

ILMロールオーバーを使用する場合、min_ageはインデックスがロールオーバーされた時間に対して計算されます。これは、ロールオーバーAPIが新しいインデックスを生成し、以前のインデックスのageをロールオーバー時間を反映するように更新するためです。インデックスがロールオーバーされていない場合、ageはインデックスのcreation_dateと同じです。

min_ageの計算方法をオーバーライドするには、index.lifecycle.origination_dateおよびindex.lifecycle.parse_origination_date ILM設定を使用できます。

一般的なILMエラー

ここでは、ERRORステップで報告される最も一般的なエラーを解決する方法を示します。

ロールオーバーエイリアスの問題は、エラーの一般的な原因です。エイリアスでロールオーバーを管理するのではなく、データストリームを使用することを検討してください。

ロールオーバーエイリアス[x]は複数のインデックスを指すことができ、インデックステンプレート[z]に重複したエイリアス[x]が見つかりました

ターゲットロールオーバーエイリアスは、インデックステンプレートのindex.lifecycle.rollover_alias設定で指定されます。このエイリアスを初期インデックスをブートストラップする際に一度だけ明示的に構成する必要があります。ロールオーバーアクションは、その後、エイリアスを設定および更新して、各後続のインデックスにロールオーバーします。

インデックステンプレートのエイリアスセクションでこの同じエイリアスを明示的に構成しないでください。

index.lifecycle.rollover_alias[x]はインデックス[y]を指していません

インデックスが間違ったエイリアスを使用しているか、エイリアスが存在しません。

index.lifecycle.rollover_alias インデックス設定を確認してください。構成されているエイリアスを確認するには、_cat/aliasesを使用します。

インデックス[y]の[index.lifecycle.rollover_alias]の設定が空または未定義です

ロールオーバーアクションが機能するためには、index.lifecycle.rollover_alias設定が構成されている必要があります。

インデックス設定を更新してindex.lifecycle.rollover_aliasを設定してください。

エイリアス[x]には複数の書き込みインデックス[y,z]があります

特定のエイリアスに対しては、1つのインデックスのみが書き込みインデックスとして指定できます。

エイリアスAPIを使用して、1つのインデックスを除くすべてのインデックスにis_write_index:falseを設定します。

インデックス名[x]がパターン^.*-\d+に一致しません

インデックス名は、ロールオーバーアクションが機能するために、正規表現パターン^.*-\d+に一致する必要があります。最も一般的な問題は、インデックス名に末尾の数字が含まれていないことです。たとえば、my-indexはパターン要件に一致しません。

インデックス名に数値を追加してください。たとえば、my-index-000001

CircuitBreakingException: [x] データが大きすぎます、[y]のデータ

これは、クラスターがリソース制限に達していることを示しています。

ILMの設定を続行する前に、リソースの問題を軽減するための手順を講じる必要があります。詳細については、Circuit breaker errorsを参照してください。

高ディスクウォーターマーク[x]が[y]で超過しました

これは、クラスターがディスクスペースを使い果たしていることを示しています。これは、ホットノードからウォームノードへのロールオーバー管理が設定されていない場合に発生する可能性があります。

ノードを追加するか、ハードウェアをアップグレードするか、不要なインデックスを削除することを検討してください。

security_exception: action [

<action-name>] はユーザー [
<user-name>] に対して権限がありません。役割 [
<role-name>] によって、このアクションはインデックス権限 [manage_follow_index,manage,all] によって付与されます。

これは、ILMアクションを実行できないことを示しています。なぜなら、ILMがアクションを実行するために使用するユーザーが適切な権限を持っていないからです。これは、ILMポリシーを更新した後にユーザーの権限が削除された場合に発生する可能性があります。ILMアクションは、ポリシーを最後に変更したユーザーによって実行されたかのように実行されます。ポリシーを作成または変更するために使用されるアカウントは、そのポリシーのすべての操作を実行する権限を持っている必要があります。