- インデックスライフサイクル管理エラーのトラブルシューティング
- 失敗したライフサイクルポリシーステップの再試行
- 一般的なILM設定の問題
- 一般的なILMエラー
- ロールオーバーエイリアス[x]は複数のインデックスを指すことができ、インデックステンプレート[z]に重複したエイリアス[x]が見つかりました
- index.lifecycle.rollover_alias[x]はインデックス[y]を指していません
- インデックス[y]の[index.lifecycle.rollover_alias]の設定が空または未定義です
- エイリアス[x]には複数の書き込みインデックス[y,z]があります
- インデックス名[x]がパターン^.*-\d+に一致しません
- CircuitBreakingException: [x] データが大きすぎます、[y]のデータ
- 高ディスクウォーターマーク[x]が[y]で超過しました
- security_exception: action [
インデックスライフサイクル管理エラーのトラブルシューティング
ライフサイクルポリシーを実行する際に、必要なインデックス操作を行うステップでエラーが発生する可能性があります。この場合、ILMはインデックスをERROR
ステップに移動します。ILMがエラーを自動的に解決できない場合、ポリシー、インデックス、またはクラスターの根本的な問題を解決するまで実行が停止します。
たとえば、インデックスが少なくとも5日経過したときに4つのシャードに縮小するshrink-index
ポリシーがあるかもしれません:
Python
resp = client.ilm.put_lifecycle(
name="shrink-index",
policy={
"phases": {
"warm": {
"min_age": "5d",
"actions": {
"shrink": {
"number_of_shards": 4
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'shrink-index',
body: {
policy: {
phases: {
warm: {
min_age: '5d',
actions: {
shrink: {
number_of_shards: 4
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "shrink-index",
policy: {
phases: {
warm: {
min_age: "5d",
actions: {
shrink: {
number_of_shards: 4,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/shrink-index
{
"policy": {
"phases": {
"warm": {
"min_age": "5d",
"actions": {
"shrink": {
"number_of_shards": 4
}
}
}
}
}
}
新しいインデックスにshrink-index
ポリシーを適用することを妨げるものは何もありません。インデックスには2つのシャードしかありません:
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"index.number_of_shards": 2,
"index.lifecycle.name": "shrink-index"
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
'index.number_of_shards' => 2,
'index.lifecycle.name' => 'shrink-index'
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
"index.number_of_shards": 2,
"index.lifecycle.name": "shrink-index",
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"index.number_of_shards": 2,
"index.lifecycle.name": "shrink-index"
}
}
5日後、ILMはmy-index-000001
を2つのシャードから4つのシャードに縮小しようとします。縮小アクションはシャードの数を増やすことができないため、この操作は失敗し、ILMはmy-index-000001
をERROR
ステップに移動します。
ILM Explain APIを使用して、何が問題だったのかを確認できます:
Python
resp = client.ilm.explain_lifecycle(
index="my-index-000001",
)
print(resp)
Ruby
response = client.ilm.explain_lifecycle(
index: 'my-index-000001'
)
puts response
Js
const response = await client.ilm.explainLifecycle({
index: "my-index-000001",
});
console.log(response);
コンソール
GET /my-index-000001/_ilm/explain
コンソール-結果
{
"indices" : {
"my-index-000001" : {
"index" : "my-index-000001",
"managed" : true,
"index_creation_date_millis" : 1541717265865,
"time_since_index_creation": "5.1d",
"policy" : "shrink-index",
"lifecycle_date_millis" : 1541717265865,
"age": "5.1d",
"phase" : "warm",
"phase_time_millis" : 1541717272601,
"action" : "shrink",
"action_time_millis" : 1541717272601,
"step" : "ERROR",
"step_time_millis" : 1541717272688,
"failed_step" : "shrink",
"step_info" : {
"type" : "illegal_argument_exception",
"reason" : "the number of target shards [4] must be less that the number of source shards [2]"
},
"phase_execution" : {
"policy" : "shrink-index",
"phase_definition" : {
"min_age" : "5d",
"actions" : {
"shrink" : {
"number_of_shards" : 4
}
}
},
"version" : 1,
"modified_date_in_millis" : 1541717264230
}
}
}
}
インデックスを管理するために使用されているポリシー: shrink-index |
|
インデックスの年齢: 5.1日 | |
インデックスが現在いるフェーズ: warm |
|
現在のアクション: shrink |
|
インデックスが現在いるステップ: ERROR |
|
実行に失敗したステップ: shrink |
|
エラーの種類とその説明。 | |
shrink-index ポリシーからの現在のフェーズの定義 |
これを解決するには、ポリシーを更新してインデックスを5日後に1つのシャードに縮小することができます:
Python
resp = client.ilm.put_lifecycle(
name="shrink-index",
policy={
"phases": {
"warm": {
"min_age": "5d",
"actions": {
"shrink": {
"number_of_shards": 1
}
}
}
}
},
)
print(resp)
Ruby
response = client.ilm.put_lifecycle(
policy: 'shrink-index',
body: {
policy: {
phases: {
warm: {
min_age: '5d',
actions: {
shrink: {
number_of_shards: 1
}
}
}
}
}
}
)
puts response
Js
const response = await client.ilm.putLifecycle({
name: "shrink-index",
policy: {
phases: {
warm: {
min_age: "5d",
actions: {
shrink: {
number_of_shards: 1,
},
},
},
},
},
});
console.log(response);
コンソール
PUT _ilm/policy/shrink-index
{
"policy": {
"phases": {
"warm": {
"min_age": "5d",
"actions": {
"shrink": {
"number_of_shards": 1
}
}
}
}
}
}
失敗したライフサイクルポリシーステップの再試行
インデックスをERROR
ステップに置いた問題を修正したら、ILMにステップを再試行するよう明示的に指示する必要があるかもしれません:
Python
resp = client.ilm.retry(
index="my-index-000001",
)
print(resp)
Js
const response = await client.ilm.retry({
index: "my-index-000001",
});
console.log(response);
コンソール
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アクションは、ポリシーを最後に変更したユーザーによって実行されたかのように実行されます。ポリシーを作成または変更するために使用されるアカウントは、そのポリシーのすべての操作を実行する権限を持っている必要があります。