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

Elasticsearch:ILM を使用したホット・ウォームアーキテクチャの実装

最終更新日:Mar 01, 2026

このトピックでは、ログやメトリックなどの時系列データに対して、インデックスライフサイクル管理(ILM)を用いてホット・ウォームアーキテクチャを実装する方法について説明します。本アーキテクチャでは、経過したデータが自動的にホットノードからウォームノードへ移動され、インデックス作成パフォーマンスの向上とストレージコストの削減が実現されます。

前提条件

インデックスライフサイクル管理(ILM)を正常に実装するには、Alibaba Cloud Elasticsearch クラスターが以下の条件を満たしている必要があります。

  1. Elasticsearch バージョン 6.6.0 以降。

  2. ウォームノードが構成済みであること。

    ウォームノードは、以下のいずれかの方法で取得できます。

重要

ILM の正常な機能を確保するため、クラスター内のすべてのノード(ホット、ウォームなど)が同一バージョンで動作していることを確認してください。

注意事項

  • ポリシーの粒度: 具体的なビジネス要件に基づいて ILM ポリシーを設定してください。構造や保持期間が異なるインデックスについては、別々のエイリアスおよびポリシーを適用することで管理を簡素化することを推奨します。

  • 書き込み操作: ホットフェーズを終了し、ウォームまたはコールドフェーズに入ったインデックスに対しては、直接データを書き込まないでください。時系列順序およびデータ整合性を維持するため、ILM ポリシー内で、ホットフェーズからの移行後にインデックスを読み取り専用(例: shrink または read_only アクションを使用)に設定するアクションを定義してください。

  • 本番環境への適用前テスト: ILM ポリシーを重要な本番クラスターに適用する前に、必ず非本番環境で十分なテストを実施してください。

  • ポリシー名の不変性: ポリシー名は作成後に変更できません。命名規則を事前に慎重に検討してください。

  • ロールオーバーエイリアスの必須要件: ILM のロールオーバー機能を利用するには、ロールオーバーエイリアスを使用するインデックステンプレートが必要です。

  • 初期インデックスの命名: ロールオーバー機能が正しく動作するためには、初期インデックス名が 6 桁の数値で終わる必要があります(例:-000001)。

操作手順

このセクションでは、Alibaba Cloud Elasticsearch クラスターにおける ILM の設定手順を説明します。

ステップ 1:ウォームノードの構成確認

次の手順に進む前に、クラスターにウォームノードが正しくプロビジョニングされていることを確認してください。

Alibaba Cloud Elasticsearch コンソール

Elasticsearch クラスターの基本情報ページに移動し、「ノード可視化」セクションでクラスタアーキテクチャを確認します。

image

Kibana

Kibana コンソールに移動し、Dev Tools を選択して、Console で以下のコマンドを実行します。

GET _cat/nodeattrs?v&h=node,attr,value&s=attr:desc

応答に box_type:warm 属性が含まれている場合、クラスターにウォームノードが構成されています。

ステップ 2:ILM ポリシーの作成

ILM ポリシーを作成して、データのライフサイクルフェーズを定義します。この例では、ホット、ウォーム、コールド、削除の各フェーズを持つ game-policy を作成します。

Kibana コンソールで、以下のコマンドを実行します。

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": {}
        }
      }
    }
  }
}

説明
  • ポリシー名は作成後に変更できません。

  • Kibana コンソールでもポリシーを作成できますが、Kibana における max_age の最小単位は「時間」です。API を使用する場合は、最小単位を「秒」で指定できます。

ステップ 3:インデックステンプレートの作成と ILM ポリシーの適用

インデックステンプレートは、指定されたパターンに一致する新規インデックスに対して、設定(ILM ポリシーを含む)を自動的に適用します。

以下のコマンドを実行します。

index.routing.allocation.require.box_type:"hot" の設定により、新規インデックスは初期状態でホットノード上に作成されます。

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:ロールオーバーに使用するエイリアスです。

ステップ 4:初期インデックスの作成

ローリングインデックスで ILM を使用するには、初期インデックスを手動で作成する必要があります。また、必要な命名規則に従っていることを確認してください。

以下のコマンドを実行して、自動増分サフィックス付きのインデックスを作成し、エイリアスに is_write_index: true を設定します。

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

ロールオーバー機能が動作するためには、初期インデックス名は 必ず 6 桁の数値で終わる必要があります(例:-000001)。その後のロールオーバー済みインデックスでは、この数値が増分されます。

