Heartbeat の監視データは時間とともに増加し、シャード数とクラスターの負荷も増加します。インデックスライフサイクル管理 (ILM) は、heartbeat-* インデックスの、ホット、ウォーム、コールド、削除の各フェーズにわたるロールオーバー、シュリンク、移行、削除を自動化します。
手順
-
Hot-Warm クラスターを作成し、インデックスの自動作成を有効にして、パブリックアクセス IP ホワイトリストを設定します。
-
heartbeat.yml ファイルで ILM を有効にし、そのパラメーターを設定します。Heartbeat は起動時に Elasticsearch にインデックステンプレートを自動的に生成します。
-
インデックスのロールオーバーとアーカイブの条件を定義するライフサイクルポリシーを作成します。
-
ステップ 4: ライフサイクルポリシーとインデックステンプレートの関連付け
ライフサイクルポリシーを Heartbeat のインデックステンプレートに関連付けます。
-
ステップ 5: ライフサイクルポリシーのインデックスへの適用
ライフサイクルポリシーを Heartbeat の初期インデックスに適用し、後続のすべてのインデックスがそれを継承するようにします。
-
ホット、ウォーム、コールド、削除の各ライフサイクルフェーズのインデックスを表示します。
ステップ 1: Hot-Warm クラスターの作成と設定
-
Hot-Warm クラスターを作成し、そのノード属性を確認します。次の表に、各ノードタイプの比較を示します。
ノードタイプ
データストレージ要件
読み書き性能
仕様
ストレージ要件
ホットノード
過去 2 日間のログデータなどの最近のデータ。
高
高 (例:32 コア 64 GB)。
SSD クラウドディスクを推奨します。
ウォームノード
2 日以上前のログデータなどの履歴データ。
低
低 (例:8 コア 32 GB)。
Ultra ディスクを推奨します。OpenStore はサーバーレスのコールドデータストレージにも利用できます。
Alibaba Cloud Elasticsearch では、ウォームノードの
box_typeはwarm(cold ではありません) で、これはネイティブ Elasticsearch のウォーム層に相当します。-
Alibaba Cloud Elasticsearch インスタンスを作成する際に、ウォームノードを有効にして Hot-Warm クラスターを作成します。
ウォームノードを有効にして購入すると、システムはノードの起動パラメーターに
-Enode.attr.box_typeパラメーターを追加します:-
ホットデータノード:
-Enode.attr.box_type=hot -
ウォームデータノード:
-Enode.attr.box_type=warm
ウォームノードを有効にすると、データノードがホットノードとして割り当てられます。
-
-
クラスターの Kibana コンソールにログインします。詳細については、「Kibana を使用したクラスターへの接続」をご参照ください。
-
左側のナビゲーションペインで、[開発ツール] をクリックします。
-
[コンソール] で、次のコマンドを実行してクラスターのノード属性を表示します。
GET _cat/nodeattrs?v&h=host,attr,value応答にホットノードとウォームノードの両方が含まれている場合、クラスターは Hot-Warm アーキテクチャをサポートしています。
-
-
対象クラスターのインデックス自動作成を有効にします。詳細については、「YML パラメーターを設定してインデックスの自動作成を有効にする」をご参照ください。
-
Heartbeat サーバーの IP アドレスをクラスターのパブリックエンドポイント IP ホワイトリストに追加します。詳細については、「IP ホワイトリストの設定」をご参照ください。
ステップ 2: Heartbeat で ILM を設定
Elastic のガイド「インデックスライフサイクル管理の設定」で、ILM の詳細な設定について説明しています。
-
Heartbeat インストールパッケージをダウンロードして解凍します。
-
heartbeat.yml ファイルを編集して、heartbeat.monitors、setup.template.settings、setup.kibana、output.elasticsearch を定義します。
設定例:
heartbeat.monitors: - type: icmp schedule: '*/5 * * * * * *' hosts: ["47.111.xx.xx"] setup.template.settings: index.number_of_shards: 3 index.codec: best_compression index.routing.allocation.require.box_type: "hot" setup.template.overwrite: true setup.kibana: host: "https://es-cn-4591jumei00xxxxxx.kibana.elasticsearch.aliyuncs.com:5601" output.elasticsearch: hosts: ["es-cn-4591jumei00xxxxxx.elasticsearch.aliyuncs.com:9200"] ilm.enabled: true ilm.rollover_alias: "heartbeat" ilm.pattern: "{now/d}-000001" username: "elastic" password: "<your_password>"主なパラメーターは以下のとおりです。利用可能なすべてのパラメーターについては、「Heartbeat 設定ドキュメント」をご参照ください。
パラメーター
説明
index.number_of_shards
プライマリシャードの数。デフォルト:1。
index.routing.allocation.require.box_type
インデックスデータをホットノードにルーティングします。
setup.template.overwrite
既存のインデックステンプレートを上書きするかどうかを指定します。このバージョンのテンプレートが既にロードされている場合は true に設定します。これは
setup.template.settingsと同じレベルのトップレベルパラメーターです。host
Kibana サービスのパブリックエンドポイント。Kibana 設定ページで確認できます。
hosts
Elasticsearch クラスターのパブリックまたは内部エンドポイント。これは [基本情報] ページで確認できます。詳細については、「インスタンスの基本情報の表示」をご参照ください。パブリックエンドポイントを使用する場合、クライアントの IP アドレスをクラスターの IP ホワイトリストに追加する必要があります。詳細については、「IP ホワイトリストの設定」をご参照ください。内部エンドポイントを使用する場合、クラスターと Heartbeat サーバーが同じ VPC にある必要があります。
ilm.enabled
trueに設定して ILM を有効にします。ilm.rollover_alias
ロールオーバーされたインデックスのエイリアス。デフォルト:
heartbeat-{beat.version}。ilm.pattern
ロールオーバーされたインデックス名のパターン。日付計算をサポートします。デフォルト:{now/d}-000001。ロールオーバー時に、末尾の数値がインクリメントされます (例:
heartbeat-2020.04.29-000001はheartbeat-2020.04.29-000002になります)。username
デフォルト:
elastic。password
elasticユーザーのパスワード。インスタンス作成時に設定します。パスワードをリセットする必要がある場合は、「インスタンスのアクセスパスワードをリセットする」をご参照ください。重要インデックステンプレートがロードされた後に
ilm.rollover_aliasまたはilm.patternを変更した場合は、setup.template.overwriteをtrueに設定してインデックステンプレートを書き換える必要があります。 -
Heartbeat サービスを開始します。
sudo ./heartbeat -e
ステップ 3: ライフサイクルポリシーの作成
ライフサイクルポリシーは、API または Kibana コンソールで作成できます。この例では、API を使用してポリシー heartbeat-policy を作成します。
Heartbeat は ./heartbeat setup --ilm-policy を実行するとデフォルトのポリシーをロードします。このポリシーは ./heartbeat export ilm-policy でエクスポートして、カスタムポリシーの開始点として使用できます。
Kibana コンソールで次のコマンドを実行して、ライフサイクルポリシーを作成します:
PUT /_ilm/policy/heartbeat-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "5mb",
"max_age": "1d",
"max_docs": 100
}
}
},
"warm": {
"min_age": "60s",
"actions": {
"forcemerge": {
"max_num_segments":1
},
"shrink": {
"number_of_shards":1
}
}
},
"cold": {
"min_age": "3m",
"actions": {
"allocate": {
"require": {
"box_type": "warm"
}
}
}
},
"delete": {
"min_age": "1h",
"actions": {
"delete": {}
}
}
}
}
}
|
フェーズ |
説明 |
|
hot |
インデックスが 5 MB、1 日、またはドキュメント数 100 に達すると、ロールオーバーがトリガーされます。ロールオーバーされたインデックスは 60 秒後にウォームフェーズに入ります。 |
|
warm |
インデックスを 1 つのシャードにシュリンクし、1 つのセグメントに強制マージします。インデックスはロールオーバーから 3 分後にコールドフェーズに入ります。 |
|
cold |
インデックスをホットノードからウォームノードに移行します。ロールオーバーから 1 時間後に削除フェーズに入ります。 |
|
delete |
インデックスが削除されます。 |
ポリシー名は変更できません。Kibana コンソールでもポリシーを作成できますが、max_age の最小単位は時間です。API では、秒などのより小さな単位をサポートしています。
ステップ 4: ライフサイクルポリシーとインデックステンプレートの関連付け
Heartbeat は起動時に Elasticsearch にインデックステンプレートを自動的に作成します。ステップ 3: ライフサイクルポリシーの作成で作成した heartbeat-policy をこのテンプレートに関連付けます。
-
Elasticsearch インスタンスの Kibana コンソールにログインします。詳細については、「Kibana を使用したクラスターへの接続」をご参照ください。
-
左側のナビゲーションペインで、[管理] をクリックします。
-
Elasticsearch セクションで、[インデックスライフサイクルポリシー] をクリックします。
-
[インデックスライフサイクルポリシー] リストで
heartbeat-policyを見つけ、[操作] > [インデックステンプレートにポリシーを追加] をクリックします。 -
ダイアログボックスで、[インデックステンプレート] リストからインデックステンプレートを選択し、[ロールオーバーインデックスのエイリアス] フィールドにロールオーバーエイリアスを入力します。
-
[ポリシーを追加] をクリックします。
ステップ 5: ライフサイクルポリシーのインデックスへの適用
Heartbeat は起動時に初期インデックスを作成します。このインデックスにライフサイクルポリシーを適用します。後続のインデックスは、ステップ 4: ライフサイクルポリシーとインデックステンプレートの関連付けで設定したテンプレートからポリシーを継承します。
-
[管理] ページで、Elasticsearch セクションに移動し、[インデックス管理] をクリックします。
-
[インデックス管理] リストで、対象のインデックスを見つけてその名前をクリックします。
-
概要 ページで、[管理] > [ライフサイクルポリシーの削除] をクリックして、Heartbeat に含まれるデフォルトのポリシーを削除します。
-
確認のダイアログボックスで、[ポリシーを削除] をクリックします。
-
次に、[管理] > [ライフサイクルポリシーの追加] をクリックします。
-
ダイアログボックスで、[ライフサイクルポリシー] リストから ステップ 3: ライフサイクルポリシーの作成で作成した
heartbeat-policyを選択し、[インデックスロールオーバーエイリアス] フィールドに ステップ 4: ライフサイクルポリシーとインデックステンプレートの関連付けと同じロールオーバーエイリアスを入力して、[ポリシーを追加] をクリックします。
ステップ 6: 各フェーズのインデックスの表示
[インデックス管理] ページで、[ライフサイクルフェーズ] ドロップダウンリストからフェーズを選択してインデックスをフィルタリングします。
よくある質問
ライフサイクルポリシーのチェック頻度を調整するにはどうすればよいですか?
デフォルトでは、ILM は 10 分ごとに対象のインデックスをチェックします。この間隔の間に、データ量がしきい値を超える可能性があります。たとえば、ステップ 3: ライフサイクルポリシーの作成では max_docs が 100 に設定されていますが、ロールオーバーがトリガーされる前に実際のカウントが 100 を超える可能性があります。
indices.lifecycle.poll_interval パラメーターでチェック頻度を調整します:
間隔を短くするとノードの負荷が増加します。ポリシーの応答性とクラスターのパフォーマンスのバランスを取ってください。
PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval":"1m"
}
}