データストリーム
データストリームを使用すると、複数のインデックスにわたって追加専用の時系列データを保存でき、リクエストのための単一の名前付きリソースを提供します。データストリームは、ログ、イベント、メトリクス、およびその他の継続的に生成されるデータに適しています。
インデックス作成および検索リクエストをデータストリームに直接送信できます。ストリームは、自動的にリクエストをストリームのデータを保存するバックインデックスにルーティングします。インデックスライフサイクル管理 (ILM)を使用して、これらのバックインデックスの管理を自動化できます。たとえば、ILMを使用して、古いバックインデックスをコストの低いハードウェアに自動的に移動し、不要なインデックスを削除できます。ILMは、データが増えるにつれてコストとオーバーヘッドを削減するのに役立ちます。
データストリームを使用すべきか?
データストリームをデータに使用すべきかどうかを判断するには、データの形式と予想される相互作用を考慮する必要があります。データストリームを使用するのに適した候補は、以下の基準に一致します:
- データにタイムスタンプフィールドが含まれているか、自動的に生成される可能性があります。
- 主にインデックス作成リクエストを行い、時折更新や削除を行います。
_id
なしでドキュメントをインデックス作成するか、明示的な_id
でドキュメントをインデックス作成する場合、最初の書き込みが勝つ動作を期待します。
ほとんどの時系列データのユースケースでは、データストリームが適しています。ただし、データがこれらのカテゴリに適合しない場合(たとえば、同じ_id
を使用して複数のドキュメントを頻繁に送信し、最後の書き込みが勝つことを期待する場合)、代わりに書き込みインデックスを持つインデックスエイリアスを使用することを検討してください。詳細については、データストリームなしでの時系列データの管理のドキュメントを参照してください。
タイムシリーズデータストリーム (TSDS)やデータストリームライフサイクルなどの一部の機能は、データストリームを必要とします。
バックインデックス
データストリームは、1つ以上の隠しの自動生成されたバックインデックスで構成されています。
データストリームには、一致するindex templateが必要です。このテンプレートには、ストリームのバックインデックスを構成するために使用されるマッピングと設定が含まれています。
データストリームにインデックス作成されるすべてのドキュメントには、@timestamp
フィールドが含まれている必要があり、date
またはdate_nanos
フィールドタイプとしてマッピングされます。インデックステンプレートが@timestamp
フィールドのマッピングを指定していない場合、Elasticsearchは@timestamp
をデフォルトオプションのdate
フィールドとしてマッピングします。
同じインデックステンプレートは、複数のデータストリームに使用できます。データストリームによって使用されているインデックステンプレートを削除することはできません。
バックインデックスの名前パターンは実装の詳細であり、そこから知識を導き出すべきではありません。保持される唯一の不変条件は、各データストリーム生成インデックスが一意の名前を持つことです。
読み取りリクエスト
データストリームに読み取りリクエストを送信すると、ストリームはリクエストをすべてのバックインデックスにルーティングします。
書き込みインデックス
最も最近に作成されたバックインデックスがデータストリームの書き込みインデックスです。ストリームは、このインデックスにのみ新しいドキュメントを追加します。
他のバックインデックスに新しいドキュメントを追加することはできません。たとえインデックスに直接リクエストを送信しても同様です。
また、インデックス作成を妨げる可能性のある操作を、書き込みインデックスで実行することはできません。たとえば:
ロールオーバー
ロールオーバーは、新しいバックインデックスを作成し、それがストリームの新しい書き込みインデックスになります。
書き込みインデックスが指定された年齢またはサイズに達したときに、データストリームを自動的にロールオーバーするためにILMを使用することをお勧めします。必要に応じて、データストリームを手動でロールオーバーすることもできます。
世代
各データストリームは、その世代を追跡します:000001
から始まるゼロパディングされた6桁の整数です。
バックインデックスが作成されると、インデックスは次の規則に従って名前が付けられます:
テキスト
.ds-<data-stream>-<yyyy.MM.dd>-<generation>
<yyyy.MM.dd>
はバックインデックスの作成日です。世代が高いバックインデックスには、より最近のデータが含まれています。たとえば、web-server-logs
データストリームは34
の世代を持っています。ストリームの最も最近のバックインデックスは、2099年3月7日に作成され、.ds-web-server-logs-2099.03.07-000034
という名前が付けられています。
縮小や復元などの一部の操作は、バックインデックスの名前を変更することがあります。これらの名前の変更は、バックインデックスをデータストリームから削除するものではありません。
データストリームの世代は、新しいインデックスがデータストリームに追加されなくても変更されることがあります(たとえば、既存のバックインデックスが縮小されるとき)。これは、一部の世代のバックインデックスが存在しないことを意味します。バックインデックスの名前から知識を導き出すべきではありません。
追加専用(主に)
データストリームは、既存のデータがめったに更新されないユースケースのために設計されています。既存のドキュメントに対して更新または削除リクエストをデータストリームに直接送信することはできません。ただし、ドキュメントのバックインデックスに直接リクエストを送信することで、データストリーム内のドキュメントを更新または削除することはできます。
データストリーム内の多数のドキュメントを更新する必要がある場合は、クエリによる更新およびクエリによる削除APIを使用できます。
同じ_id
を使用して複数のドキュメントを頻繁に送信し、最後の書き込みが勝つことを期待する場合は、代わりに書き込みインデックスを持つインデックスエイリアスを使用することを検討してください。データストリームなしでの時系列データの管理を参照してください。