このトピックでは、ログやメトリックなどの時系列データに対して、インデックスライフサイクル管理(ILM)を用いてホット・ウォームアーキテクチャを実装する方法について説明します。本アーキテクチャでは、経過したデータが自動的にホットノードからウォームノードへ移動され、インデックス作成パフォーマンスの向上とストレージコストの削減が実現されます。
前提条件
インデックスライフサイクル管理(ILM)を正常に実装するには、Alibaba Cloud Elasticsearch クラスターが以下の条件を満たしている必要があります。
Elasticsearch バージョン 6.6.0 以降。
既存のクラスターがない場合は、適切なバージョンでクラスターを作成します。
既存のクラスターが V6.6.0 より古い場合は、アップグレードしてください。
ウォームノードが構成済みであること。
ウォームノードは、以下のいずれかの方法で取得できます。
クラスター作成時
ILM の正常な機能を確保するため、クラスター内のすべてのノード(ホット、ウォームなど)が同一バージョンで動作していることを確認してください。
注意事項
ポリシーの粒度: 具体的なビジネス要件に基づいて ILM ポリシーを設定してください。構造や保持期間が異なるインデックスについては、別々のエイリアスおよびポリシーを適用することで管理を簡素化することを推奨します。
書き込み操作: ホットフェーズを終了し、ウォームまたはコールドフェーズに入ったインデックスに対しては、直接データを書き込まないでください。時系列順序およびデータ整合性を維持するため、ILM ポリシー内で、ホットフェーズからの移行後にインデックスを読み取り専用(例:
shrinkまたはread_onlyアクションを使用)に設定するアクションを定義してください。本番環境への適用前テスト: ILM ポリシーを重要な本番クラスターに適用する前に、必ず非本番環境で十分なテストを実施してください。
ポリシー名の不変性: ポリシー名は作成後に変更できません。命名規則を事前に慎重に検討してください。
ロールオーバーエイリアスの必須要件: ILM のロールオーバー機能を利用するには、ロールオーバーエイリアスを使用するインデックステンプレートが必要です。
初期インデックスの命名: ロールオーバー機能が正しく動作するためには、初期インデックス名が 6 桁の数値で終わる必要があります(例:
-000001)。
操作手順
このセクションでは、Alibaba Cloud Elasticsearch クラスターにおける ILM の設定手順を説明します。
ステップ 1:ウォームノードの構成確認
次の手順に進む前に、クラスターにウォームノードが正しくプロビジョニングされていることを確認してください。
Alibaba Cloud Elasticsearch コンソール
Elasticsearch クラスターの基本情報ページに移動し、「ノード可視化」セクションでクラスタアーキテクチャを確認します。

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 の設定後、データがライフサイクルフェーズを正しく遷移していることを確認します。
エイリアスを使用してインデックスにデータをインジェストします。
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_size、max_age、max_docs)が満たされると、データは新しいインデックスへロールオーバーされ、現在のインデックスは次のフェーズ(ウォーム)へ移行します。ライフサイクルフェーズでインデックスをフィルターし、インデックスの詳細情報を表示します。
Kibana の左側ナビゲーションメニューで、Management をクリックします。
セクション Elasticsearch 内で、Index Management をクリックします。
インデックスを Lifecycle phase または Lifecycle status でフィルターして、そのトランジションを確認します。

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

データ分布の確認
ポリシーに従ってインデックスが正しくウォームノードへ移動したことを確認するには、以下の手順を実行します。
コールドフェーズのインデックスをクエリし、インデックスの構成を表示します。

シャード情報の取得 を実行して、コールドインデックスのシャード分布をクエリします。
GET _cat/shards?shrink-gamestables-000012結果より、コールドフェーズのインデックスがウォームノード上にあることが確認できます:

ILM ポリシーの管理
初期設定後に、既存のポリシーを更新したり、新しいポリシーに切り替えたりする必要が生じることがあります。
既存ポリシーの更新
既存の
game-policyを修正します(例:max_sizeを3GBに変更)し、PUT /_ilm/policy/game-policyコマンドを再実行します。
Kibana で更新後のポリシーのバージョンを確認します。
左側ナビゲーションメニューで、Management をクリックします。
セクション Elasticsearch 内で、Index Lifecycle Policies をクリックします。
game-policy のバージョン番号を確認します。これは元のポリシーよりも 1 大きい値になります。
説明更新されたポリシーは、次回のロールオーバーイベントから有効になります。
新しい ILM ポリシーへの切り替え
インデックスにまったく新しいポリシーを適用するには、新しいポリシーを作成した後、インデックステンプレートを更新します。
新しい 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": {} } } } } }インデックステンプレートの
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」をご参照ください。