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

Elasticsearch:ILM を使用したホットデータとコールドデータの分離

最終更新日:Jun 03, 2026

インデックスライフサイクル管理 (ILM) を使用すると、ホットウォームアーキテクチャのクラスター内でインデックスをホット、ウォーム、コールド、削除の各フェーズに自動的に移行させ、ストレージコストを削減できます。Elasticsearch 6.6.0 以降で利用可能です。

フェーズ

説明

ホット

時系列データのリアルタイム書き込みを処理します。rollover API は、現在のインデックスが指定されたドキュメント数、サイズ、または期間に達したときに新しいインデックスを作成します。

ウォーム

インデックスは読み取り専用になり、クエリのみを処理します。

コールド

インデックスは更新されなくなり、クエリの頻度も低くなります。クエリ速度が低下する可能性があります。

削除

インデックスは完全に削除されます。

ILM ポリシーをインデックスに適用するには、次の 2 つの方法があります:

  • インデックス テンプレートにポリシーを定義します。このポリシーは、テンプレートのパターンに一致する新しいインデックスに適用されます。このトピックでは、この方法を使用します。

  • 単一のインデックスにポリシーを適用します。このポリシーは、現在のインデックスにのみ影響します。rollover によって作成された新しいインデックスは影響を受けません。

このトピックでは、以下のライフサイクルを持つホットウォームシナリオについて説明します:

  1. データをリアルタイムで書き込みます。インデックスがしきい値に達すると、rollover によって新しいインデックスが作成されます。

  2. rollover 後、古いインデックスはホットフェーズに 30 分間留まり、その後ウォームフェーズに入ります。

  3. マージと shrink が完了した後、インデックスは rollover から 1 時間後にコールドフェーズに入ります。

  4. データはウォームノードに移動します。インデックスは rollover から 2 時間後に削除されます。

操作手順

  1. ステップ 1: ホットウォームクラスターの作成と属性の確認

    クラスター作成時にホットノードとウォームノードの属性を設定します。

  2. ステップ 2: ILM ポリシーの設定

    ILM ポリシーを定義し、インデックス テンプレートを介して適用します。

  3. ステップ 3: データ分散の確認

    コールドフェーズのインデックスシャードがウォームノードにあることを確認します。

  4. ステップ 4: ILM ポリシーの更新

    既存のポリシーを更新します。

  5. ステップ 5: ILM ポリシーの切り替え

    rollover のために異なるポリシーを切り替えます。

ステップ 1: ホットウォームクラスターの作成と属性の確認

ホットウォームクラスターには、リアルタイム書き込み用のホットノードと履歴データ用のウォームノードが含まれます。

ノードタイプ

データ要件

読み書き性能

仕様

ストレージ要件

ホットノード (hot)

直近 2 日間のログなどの最新データ。

高 (例:32 コア、64 GB)。

SSD クラウドディスクを推奨します。

ウォームノード (warm)

2 日以上前のログなどの履歴データ。

低 (例:8 コア、32 GB)。

Ultra ディスクを推奨します。大規模なコールドデータセットのサーバーレスストレージには OpenStore を使用します。

Alibaba Cloud Elasticsearch では、ウォームノードの box_type の値は warm (cold ではない) であり、これはネイティブ Elasticsearch のウォーム層に相当します。
  1. Alibaba Cloud Elasticsearch クラスターを作成する際に、ウォームノードを有効にしてホットウォームクラスターを作成します。

  2. ウォームノードを有効にすると、システムはノードの起動引数に -Enode.attr.box_type パラメーターを追加します:

    • ホットノード: -Enode.attr.box_type=hot

    • ウォームノード: -Enode.attr.box_type=warm

    データノードは、ウォームノードを有効にした後にのみホットノードとして指定されます。
  3. クラスターの Kibana コンソールにログインします。詳細については、「Kibana を使用した Elasticsearch クラスターへの接続」をご参照ください。

  4. 左側のナビゲーションペインで、 [開発ツール] をクリックします。

  5. [コンソール] で、次のコマンドを実行してノードの属性を確認します。

    GET _cat/nodeattrs?v&h=host,attr,value

    レスポンスにホットノードとウォームノードの両方が含まれている場合、クラスターはホットウォームアーキテクチャをサポートしています。

