時系列データストリーム (TSDS)
時系列データストリーム (TSDS) は、タイムスタンプ付きのメトリクスデータを1つ以上の時系列としてモデル化します。
TSDSを使用すると、メトリクスデータをより効率的に保存できます。私たちのベンチマークでは、TSDSに保存されたメトリクスデータは、通常のデータストリームよりも70%少ないディスクスペースを使用しました。正確な影響はデータセットによって異なります。
TSDSを使用するタイミング
通常のデータストリームとTSDSの両方が、タイムスタンプ付きのメトリクスデータを保存できます。通常、リアルタイムに近い形でElasticsearchにメトリクスデータを追加する場合にのみ、TSDSを使用してください。
TSDSはメトリクスデータ専用です。ログやトレースなどの他のタイムスタンプ付きデータには、通常のデータストリームを使用してください。
通常のデータストリームとの違い
TSDSは、いくつかの重要な違いを持つ通常のデータストリームのように機能します:
- TSDSに対する一致するインデックステンプレートは、
index.mode: time_series
オプションを持つdata_stream
オブジェクトを必要とします。このオプションは、ほとんどのTSDS関連機能を有効にします。 @timestamp
に加えて、TSDS内の各ドキュメントは1つ以上の次元フィールドを含む必要があります。TSDSに対する一致するインデックステンプレートは、少なくとも1つのkeyword
次元のマッピングを含む必要があります。
TSDSドキュメントは通常、1つ以上のメトリックフィールドも含みます。- Elasticsearchは、TSDS内の各ドキュメントに対して隠れた
_tsid
メタデータフィールドを生成します。 - TSDSは、同じ期間のデータを同じバックインデックスに保存するために時間制約付きバックインデックスを使用します。
- TSDSに対する一致するインデックステンプレートは、
index.routing_path
インデックス設定を含む必要があります。TSDSは、この設定を使用して次元ベースのルーティングを実行します。 - TSDSは、内部インデックスソートを使用して、シャードセグメントを
_tsid
と@timestamp
で順序付けます。 - TSDSドキュメントは、自動生成されたドキュメント
_id
値のみをサポートします。TSDSドキュメントにおいて、ドキュメント_id
はドキュメントの次元と@timestamp
のハッシュです。TSDSはカスタムドキュメント_id
値をサポートしていません。 - TSDSは合成
_source
を使用し、その結果、_source
フィールドに適用されるいくつかの制限と変更の影響を受けます。
時系列インデックスは、次元やメトリック以外のフィールドを含むことができます。
時系列とは何ですか?
時系列は、特定のエンティティに対する観察のシーケンスです。これらの観察を合わせることで、時間の経過に伴うエンティティの変化を追跡できます。たとえば、時系列は次のものを追跡できます:
- コンピュータのCPUおよびディスク使用率
- 株価
- 天気センサーからの温度および湿度の読み取り値。
図3. グラフとしてプロットされた天気センサーの読み取り値の時系列
TSDSでは、各Elasticsearchドキュメントが特定の時系列における観察またはデータポイントを表します。TSDSは複数の時系列を含むことができますが、ドキュメントは1つの時系列にのみ属することができます。時系列は複数のデータストリームにまたがることはできません。
次元
次元は、組み合わせてドキュメントの時系列を特定するフィールド名と値です。ほとんどの場合、次元は測定しているエンティティのいくつかの側面を説明します。たとえば、同じ天気センサーに関連するドキュメントは、常に同じsensor_id
およびlocation
値を持つ場合があります。
TSDSドキュメントは、その時系列とタイムスタンプによって一意に識別され、これらはドキュメント_id
を生成するために使用されます。したがって、同じ次元と同じタイムスタンプを持つ2つのドキュメントは重複と見なされます。_bulk
エンドポイントを使用してドキュメントをTSDSに追加する場合、同じタイムスタンプと次元を持つ2番目のドキュメントが最初のドキュメントを上書きします。PUT /<target>/_create/<_id>
形式を使用して個別のドキュメントを追加し、同じ_id
を持つドキュメントがすでに存在する場合、エラーが生成されます。
フィールドを次元としてマークするには、ブール値time_series_dimension
マッピングパラメータを使用します。次のフィールドタイプはtime_series_dimension
パラメータをサポートします:
フラット化されたフィールドの場合、time_series_dimensions
パラメータを使用してフィールドの配列を次元として構成します。詳細については、flattened
を参照してください。
メトリック
メトリックは、数値測定を含むフィールドであり、これらの測定に基づく集計および/またはダウンサンプリング値も含まれます。必須ではありませんが、TSDS内のドキュメントは通常、1つ以上のメトリックフィールドを含みます。
メトリックは、次元とは異なり、次元は一般的に一定であるのに対し、メトリックは時間の経過とともに変化することが期待されます。たとえそれがまれであっても、またはゆっくりと変化する場合でも。
フィールドをメトリックとしてマークするには、time_series_metric
マッピングパラメータを使用してメトリックタイプを指定する必要があります。次のフィールドタイプはtime_series_metric
パラメータをサポートします:
受け入れられるメトリックタイプはフィールドタイプに基づいて異なります:
- `````counter
- 単調に増加するか、
0
(ゼロ)にリセットされる累積メトリック。たとえば、エラーや完了したタスクのカウント。
カウンターフィールドは、累積カウンターを表すため、追加の意味を持ちます。これは、累積的に単調に増加するカウンターからレートを導出できるため、rate
集計とよく機能します。ただし、いくつかの集計(たとえばsum
)は、カウンターフィールドの累積的な性質のために意味をなさない結果を計算します。
数値およびaggregate_metric_double
フィールドのみがcounter
メトリックタイプをサポートします。
カウンターフィールドの累積的な性質のため、次の集計はサポートされ、counter
フィールドで意味のある結果を提供することが期待されます:rate
、histogram
、range
、min
、max
、top_metrics
およびvariable_width_histogram
。既存の統合やカスタムダッシュボードとの問題を防ぐために、カウンターに対して結果が意味をなさない場合でも、次の集計を許可します:avg
、box plot
、cardinality
、extended stats
、median absolute deviation
、percentile ranks
、percentiles
、stats
、sum
およびvalue count
。
gauge
任意に増加または減少することができる単一の数値を表すメトリック。たとえば、温度や利用可能なディスクスペース。
数値およびaggregate_metric_double
フィールドのみがgauge
メトリックタイプをサポートします。null
(デフォルト)- 時系列メトリックではありません。
時系列モード
TSDSに対する一致するインデックステンプレートは、data_stream
オブジェクトをindex_mode: time_series
オプションとともに含む必要があります。このオプションは、TSDSがindex.mode
設定のtime_series
を持つバックインデックスを作成することを保証します。この設定は、バックインデックス内のほとんどのTSDS関連機能を有効にします。
既存のデータストリームをTSDSに変換する場合、変換後に作成されたバックインデックスのみがindex.mode
をtime_series
に持ちます。既存のバックインデックスのindex.mode
を変更することはできません。
_tsidメタデータフィールド
TSDSにドキュメントを追加すると、Elasticsearchは自動的にドキュメントのために_tsid
メタデータフィールドを生成します。_tsid
は、ドキュメントの次元を含むオブジェクトです。同じTSDS内の同じ_tsid
を持つドキュメントは、同じ時系列の一部です。
`````_tsid`````フィールドの形式は信頼できません。バージョンごとに変更される可能性があります。
### 時間制約付きインデックス
TSDSでは、最新のバックインデックスを含む各バックインデックスには、受け入れられる`````@timestamp`````値の範囲があります。この範囲は、[`````index.time_series.start_time`````](94b83a10d7b2bd96.md#index-time-series-start-time)および[`````index.time_series.end_time`````](94b83a10d7b2bd96.md#index-time-series-end-time)インデックス設定によって定義されます。
TSDSにドキュメントを追加すると、Elasticsearchはその`````@timestamp`````値に基づいて適切なバックインデックスにドキュメントを追加します。その結果、TSDSは、書き込みを受け入れることができる任意のTSDSバックインデックスにドキュメントを追加できます。これは、インデックスが最新のバックインデックスでない場合でも適用されます。
![時間制約付きインデックス](https://cdn.hedaai.com/projects/elasticsearch-8-15/acca12aba830c2e22ce8523e4a9fb005.svg)
一部のILMアクションは、ソースインデックスを読み取り専用としてマークするか、良好なパフォーマンスを提供するためにインデックスがもはやアクティブに書き込まれないことを期待します。これらのアクションは次のとおりです: - [削除](/read/elasticsearch-8-15/b2a3233aadaf433f.md) - [ダウンサンプリング](/read/elasticsearch-8-15/93fd53b0824bd21a.md) - [強制マージ](/read/elasticsearch-8-15/56614beb9f63ffc7.md) - [読み取り専用](/read/elasticsearch-8-15/5900249935c8a74f.md) - [検索可能スナップショット](/read/elasticsearch-8-15/7d6b93525a6cb258.md) - [縮小](/read/elasticsearch-8-15/82865be2d70b6959.md) インデックスライフサイクル管理は、書き込みを受け入れるための上限時間制約が、[`````index.time_series.end_time`````](94b83a10d7b2bd96.md#index-time-series-end-time)インデックス設定で表される期限が切れるまで、これらのアクションを実行しません。
ドキュメントの`````@timestamp`````値を受け入れることができるバックインデックスがない場合、Elasticsearchはドキュメントを拒否します。
Elasticsearchは、インデックス作成およびロールオーバーのプロセスの一環として`````index.time_series.start_time`````および`````index.time_series.end_time`````設定を自動的に構成します。
### 先読み時間
[`````index.look_ahead_time`````](94b83a10d7b2bd96.md#index-look-ahead-time)インデックス設定を使用して、インデックスにドキュメントを追加できる未来の範囲を構成します。TSDSの新しい書き込みインデックスを作成するとき、Elasticsearchはインデックスの`````index.time_series.end_time`````値を次のように計算します:
`````now + index.look_ahead_time
時系列のポーリング間隔(time_series.poll_interval
設定によって制御される)で、Elasticsearchは書き込みインデックスがそのインデックスライフサイクルポリシーのロールオーバー基準を満たしているかどうかを確認します。満たしていない場合、Elasticsearchはnow
値を更新し、書き込みインデックスのindex.time_series.end_time
を次のように更新します:
now + index.look_ahead_time + time_series.poll_interval
このプロセスは、書き込みインデックスがロールオーバーするまで続きます。インデックスがロールオーバーすると、Elasticsearchはインデックスの最終index.time_series.end_time
値を設定します。この値は、新しい書き込みインデックスのindex.time_series.start_time
の境界を形成します。これにより、隣接するバックインデックスの@timestamp
範囲が常に境界を持ち、重複しないことが保証されます。
振り返り時間
index.look_back_time
インデックス設定を使用して、インデックスにドキュメントを追加できる過去の範囲を構成します。TSDSのデータストリームを作成するとき、Elasticsearchはインデックスのindex.time_series.start_time
値を次のように計算します:
now - index.look_back_time
この設定は、データストリームが作成されるときにのみ使用され、最初のバックインデックスのindex.time_series.start_time
インデックス設定を制御します。このインデックス設定を構成することで、@timestamp
フィールド値が2時間(index.look_back_time
デフォルト)より古いドキュメントを受け入れることができます。
データ追加のための受け入れられる時間範囲
TSDSは、現在のメトリクスデータを取り込むように設計されています。TSDSが最初に作成されると、初期バックインデックスには次のような値があります:
index.time_series.start_time
値がnow - index.look_back_time
に設定されindex.time_series.end_time
値がnow + index.look_ahead_time
に設定されます。
その範囲内にあるデータのみがインデックス化できます。
index.time_series.start_time
APIを使用して、任意のTSDSへの書き込みのための受け入れられる時間範囲を確認できます。
次元ベースのルーティング
各TSDSバックインデックス内で、Elasticsearchはindex.routing_path
インデックス設定を使用して、同じ次元を持つドキュメントを同じシャードにルーティングします。
TSDSに対する一致するインデックステンプレートを作成する際には、index.routing_path
設定で1つ以上の次元を指定する必要があります。TSDS内の各ドキュメントは、index.routing_path
設定に一致する1つ以上の次元を含む必要があります。
index.routing_path
設定の次元は、プレーンkeyword
フィールドでなければなりません。index.routing_path
設定はワイルドカードパターン(たとえばdim.*
)を受け入れ、新しいフィールドに動的に一致することができます。ただし、Elasticsearchは、index.routing_path
値に一致するスクリプト、ランタイム、または非次元、非keyword
フィールドを追加するマッピングの更新を拒否します。
TSDSドキュメントはカスタム_routing
値をサポートしていません。同様に、TSDSのマッピングで_routing
値を要求することはできません。
インデックスソート
Elasticsearchは、繰り返し値を圧縮するために圧縮アルゴリズムを使用します。この圧縮は、繰り返し値が近くに保存されると最も効果的です — 同じインデックス内、同じシャード上、同じシャードセグメント内で隣接して。
ほとんどの時系列データには繰り返し値が含まれています。次元は同じ時系列内のドキュメント間で繰り返されます。時系列のメトリック値も時間の経過とともにゆっくりと変化する場合があります。
内部的に、各TSDSバックインデックスは、_tsid
および@timestamp
でシャードセグメントを順序付けるためにインデックスソートを使用します。これにより、これらの繰り返し値がより良い圧縮のために近くに保存される可能性が高くなります。TSDSは、index.sort.*
インデックス設定をサポートしていません。
時系列データストリーム (TSDS)
時系列データストリーム (TSDS) は、タイムスタンプ付きのメトリクスデータを1つ以上の時系列としてモデル化します。
TSDSを使用すると、メトリクスデータをより効率的に保存できます。私たちのベンチマークでは、TSDSに保存されたメトリクスデータは、通常のデータストリームよりも70%少ないディスクスペースを使用しました。正確な影響はデータセットによって異なります。