Databases for Elasticsearch の Index Lifecycle Management 機能の構成
Index Lifecycle Management (ILM) は、 Elasticsearchの優れた機能です。 これにより、索引をプロアクティブに管理して、ストレージと検索の両方の機能でリソースを効率的に使用することができます。 例えば、アプリケーションが 30 日間のイベントを保管する必要がある場合、ILM を使用して「イベント」と呼ばれる索引を作成することができます。この索引は簡単に書き込みおよび照会できますが、実際には 30 個の別個の索引がバックグラウンドで構成されています。 古い索引は「読み取り専用」にすることができ、オプションで最適化することができ、30 日経過すると削除されます。
以下のようなライフサイクル・ルールを定義できます。
- 新規索引を作成する場合: 経過時間別、データ・ボリューム別、または文書数別。
- 古い索引を「読み取り専用」にするかどうか。
- 古い索引のシャード・カウントを変更するかどうか。
- 各索引の優先順位を設定します。これは、ノードのリブート時に索引が復元される順序を定義します。
- 古いデータが削除された場合。
ILM は非常に柔軟で、豊富な機能を備えています。 その機能の詳細については、 ILM の概要 を参照してください。
このチュートリアルでは、一連の単純なルールを作成し、それらがどのように実装されるかを確認することで、ILM について理解します。 セットアップは比較的簡単ですが、すべての効果を確認するには、数日間にわたってルールの学習を開始する必要があります。
Databases for Elasticsearch は有料サービスであるため、このチュートリアルに従うと料金が発生します。
始める前に
始める前に、次のものがあることを確認してください。
- IBM Cloud アカウント
- Terraform-インフラストラクチャーをデプロイします。
アカウントにインフラストラクチャーをデプロイするための API キーを取得する
以下の手順 に従って、Terraform がインフラストラクチャーをアカウントにプロビジョンできるようにする IBM Cloud API キーを作成します。 最大 20 個の API キーを作成できます。
安全上の理由により、API キーをコピーまたはダウンロードできるのは作成時のみになります。 API キーを紛失した場合は、新しい API キーを作成する必要があります。
プロジェクトの複製
プロジェクトを複製するには、次のコマンドを実行します。
git clone https://github.com/IBM/elasticsearch-index-lifecycle-management.git
インストールElasticsearch集まる
-
複製されたプロジェクトの Terraform フォルダーにナビゲートします。
cd elasticsearch-index-lifecycle-management/terraform
-
以下のフィールドを使用して、
terraform.tfvars
という名前の文書を作成します。ibmcloud_api_key = "<your_api_key_from_step_1>" region = "<your_region>" elastic_password = "<make-up-a-password>"
の
terraform.tfvars
このドキュメントには秘密にしておきたい変数が含まれているため、公開 Github リポジトリからは除外されています。 -
次のコマンドでインフラストラクチャをインストールします。
terraform init terraform apply --auto-approve
-
最後に、データベース・アクセス URL を端末環境にエクスポートします (後続のステップで必要になります)。
terraform output --json export ES="<the url value obtained from the output>"
ILM プロセスの作成
アプリケーションから Elasticsearch インスタンスに送られるログがあると想定します。 ログは、異常をチェックしているため、1 日目には非常に重要です。 2 日目以降、ログはあまり役に立たなくなりますが、傾向を特定しようとするなどのためにログが必要になります。 3 日が経過すると、これらのログは失効し、これ以上使用できなくなります。 そのため、索引の 3 日間のライフサイクルを作成します。
- 1 日目: データはホット・ティアにあります。これは、データを簡単に検索できることを意味します。 これは、最新の最も検索されたデータです。
- 2 日目: データはウォーム・ティアにあります。 1 日目以降、データは「ウォーム」状態にロールオーバーされます。 この層では、索引付けではなく検索用に最適化されています。 この層では、検索をより効率的に行うために、索引のシャード内のセグメント数を減らすためにマージを強制します。
- 3 日目: 削除。 3 日目以降、データは不要になるため、削除されます。
索引ライフサイクル・ポリシーの作成
まず、上記のように適切なフェーズとアクションを定義する ILM ポリシーを作成します。
curl -kX PUT -H 'Content-Type: application/json' -d'{"policy":{"phases":{"hot":{"actions":{"rollover":{"max_age":"1d"},"set_priority":{"priority":100},"forcemerge":{"max_num_segments":1},"shrink":{"number_of_shards":1},"readonly":{}},"min_age":"0ms"},"warm":{"min_age":"1d","actions":{"set_priority":{"priority":50}}},"delete":{"min_age":"3d","actions":{"delete":{}}}}}}' $ES/_ilm/policy/ilm-test-1
索引テンプレートの作成
索引テンプレートは、索引の作成方法を定義します。 上記のライフサイクル・ポリシーは毎日データをホットからウォームに移動するため、毎日新しい索引が作成されます。 このテンプレートは、これらの新規索引を作成するために使用するパターンを Elasticsearch に指示します。この場合、関連するすべての索引は「logs-」と呼ばれ、その後に増分数が続きます。 テンプレートには、索引に使用するライフサイクル・ポリシーなどの他の設定もあります。 前のステップで作成したものを使用しましょう。
索引テンプレートは、2 つのステップで作成されます。 最初に、1 つ以上の「コンポーネント」テンプレートを作成します。 これらは、後で結合して複数のテンプレートを作成できる再使用可能なブロックです。 この非常に単純な例では、コンポーネント・テンプレートを 1 つだけ作成します。
curl -kX PUT -H 'Content-Type: application/json' -d'{"template":{"mappings":{"properties":{"@timestamp":{"type":"date"}}}}}' $ES/_component_template/component_template1
(このコンポーネント・テンプレートは、基本的には空ですが、タイム・スタンプ・フィールドへのマッピング (すべてのログにタイム・スタンプがあります) を除きます。ただし、実際のユース・ケースには、複雑なマッピングやその他の指示を含めることができます。)
次に、索引テンプレート自体を作成し、コンポーネント・テンプレートを利用します。 これは、索引パターンおよびその他のデータについて Elasticsearch に指示します。例えば、すべての新規索引には 2 つのシャードと 2 つのレプリカが必要です。
curl -kX PUT -H 'Content-Type: application/json' -d'{"index_patterns":["logs-*"],"template":{"settings":{"number_of_shards":2,"number_of_replicas":2,"index.lifecycle.name":"ilm-test-1","index.lifecycle.rollover_alias":"logs"}},"priority":500,"composed_of":["component_template1"],"version":3,"_meta":{"description":"my custom template"}}' $ES/_index_template/my_index_template
索引の作成
最後のステップでは、テンプレート (およびライフサイクル・ポリシー) を使用する Elasticsearch 索引を作成します。 これを “logs-000001” と呼び、テンプレートに定義されている別名に別名を割り当てることにより、正しいテンプレートが使用され、数値的に増分されるようにします。
curl -kX PUT -H 'Content-Type: application/json' -d'{"aliases": {"logs": { "is_write_index": true } } }' $ES/logs-000001
索引への文書の追加
現在の logs
索引の名前を知らなくても文書を追加できます。単に logs
に書き込みます。
curl -kX PUT -d’{document goes here}’ $ES/logs/_doc/mydocid
索引の照会
Elasticsearch は複数の索引にデータを保管していますが、それでも 1 つの索引であるかのように照会できます。
curl -X POST -d’{query goes here}’ $ES/logs/_search
索引の管理自体を監視する
ちょっと待たなければならない。 1 日目には、 logs-000001
という名前の索引が表示されます。
curl -kX GET $ES/_cat/indices | grep logs-
しかし、上記のコマンドを再実行すると、2 日目には logs-000002
という別の索引が表示されます。 3 日目に、 logs-000001
は (削除されたために) 表示されなくなりますが、 logs-000003
が表示されます。 logs
という別名を使用すると、いつでもログの内容全体を検索できます。 索引は自分自身を管理しています。
インフラストラクチャーのティアダウン
Databases for Elasticsearch には料金がかかります。 このチュートリアルを完了したら、プロジェクトの terraform
ディレクトリーに移動し、次のコマンドを使用して、すべてのインフラストラクチャーを削除できます。
terraform destroy
次のステップ
ILM は非常に豊富な機能を備えており、このチュートリアルでは、ILM の基礎を学習しただけです。 ILM は、効率的な方法でデータを管理するのに役立ちます。 詳しくは、 ILM: 索引のライフサイクルの管理 を参照してください。