# Elasticsearchの機能と実践的な使い方
🌊 もう`
🏷️ タイトル: Data stream(追記型時系列データの論理ストリーム)
🔗 URL:
📘 概要
データストリームは、追記型(append-only)の時系列データ格納に最適化された複数インデックスを、1つの名前で扱う抽象レイヤーです。ログ・イベント・メトリクスのように次々と流れ込むデータに向いており、利用者は隠された「バックインデックス」群を意識せず、単一のリソース名へ読み書きできます。
⚙️ 機能の説明
・データストリームの実体は、自動生成される複数の隠しバックインデックスです。命名は`.ds-<データストリーム名>-<>-<世代>`で、世代は`000001`から始まる6桁ゼロ詰めの整数です(例: `.ds-logs-myapp-prod-2026.06.10-000001`)。
・書き込みは常に最新の「ライトインデックス」1つだけが受け付けます。古いバックインデックスへは直接書き込めません。
・検索は自動的にすべてのバックインデックスへルーティングされ、データセット全体を横断して問い合わせられます。
・各ドキュメントには`date`または`date_nanos`型の`
@timestamp`フィールドが必須です。テンプレートに無ければ既定の`date`マッピングが自動適用されます。
・利用には`data_stream`定義を含むインデックステンプレートが必須で、マッピング・設定・ライフサイクルポリシーをここで定義します。1つのテンプレートを複数のデータストリームで共有できます。
・年齢やサイズの閾値に達すると「ロールオーバー」が走り、新しいバックインデックスが作られてライトインデックスが切り替わります。これはILMやデータストリームライフサイクルで自動化されます。
🛠️ 実践的な使い方
まず`data_stream`を含むインデックステンプレートを用意します。
`PUT _index_template/logs-myapp-template`
`{ "index_patterns": ["logs-myapp-*"], "data_stream": {}, "template": { "mappings": { "properties": { "
@timestamp": { "type": "date" } } } } }`
あとはアプリから常に同じ名前へ書くだけです。
`POST logs-myapp-prod/_doc`
`{ "
@timestamp": "2026-06-10T09:00:00Z", "level": "INFO", "message": "started" }`
💡 ユースケース
アプリケーションログを`logs-myapp-prod`というデータストリームへ書き込み、バックインデックスのロールオーバーは自動管理に任せる構成が定番です。アプリ側は日付別インデックス(`
⚠️ 注意点
・バックインデックス名は内部実装の詳細です。restoreやshrinkで変わることがあるため、名前から日付などのロジックを組まないでください。
・頻繁に同じIDで上書き更新(last-write-wins)したい用途には不向きで、その場合は通常のインデックスやエイリアスを使います。
・更新・削除は`update by query`・`delete by query`など専用APIを使い、ライトインデックス以外への直接書き込みはできません。
・データストリームが使用中のインデックステンプレートは削除できません。
#
Elasticsearch# #
データストリーム#