ステップ 2: ILM ポリシーの設定

  1. Kibana コンソールで、次のコマンドを実行して ILM ポリシーを定義します。

    PUT /_ilm/policy/game-policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "1GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "2h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }

    パラメーター

    説明

    ホット

    いずれかの条件が満たされると rollover がトリガーされます:インデックスが 1 GB (max_size) に達する、1 日を超える (max_age)、または 1,000 ドキュメントを含む (max_docs)。古いインデックスは 30 分間待機した後、ウォームフェーズに入ります。

    ウォーム

    インデックスは 1 つのシャードに shrink され、1 つのセグメントに forcemerge されます。rollover から 1 時間後にコールドフェーズに入ります。

    コールド

    インデックスはウォームノードに移動します。rollover から 2 時間後に削除フェーズに入ります。

    削除

    インデックスは削除されます。

    ポリシー名は作成後に変更できません。Kibana コンソールでもポリシーを作成できますが、UI では時間単位として「時」しか選択できません。秒などのより細かい単位を使用するには、API を使用する必要があります。
  2. 新しいインデックスをホットノードにルーティングするインデックス テンプレートを作成します。

    PUT _template/gamestabes_template
    {
      "index_patterns" : ["gamestabes-*"],
      "settings": {
        "index.number_of_shards": 5,
        "index.number_of_replicas": 1,
        "index.routing.allocation.require.box_type":"hot",
        "index.lifecycle.name": "game-policy",
        "index.lifecycle.rollover_alias": "gamestabes"
      }
    }

    パラメーター

    説明

    index.routing.allocation.require.box_type

    インデックスを割り当てるためのノードタイプ。

    index.lifecycle.name

    適用する ILM ポリシーの名前。

    index.lifecycle.rollover_alias

    rollover に使用されるエイリアス。

  3. シーケンス番号を付けて最初のインデックスを作成します。

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

    日付計算式を使用して、時間ベースのインデックスを作成することもできます。

  4. エイリアス経由でデータを書き込みます。インデックスは、ポリシーの条件を満たし、次の ILM チェックが実行されたときに rollover します。

    PUT gamestabes/_doc/1
    {
        "EU_Sales" : 3.58,
        "Genre" : "Platform",
        "Global_Sales" : 40.24,
        "JP_Sales" : 6.81,
        "Name" : "Super Mario Bros.",
        "Other_Sales" : 0.77,
        "Platform" : "NES",
        "Publisher" : "Nintendo",
        "Year_of_Release" : "1985",
        "na_Sales" : 29.08
    }
    デフォルトでは、ILM はポリシー基準に一致するインデックスを 10 分ごとにチェックします。チェック間隔 は、indices.lifecycle.poll_interval パラメーターを使用して変更できます。
  5. (オプション) Kibana でインデックスのライフサイクルステータスを表示します。

    1. 左側のナビゲーションペインで、 [管理] をクリックします。

    2. Elasticsearch セクションで、 [インデックス管理] をクリックします。

    3. [Lifecycle phase] ドロップダウンリストをクリックし、ライフサイクルフェーズを選択してインデックスをフィルターします。

    4. フィルターされたインデックスの名前をクリックして、その詳細設定を表示します。

ステップ 3: データ分散の確認

インデックスがコールドフェーズに入った後、そのシャードがウォームノードにあることを確認します。

  1. Kibana コンソールで、コールドフェーズに入ったインデックスを見つけます。

  2. 次のコマンドを実行して、シャードの分散状況を確認します。shrink-gamestabes-000012 をお使いのインデックス名に置き換えてください。

    GET _cat/shards/shrink-gamestabes-000012

    シャードのノードの box_typewarm に設定されている場合、インデックスはウォームノードにあります。

ステップ 4: ILM ポリシーの更新

  1. 次のコマンドを実行して、game-policy を更新します。この例では、削除フェーズの期間を変更します:

    PUT /_ilm/policy/game-policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "1GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "3h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
  2. 更新されたポリシーのバージョンを表示します。

    1. 左側のナビゲーションペインで、 [管理] をクリックします。

    2. Elasticsearch セクションで、 [インデックスライフサイクルポリシー] をクリックします。

    3. ポリシーのバージョン番号を確認します。バージョン番号は更新ごとにインクリメントされます。インデックスは、次のフェーズに移行する際に、更新されたポリシーバージョンを適用します。

ステップ 5: ILM ポリシーの切り替え

  1. 新しいポリシーを作成します。

    PUT /_ilm/policy/game-new
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "3GB",
                "max_age": "1d",
                "max_docs": 1000
              }
            }
          },
          "warm": {
            "min_age": "30m",
            "actions": {
              "forcemerge": {
                    "max_num_segments":1
                  },
              "shrink": {
                    "number_of_shards":1
                  }
            }
          },
          "cold": {
            "min_age": "1h",
            "actions": {
              "allocate": {
                "require": {
                  "box_type": "warm"
                }
              }
            }
          },
          "delete": {
            "min_age": "2h",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
  2. 新しいポリシーをテンプレートに適用します。

    PUT _template/gamestabes_template
    {
      "index_patterns" : ["gamestabes-*"],
      "settings": {
        "index.number_of_shards": 5,
        "index.number_of_replicas": 1,
        "index.routing.allocation.require.box_type":"hot",
        "index.lifecycle.name": "game-new",
        "index.lifecycle.rollover_alias": "gamestabes"
      }
    }

FAQ

ILM のチェック間隔を調整するにはどうすればよいですか?

デフォルトでは、ILM は 10 分ごとにポリシーに対してインデックスをチェックします。チェックの合間にデータがしきい値を超えることがあります。たとえば、max_docs が 1,000 であっても、rollover がトリガーされる前にインデックスに 1,000 を超えるドキュメントが含まれる場合があります。

チェックの頻度は、indices.lifecycle.poll_interval パラメーターで調整します:

重要

間隔を短くすると、ノードの負荷が増加します。ワークロードに基づいてこの値を設定してください。

PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval":"1m"
  }
}