Rollupからダウンサンプリングへの移行
Rollupとダウンサンプリングは、履歴メトリクスを集約するための2つの異なる機能です。高レベルでは、Rollupはダウンサンプリングに比べて柔軟性がありますが、ダウンサンプリングはメトリクスをダウンサンプリングするためのより堅牢で簡単な機能です。
ダウンサンプリングの以下の側面は、より簡単または堅牢です:
- ジョブをスケジュールする必要がありません。ダウンサンプリングは、インデックスライフサイクル管理(ILM)およびデータストリームライフサイクル(DSL)と統合されています。
- 別の検索APIは必要ありません。ダウンサンプリングされたインデックスは、検索APIおよびes|qlを介してアクセスできます。
- 別のRollup設定は必要ありません。ダウンサンプリングは、マッピングからの時系列次元とメトリクス設定を使用します。
すべてのRollupの使用をダウンサンプリングに移行することはできません。主な要件は、データがElasticsearchに時系列データストリーム(TSDS)として保存されている必要があることです。基本的に時間とすべての次元でデータを集約するRollupの使用は、ダウンサンプリングに移行できます。
ダウンサンプリングに移行できるRollupの使用例:
Python
resp = client.rollup.put_job(
id="sensor",
index_pattern="sensor-*",
rollup_index="sensor_rollup",
cron="0 0 * * * *",
page_size=1000,
groups={
"date_histogram": {
"field": "timestamp",
"fixed_interval": "60m"
},
"terms": {
"fields": [
"node"
]
}
},
metrics=[
{
"field": "temperature",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "voltage",
"metrics": [
"avg"
]
}
],
)
print(resp)
Js
const response = await client.rollup.putJob({
id: "sensor",
index_pattern: "sensor-*",
rollup_index: "sensor_rollup",
cron: "0 0 * * * *",
page_size: 1000,
groups: {
date_histogram: {
field: "timestamp",
fixed_interval: "60m",
},
terms: {
fields: ["node"],
},
},
metrics: [
{
field: "temperature",
metrics: ["min", "max", "sum"],
},
{
field: "voltage",
metrics: ["avg"],
},
],
});
console.log(response);
コンソール
PUT _rollup/job/sensor
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "0 0 * * * *",
"page_size": 1000,
"groups": {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "60m"
},
"terms": {
"fields": [ "node" ]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [ "min", "max", "sum" ]
},
{
"field": "voltage",
"metrics": [ "avg" ]
}
]
}
ダウンサンプリングを使用する時系列データストリーム(TSDS)の同等の設定:
Python
resp = client.indices.put_index_template(
name="sensor-template",
index_patterns=[
"sensor-*"
],
data_stream={},
template={
"lifecycle": {
"downsampling": [
{
"after": "1d",
"fixed_interval": "1h"
}
]
},
"settings": {
"index.mode": "time_series"
},
"mappings": {
"properties": {
"node": {
"type": "keyword",
"time_series_dimension": True
},
"temperature": {
"type": "half_float",
"time_series_metric": "gauge"
},
"voltage": {
"type": "half_float",
"time_series_metric": "gauge"
},
"@timestamp": {
"type": "date"
}
}
}
},
)
print(resp)
Ruby
response = client.indices.put_index_template(
name: 'sensor-template',
body: {
index_patterns: [
'sensor-*'
],
data_stream: {},
template: {
lifecycle: {
downsampling: [
{
after: '1d',
fixed_interval: '1h'
}
]
},
settings: {
'index.mode' => 'time_series'
},
mappings: {
properties: {
node: {
type: 'keyword',
time_series_dimension: true
},
temperature: {
type: 'half_float',
time_series_metric: 'gauge'
},
voltage: {
type: 'half_float',
time_series_metric: 'gauge'
},
"@timestamp": {
type: 'date'
}
}
}
}
}
)
puts response
Js
const response = await client.indices.putIndexTemplate({
name: "sensor-template",
index_patterns: ["sensor-*"],
data_stream: {},
template: {
lifecycle: {
downsampling: [
{
after: "1d",
fixed_interval: "1h",
},
],
},
settings: {
"index.mode": "time_series",
},
mappings: {
properties: {
node: {
type: "keyword",
time_series_dimension: true,
},
temperature: {
type: "half_float",
time_series_metric: "gauge",
},
voltage: {
type: "half_float",
time_series_metric: "gauge",
},
"@timestamp": {
type: "date",
},
},
},
},
});
console.log(response);
コンソール
PUT _index_template/sensor-template
{
"index_patterns": ["sensor-*"],
"data_stream": { },
"template": {
"lifecycle": {
"downsampling": [
{
"after": "1d",
"fixed_interval": "1h"
}
]
},
"settings": {
"index.mode": "time_series"
},
"mappings": {
"properties": {
"node": {
"type": "keyword",
"time_series_dimension": true
},
"temperature": {
"type": "half_float",
"time_series_metric": "gauge"
},
"voltage": {
"type": "half_float",
"time_series_metric": "gauge"
},
"@timestamp": {
"type": "date"
}
}
}
}
}
ダウンサンプリングの設定は、時系列データストリーム(TSDS)の上記のテンプレートに含まれています。ダウンサンプリングを有効にするために必要なのは、downsampling
部分だけで、どの固定間隔にダウンサンプリングするかを示します。
Rollupジョブでは、cron フィールドがRollupドキュメントのタイミングを決定します。インデックステンプレートでは、after フィールドがダウンサンプリングがドキュメントをRollupするタイミングを決定します(ロールオーバーが実行された後の時間であることに注意してください)。 |
|
Rollupジョブでは、groups フィールドがグループドキュメントのすべての次元が集約される場所を決定します。インデックステンプレートでは、time_series_dimension が設定されたフィールドtrue と@timestamp フィールドがグループを決定します。 |
|
Rollupジョブでは、fixed_interval フィールドがタイムスタンプがグループ化の一部としてどのように集約されるかを決定します。インデックステンプレートでは、 fixed_interval フィールドが同じ目的を持っています。ダウンサンプリングはカレンダー間隔をサポートしていないことに注意してください。 |
|
Rollupジョブでは、metrics フィールドがメトリクスとこれらのメトリクスをどのように保存するかを定義します。インデックステンプレートでは、time_series_metric を持つすべてのフィールドがメトリクスフィールドです。フィールドがgauge をtime_series_metric 属性値として持つ場合、このフィールドの最小、最大、合計、および値のカウントがダウンサンプリングされたインデックスに保存されます。フィールドが counter をtime_series_metric 属性値として持つ場合、ダウンサンプリングされたインデックスにこのフィールドの最後の値のみが保存されます。 |