きっかけ
Elasticsearch 7.9.0のリリースノートを読んでいて、ILM周りのにdata streamsという言葉がいくつか書いてあり、7.9.0で追加されたようなので、興味をそそられ調べてみました。
Elasticsearchバージョン7.9.0 | Elasticsearchリファレンス[7.9] | 弾性
Data streams
Data streamsの概要
これまで、時系列データを時間やサイズごとにindex分割し、aliasを使って書き込みや読み込みをいい感じに処理していた、一連のindex運用を改めて提供する機能のようです。
公式リファレンスに図とともに説明されていますので、詳しくはそちらをご参照ください。
Data streams | Elasticsearch Reference [7.9] | Elastic
Data streamsの開発動機
時系列indexの分割やaliasを用いた一連の運用手法は、rollover / shrink APIやIndex Lifecycle Management(ILM)やその他ElasticStack全体として少しずつ改善を進めていて便利になってきたなあと個人的には感じていましたが、Data Streams · Issue #53100 · elastic/elasticsearchの冒頭にaliasの概念や実装に問題があり、利用者が混乱をきたしていると書かれています。
Data streams are targeted towards time-based data sources and enable us to solve bootstrap problems when indexing via a write alias (logstash-plugins/logstash-output-elasticsearch#858). Today aliases have some deficiencies in how they are implemented in Elasticsearch; namely they are not first-class concepts, making them confusing to use. Aliases have a broad type of usages, whereas data streams will be a solution focused for time-based data sources. Data streams should be a first-class concept, but should also be non intrusive.
そのような中で、Data stremasはaliasを用いた時系列データのindex運用を第1級の機能として提供するとのことです。
個人的にも、検索用aliasに紐づいている一部の削除候補indexをcloseすると、aliasを使った検索がエラーになった覚えがあり、扱いが難しい印象を持っていました。ILMを使うと、手作業不要なのでそれも無いと思いますが、そういった一連の操作を簡単にしていく方向性をData streamsという機能で示されていると感じました。
Data streamsの使い所
リファレンスにもきっちり書いてあり、使い所をは下記の通りです。
- 大量の時系列データを扱う
- ILMを使用してインデックスの管理を自動化することにより、運用コストを下げたい
- データを格納した後に削除や更新がほとんどない
所感としては、7.9.0の段階ではFilebeatやLogstash、Logstash plugin側の対応が無いように見えますので、すでに上記の状況でも困っていなければ、新たにData streamsに移行するメリットはあまり無いように思えます。これから新しいデータを取り込むといった場合であれば、新しい物が好きな方は是非チャレンジしてみてはいかがでしょう。
余談ですが、ILMが無い頃に自作のShellスクリプトで上記のような運用を自動化していて、使い勝手もそんなによく無い上に、自分の汚いShellスクリプトを早く消し去りたいので、なるべく早くData streamsへの移行したいと思います。
まとめ
時系列データの運用について、ElasticStack全体で整合性が取れた機能を提供する礎として、今後しばらくData Streamsに注目です。