目次 1. はじめに 2. 検証環境 3. Downsampling の設定方法 4. Downsampling の実行と容量削減効果 5. ES|QL(TSコマンド)によるデータ確認と注意点 6. まとめ 7. 参考URL 1. はじめに Elastic Stackの比較的新しい機能として、 TSDS (Time Series Data Stream) に対する Downsampling(ダウンサンプリング) がサポートされています。 これは、例えば「1秒ごとに収集された高頻度なメトリクス」を「1分ごと、あるいは1日ごとの統計値」へと自動的に集計・集約することで、データ量を劇的に削減し、長期保存データのクエリを高速化するための機能です。 今回は、この Downsampling 機能が実際にどのように動作し、どれほどの効果があるのかを検証してみました。 2. 検証環境 今回の検証は、以下の環境で行いました。 Elastic Stack: v9.4.2 (Self-Managed, Trial License) 収集データ: Elastic を動作させている Windows ホストのパフォーマンスメトリクス(OpenTelemetry Collector経由) 3. Downsampling の設定方法 Downsampling の実行方法はいくつかありますが、今回は最も実用的な Index Lifecycle Management (ILM) のポリシー内に組み込む方法を採用しました。 ILMポリシー名: metric-otel-ilm-policy フェーズ遷移: Hotフェーズ: データのインジェストと直近データの保持 Coldフェーズ: 移行タイミングで Downsampling を実行 Downsampling interval: 1 days (1日粒度に集約) ※参考画面 💡 ※注意: 今回の 1 days という設定値は、検証結果(変化)をわかりやすく確認するための極端な設定です。本番環境での推奨値ではありません。 4. Downsampling の実行と容量削減効果 設定後、データがある程度蓄積され、インデックスが Rollover して Cold フェーズへ移行するのを待ちました。 Cold フェーズ移行前後のデータ量の変化は以下の通りです。 ステータス ドキュメント数 インデックスサイズ Rollover 直前 (Hotフェーズ) 約 650,000 件 約 20 MB Cold フェーズ移行後 (Downsampling 適用後) 5,865 件 1.14 MB インデックスサイズが約20分の1、ドキュメント数にいたっては 約110分の1 にまで圧縮されており、期待通りの強力なデータ削減効果が確認できました。 (※注 メトリクスは24時間取得していたわけではありません。24時間取得し続けていたら、もっと大きな圧縮率になっていたと思われます。) ※Cold フェーズ移行後の参考画面 (※Rollover 直前のデータ量に関するスクリーンショットは取り損ねてしまいました。) 5. ES|QL(TSコマンド)によるデータ確認と注意点 Kibana の Discover から、ES|QL の TS コマンドを使用して、格納されたデータを集計してみます。 TS metrics-hostmetricsreceiver.otel-default* | WHERE state == "free" or state == "used" | STATS mem = AVG(metrics.system.memory.usage) BY TBUCKET(1h), state | KEEP `TBUCKET(1h)`, mem, state | SORT `TBUCKET(1h)` desc, state ※参考画面 クエリ結果の考察 出力された結果(一部抜粋)を確認すると、Downsampling の仕様が顕著に現れた挙動を示していました。 TBUCKET(1h) mem state データの特徴 Jun 12, 2026 @ 11:00:00.000 11,889,684,480 free (*1) Jun 12, 2026 @ 11:00:00.000 21,892,382,720 used (*1) Jun 12, 2026 @ 10:00:00.000 11,387,027,456 free (*1) Jun 12, 2026 @ 10:00:00.000 22,395,039,744 used (*1) … … … … Jun 9, 2026 @ 09:00:00.000 12,531,630,920.205 free (*2) Jun 9, 2026 @ 09:00:00.000 21,250,436,279.795 used (*2) Jun 8, 2026 @ 09:00:00.000 14,159,069,970.101 free (*2) Jun 8, 2026 @ 09:00:00.000 19,622,997,229.899 used (*2) Jun 7, 2026 @ 09:00:00.000 7,128,812,202.667 free (*2) Jun 7, 2026 @ 09:00:00.000 26,653,254,997.333 used (*2) … … … … (*1) 直近データ(未圧縮)、1時間単位で取得可能 (*2) Downsampling 適用済み(1日1バケットのみ出力) クエリでは TBUCKET(1h)(1時間ごと)の集計を要求しているにもかかわらず、Cold Tier に格納されている過去データ(Jun 9 以前)は「1日(24時間)に1データ」しか返ってきていません。 これは、Downsampling によってデータがすでに 1 days の粒度に丸められ、それより細かい時間軸のデータが消失しているためです(内部的に事前集計された代表値のみが残るため)。クエリ側でどれだけ細かいバケットを指定しても、保持されている最小粒度(今回は1日)でしか結果を得られないという特性がよくわかります。 検証用のデータのためクエリの速度向上までは測定できていませんが、集計対象のデータ量が劇的に少なくなっているため、理論上は従来よりも大幅な速度向上が見込めます。 6. まとめ 今回、Elastic TSDS の Downsampling 機能を検証し、以下のことが分かりました。 圧倒的なストレージ削減効果 ドキュメント数やデータサイズを劇的に削減できるため、長期的なトレンド分析用のインデックスにおいて非常に有効です。 データ粒度とのトレードオフ 今回の検証結果が示す通り、Downsampling を適用した期間のデータは、指定したインターバルより詳細な分析(例:瞬間的なスパイクの検知など)ができなくなります。 実運用においては、 直近のトラブルシューティング用に、Hot フェーズでは生データを数週間保持する。 それ以降の長期的なキャパシティプランニング用に、Warm/Cold フェーズで1時間〜1日粒度へDownsampling する。 といった、要件に合わせたメリハリのあるILMポリシーの設計が重要になりそうです。 7. 参考URL Configuring a time series data stream for downsampling Downsample Elastic’s metrics analytics gets 5x faster Configure downsampling directly in Elastic Streams, no more JSON editing needed The post Elastic TSDS の Downsampling 機能を試してみた first appeared on Elastic Portal .