ステップ 5:ILM 機能の検証

ILM の設定後、データがライフサイクルフェーズを正しく遷移していることを確認します。

  1. エイリアスを使用してインデックスにデータをインジェストします。

    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 で変更可能)。条件(例:max_sizemax_agemax_docs)が満たされると、データは新しいインデックスへロールオーバーされ、現在のインデックスは次のフェーズ(ウォーム)へ移行します。

  2. ライフサイクルフェーズでインデックスをフィルターし、インデックスの詳細情報を表示します。

    1. Kibana の左側ナビゲーションメニューで、Management をクリックします。

    2. セクション Elasticsearch 内で、Index Management をクリックします。

    3. インデックスを Lifecycle phase または Lifecycle status でフィルターして、そのトランジションを確認します。

      Filter indexes based on lifecycle phases

    4. インデックス名をクリックして、そのライフサイクルに関する詳細情報およびステータスを表示します。

      View index details

データ分布の確認

ポリシーに従ってインデックスが正しくウォームノードへ移動したことを確認するには、以下の手順を実行します。

  1. コールドフェーズのインデックスをクエリし、インデックスの構成を表示します。

    Query indexes in the cold phase

  2. シャード情報の取得 を実行して、コールドインデックスのシャード分布をクエリします。

    GET _cat/shards?shrink-gamestables-000012

    結果より、コールドフェーズのインデックスがウォームノード上にあることが確認できます:Result

ILM ポリシーの管理

初期設定後に、既存のポリシーを更新したり、新しいポリシーに切り替えたりする必要が生じることがあります。

既存ポリシーの更新

  1. 既存の game-policy を修正します(例: max_size3GB に変更)し、PUT /_ilm/policy/game-policy コマンドを再実行します。

    Update the ILM policy

  2. Kibana で更新後のポリシーのバージョンを確認します。

    1. 左側ナビゲーションメニューで、Management をクリックします。

    2. セクション Elasticsearch 内で、Index Lifecycle Policies をクリックします。

    3. game-policy のバージョン番号を確認します。これは元のポリシーよりも 1 大きい値になります。

      View the version of the updated policy

      説明

      更新されたポリシーは、次回のロールオーバーイベントから有効になります。

新しい ILM ポリシーへの切り替え

インデックスにまったく新しいポリシーを適用するには、新しいポリシーを作成した後、インデックステンプレートを更新します。

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

    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. インデックステンプレートの index.lifecycle.name を更新して、新しい ILM ポリシーを適用します。

    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"
      }
    }
    説明

    新しいポリシーは、テンプレート更新後に作成されたインデックスに対して、次回のロールオーバーから有効になります。既存のインデックスを新しい ILM ポリシーに移行するには、PUT <indexPatterns>/_settings コマンド(例:PUT gamestabes-*/_settings)を実行します。詳細については、「Switching policies for an index」をご参照ください。

よくある質問

Q:ILM のチェック間隔を変更するにはどうすればよいですか?

A:デフォルトでは、ILM ポリシーは 10 分ごとにチェックされます。この頻度を変更するには(例:1 分ごと)、indices.lifecycle.poll_interval クラスター設定を構成します。

重要

このパラメーターは注意深く変更してください。短い間隔はノードに不要な負荷をかける可能性があります。本例では、1m に設定されています。

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

Q:インデックスでロールオーバーがトリガーされませんが、原因は何ですか?

A:以下の項目を確認してください。

  • インデックスの命名: インデックス名が自動増分の 6 桁数値で終わっていることを確認します(例:your_index_name-000001)。それ以外の場合、ロールオーバーはトリガーされません。

  • ILM ステータス: Kibana Dev Tools で GET /_ilm/explain/<your_index_name> を実行し、特定のインデックスに対する現在の ILM ステータスを確認して、エラーを特定します。

  • ポリシーの関連付け: インデックスが正しい ILM ポリシーに関連付けられていることを、index.lifecycle.name 設定で確認します。

Q:ウォームフェーズで shrink 操作が失敗するのはなぜですか?

A:ターゲットとなるシャード数がソースのシャード数の約数でない場合、shrink 操作が失敗することがあります。たとえば、プライマリシャード数が 5 のインデックスを 2 シャードに縮小することはできません。ターゲットのシャード数がソースのシャード数を割り切るように設定してください。詳細なエラーメッセージを確認するには、GET /_ilm/explain/<your_index_name> を実行します。

関連ドキュメント

Elasticsearch におけるインデックスライフサイクル管理ポリシーの作成