ロールオーバー
ログやメトリクスのような時系列データをインデックスする際、単一のインデックスに無限に書き込むことはできません。インデックスおよび検索パフォーマンスの要件を満たし、リソースの使用を管理するために、しきい値に達するまでインデックスに書き込み、その後新しいインデックスを作成して書き込みを開始します。ロールインデックスを使用することで、次のことが可能になります:
- 高性能のホットノードでの高い取り込み率に最適化されたアクティブインデックス。
- ウォームノードでの検索パフォーマンスに最適化。
- 古い、あまりアクセスされないデータをコストの低いコールドノードに移動。
- インデックス全体を削除することによって、保持ポリシーに従ってデータを削除。
時系列データを管理するために、データストリームの使用を推奨します。データストリームは、構成を最小限に抑えながら書き込みインデックスを自動的に追跡します。
各データストリームには、次の内容を含むインデックステンプレートが必要です:
- データストリームの名前またはワイルドカード(
*
)パターン。 - データストリームのタイムスタンプフィールド。このフィールドは、
date
またはdate_nanos
フィールドデータ型としてマッピングされ、データストリームにインデックスされたすべてのドキュメントに含まれている必要があります。 - 作成時に各バックインデックスに適用されるマッピングと設定。
データストリームは、データストリーム名を操作(読み取り、書き込み、ロールオーバー、縮小など)のターゲットとして使用できる追加専用データ用に設計されています。ユースケースがデータをその場で更新する必要がある場合は、インデックスエイリアスを使用して時系列データを管理できます。ただし、いくつかの追加の構成手順と概念があります:
- シリーズ内の各新しいインデックスの設定を指定するインデックステンプレート。この構成は、通常、ホットノードの数と同じだけのシャードを使用して取り込みのために最適化します。
- インデックスの全セットを参照するインデックスエイリアス。
- 書き込みインデックスとして指定された単一のインデックス。これは、すべての書き込みリクエストを処理するアクティブインデックスです。各ロールオーバー時に、新しいインデックスが書き込みインデックスになります。
インデックスがロールオーバーされると、前のインデックスの年齢がロールオーバー時間を反映するように更新されます。この日付は、インデックスのcreation_date
ではなく、インデックスライフサイクル管理min_age
フェーズの計算に使用されます。詳細を学ぶ。
自動ロールオーバー
ILMとデータストリームライフサイクル([プレビュー]内)により、インデックスサイズ、ドキュメント数、または年齢などの条件に基づいて自動的に新しいインデックスにロールオーバーできます。このロールオーバーがトリガーされると、新しいインデックスが作成され、書き込みエイリアスが新しいインデックスを指すように更新され、その後のすべての更新が新しいインデックスに書き込まれます。
サイズ、ドキュメント数、または年齢に基づいて新しいインデックスにロールオーバーすることは、時間ベースのロールオーバーよりも好ましいです。任意の時間にロールオーバーすると、多くの小さなインデックスが生成され、パフォーマンスやリソースの使用に悪影響を及ぼす可能性があります。
空のインデックスは、関連するmax_age
があってもロールオーバーされません。ポリシーはこの動作をオーバーライドし、"min_docs": 0
条件を追加することで空のインデックスのロールオーバーを明示的に選択できます。これは、indices.lifecycle.rollover.only_if_has_documents
をfalse
に設定することで、クラスター全体で無効にすることもできます。
ロールオーバーアクションは、1つ以上のシャードが200000000以上のドキュメントを含む場合、常にデータストリームまたはエイリアスをロールオーバーします。通常、シャードは200Mドキュメントに達する前に50GBに達しますが、これはスペース効率の良いデータセットには当てはまりません。シャードが200Mドキュメントを超えると、検索パフォーマンスが非常に悪化する可能性があります。これが組み込み制限の理由です。