LoginSignup
10
9

More than 5 years have passed since last update.

Index Lifecycle Management(ILM)

Last updated at Posted at 2019-01-29

はじめに

とりとめなく書いてる、Elasticsearchネタです。

 概要

6.6からIndex Lifecycle Management(ILM)という機能が追加されます。これまで、Curator等、外部からの実行に頼っていたIndexの管理をこの機能で行うことができるようになります(BASICライセンスで使える!)。

ILMでは、ライフサイクルのフェーズごとに何をするかを定義するポリシーを作成して、それをIndex、もしくは、Index Templateに指定します。
7.0.0-SNAPSHOTでは、watch_history-ilm-policyという、.watch_historyを管理するポリシーがデフォルトで組み込まれるなど、システムでも活用されています。

また、KibanaにはUIが実装され、ポリシーの作成・適用、Index ManagementのUIから各Indexがどのフェーズにいるのかを見ることもできます。

スナップショット作成はできないので、Curatorにやってもらいましょう。
でも、スナップショットもとれるようにしよう!とかいうIssueもでてきました。どうするCurator!

IndexのLifecycleにフェーズがあって、そのフェーズごとにやれること(アクション)が決まっています。

 使い方

  1. まずフェーズごとに何をするのかを決めたポリシーを作成
  2. そのポリシーをインデックステンプレートに適用(もしくは、インデックス作成時にポリシーを指定)
  3. ILMを起動

作成済みのIndexに対して、ポリシーを適用することも出来ます。

 ライフサイクルのフェーズ

フェーズには、以下の4つがあります。

  1. hot: このフェーズのインデックスには、ガンガン書き込まれています
  2. warm: このフェーズのインデックスには(ほとんど)書き込みはありませんが、ガンガン検索されます
  3. cold: このフェーズのインデックスは更新されず、めったに検索されません。でも、まだ(遅くてもいいので)検索可能である必要はあります
  4. delete: このフェーズのインデックスは必要ないので消しても大丈夫です

アクション

で、各フェーズでは、以下のアクションを実行することができます。

  1. hot: Rollover, Set Priority(6.7~), Unfollow(6.7~)
  2. warm: Allocate, Read-Only, Force Merge, Shrink, Set Priority(6.7~), Unfollow(6.7~)
  3. cold: Allocate, Set Priority(6.7~), Freeze(6.7~), Unfollow(6.7~)
  4. delete: Delete
  • Rollover: Rolloverするタイミングを設定する
  • Set Priority: Index回復の優先順位を設定する(値は0以上)。hot > warm > cold の順に値を指定しておくと良さそう
  • Unfollow: CCRのFollower Indexとなっている場合に、通常のIndexに戻す。Unfollowは明示的に実行も出来るけど、Rollover ActionとShrink Actionの前に自動的に実行される。 ので、通常は指定する必要は無さそう。 と7.0では書いてある。6.xでは書いてない。
  • Allocate: Indexを移動したり、レプリカ数を変えたりする
  • Force Merge: SegmentをForce mergeする
  • Read-Only: IndexをRead-Onlyにする
  • Shrink: IndexをShrinkする
  • Freeze: IndexをFreezeする
  • Delete: Indexを削除する

一部は、まだKibana上から指定できません(今のところ、6.7ではSet PriorityとUnfollowが、7.0ではUnfollowが使えない)。

使用例

前提

  • 前提として、node.attr.XXXXXXは任意)に有意な値を設定しておく
    • 例えば、node.attr.box_typehot/warm/coldなどを設定
    • Indexテンプレートでは、hot,warmのノードにIndexを作成するように指定
    • policyには、warm phaseではrequire.box_type=hot, warmを、cold phaseではrequire.box_type=coldを指定して、フェーズごとにシャードの移動を行う

ILM Policy設定の作成

Kibana上のUIから作ります。
hotからwarm、cold、deleteへの移行については、hotでRolloverをやる・やらないで、UI上での設定項目が変わります。

RolloverをUIで設定する場合は、必ずmax_ageを指定する必要があります(mac_docs, max_sizeはどちらか一方を指定)。

Rolloverする場合

Rollover後すぐにwarmに移行するか、もしくは、Rolloverしてから一定時間後に移行するかを選ぶことができます。

Rolloverしない場合

Indexが作成されてからの経過時間を設定します。

Indexテンプレートの作成

下記のように、最初にIndexが作成されるノードをhot属性のついたノードに固定しておきます。

PUT _template/test_template
{
   "index_patterns": ["test-*"],
   "settings": {
     "number_of_shards": 3,
     "number_of_replicas": 1,
     "lifecycle.name": "<ポリシー名>",
     "lifecycle.rollover_alias": "test",
     "routing.allocation.require.box_type": "hot"
   }
}

以降、Phaseが移行する都度index.routing.allocation.require.box_typeの値が変わっていきます(通常は手動でやるところを、ILMが自動的に変えてくれる)。

Rollover設定

続いて、Rollover設定を行います。

PUT test-000001
{
   "aliases": {
     "test": {
       "is_write_index": true
     }
   }
}

あとは、Aliasに対してデータを投入します。

各プロダクトでのILM対応

Beats

Kibana

Logstash

Curator

競合?
少なくともスナップショットはCuratorで。

おわりに

6.6では、スナップショットの作成とILMの実行がかぶるとおかしなことになるらしいですが、6.6では対処されず、6.7以降で解決します。
てな感じで、6.6で入るけどまだまだかなー。でも早く使いたい!

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9