Миграция со свертки на сжатие данных
Свертка и сжатие данных — это два разных механизма, позволяющие сворачивать исторические метрики. В целом, свертка более гибкая, чем сжатие, но сжатие — более надёжный и простой способ сжатия метрик.
Следующие аспекты сжатия данных более просты или надёжны:
- Нет необходимости планировать задачи. Сжатие интегрировано с Управлением жизненным циклом индексов (ILM) и Управлением жизненным циклом потоков данных (DSL).
- Нет отдельного API для поиска. К индексам, сжатым с помощью сжатия данных, можно получить доступ через API поиска и es|ql.
- Нет отдельной конфигурации для свертки. Сжатие данных использует временную размерность и конфигурацию метрик из схемы.
Не все случаи использования свертки можно перенести на сжатие данных. Основное требование состоит в том, что данные должны храниться в Elasticsearch в виде потока данных временных рядов (TSDS). Случаи использования свертки, в основном сворачивающие данные по времени и всем измерениям, можно перенести на сжатие.
Пример использования свертки, который можно перенести на сжатие:
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) 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), использующая сжатие данных через DSL:
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) 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 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 для включения сжатия данных, которая указывает, когда и с каким интервалом необходимо сжимать данные.
| В задаче свертки поле | |
| В задаче свертки поле | |
| В задаче свертки поле | |
| В задаче свертки поле |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/rollup-migrating-to-downsampling.html