Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Потоки данных ›Поток данных временных рядов (TSDS)

Сжатие временного ряда данных

Сжатие обеспечивает способ уменьшения объёма данных вашего временного ряда данных, храня их с уменьшенной точностью.

Системы мониторинга собирают большие объёмы данных временных рядов, которые растут со временем. По мере старения этих данных их актуальность для текущего состояния системы снижается. Процесс сжатия сворачивает документы в пределах фиксированного временного интервала в один сводный документ. Каждый сводный документ включает статистические представления исходных данных: min, max, sum и value_count для каждой метрики. Данные потока измерений временного ряда хранятся неизменными.

Сжатие, по сути, позволяет вам пожертвовать разрешением и точностью данных ради уменьшения размера хранилища. Вы можете включить его в политику управления жизненным циклом индекса (ILM) для автоматического управления объёмом и связанными с ним затратами на данные метрик по мере их старения.

Дополнительную информацию можно найти в следующих разделах:

  • Как это работает
  • Запуск сжатия данных временного ряда
  • Запросы к сжатым индексам
  • Ограничения и ограничения
  • Попробуйте

Как это работает

Временной ряд — это последовательность наблюдений, взятых за определённый промежуток времени для определённого объекта. Наблюдаемые образцы можно представить как непрерывную функцию, где измерения временного ряда остаются постоянными, а значения метрик временного ряда меняются со временем.

time series function

В индексе Elasticsearch для каждой метки времени создаётся отдельный документ, содержащий неизменные измерения временного ряда вместе с именами метрик и изменяющимися значениями метрик. Для одного момента времени могут храниться несколько измерений временного ряда и метрик.

time series metric anatomy

Для наиболее актуальных данных метрики обычно имеют низкий интервал дискретизации, поэтому они оптимизированы для запросов, требующих высокой точности данных.

time series original
Рисунок 2. Исходный ряд метрик

Сжатие применяется к более старым и реже используемым данным путём замены исходного временного ряда потоком данных с более высоким интервалом дискретизации и статистическими представлениями этих данных. Если исходные образцы метрик могут быть взяты, например, каждые десять секунд, по мере старения данных вы можете выбрать уменьшение точности выборки до часа или дня. Вы можете уменьшить точность cold архивных данных до месяца или реже.

time series downsampled
Рисунок 3. Сжатый ряд метрик

Процесс сжатия

Операция сжатия обходит исходный индекс TSDS и выполняет следующие шаги:

  1. Создаёт новый документ для каждого значения поля _tsid и каждого значения @timestamp, округлённого до fixed_interval, определённого в конфигурации сжатия.
  2. Для каждого нового документа копирует все измерения временного ряда из исходного индекса в целевой индекс. Измерения в TSDS являются постоянными, поэтому это выполняется только один раз на каждом интервале.
  3. Для каждого поля метрики временного ряда вычисляет агрегации для всех документов в интервале. В зависимости от типа метрики каждого поля хранится другой набор предварительно агрегированных результатов:

    • gauge: Хранятся min, max, sum и value_count; value_count хранится как тип aggregate_metric_double.
    • counter: Хранится last_value.
  4. Для всех остальных полей копируется последнее значение в целевой индекс.

Сопоставления полей исходного и целевого индекса

Поля в целевом, сжатом индексе создаются на основе полей в исходном индексе следующим образом:

  1. Все поля, сопоставленные с параметром time-series-dimension, создаются в целевом сжатом индексе с тем же отображением, что и в исходном индексе.
  2. Все поля, сопоставленные с параметром time_series_metric, создаются в целевом сжатом индексе с тем же отображением, что и в исходном индексе. Исключение составляют поля, сопоставленные как time_series_metric: gauge, тип поля изменяется на aggregate_metric_double.
  3. Все остальные поля, которые не являются измерениями или метриками (т.е. поля меток), создаются в целевом сжатом индексе с тем же отображением, что и в исходном индексе.

Запуск сжатия данных временного ряда

Для сжатия индекса временного ряда используйте API сжатия индекса и установите fixed_interval на желаемый уровень точности:

resp = client.indices.downsample(
    index="my-time-series-index",
    target_index="my-downsampled-time-series-index",
    config={
        "fixed_interval": "1d"
    },
)
print(resp)
response = client.indices.downsample(
  index: 'my-time-series-index',
  target_index: 'my-downsampled-time-series-index',
  body: {
    fixed_interval: '1d'
  }
)
puts response
const response = await client.indices.downsample({
  index: "my-time-series-index",
  target_index: "my-downsampled-time-series-index",
  config: {
    fixed_interval: "1d",
  },
});
console.log(response);
POST /my-time-series-index/_downsample/my-downsampled-time-series-index
{
    "fixed_interval": "1d"
}

Для сжатия данных временных рядов в рамках ILM включите действие сжатия в вашей политике ILM и установите fixed_interval на желаемый уровень точности:

resp = client.ilm.put_lifecycle(
    name="my_policy",
    policy={
        "phases": {
            "warm": {
                "actions": {
                    "downsample": {
                        "fixed_interval": "1h"
                    }
                }
            }
        }
    },
)
print(resp)
response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            downsample: {
              fixed_interval: '1h'
            }
          }
        }
      }
    }
  }
)
puts response
const response = await client.ilm.putLifecycle({
  name: "my_policy",
  policy: {
    phases: {
      warm: {
        actions: {
          downsample: {
            fixed_interval: "1h",
          },
        },
      },
    },
  },
});
console.log(response);
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "downsample" : {
            "fixed_interval": "1h"
          }
        }
      }
    }
  }
}

Запросы к сжатым индексам

Вы можете использовать конечные точки _search и _async_search для запроса к сжатому индексу. В одном запросе могут быть запрошены несколько индексов с сырыми данными и сжатыми данными, а в один запрос можно включить сжатые индексы с различной точностью (разный интервал времени корзины). То есть, вы можете запрашивать потоки данных, содержащие сжатые индексы с несколькими интервалами сжатия (например, 15m, 1h, 1d).

Результат агрегации гистограммы по времени находится в корзинах одинакового размера, и каждый сжатый индекс возвращает данные, игнорируя интервал сжатия. Например, если вы выполните агрегацию date_histogram с "fixed_interval": "1m" на сжатом индексе, сжатом с часовой точностью ("fixed_interval": "1h"), запрос возвращает одну корзину со всеми данными в 0 минуту, затем 59 пустых корзин, а затем корзину с данными для следующего часа.

Примечания по запросам к сжатым индексам

Необходимо учесть несколько моментов при запросах к сжатым индексам:

  • При выполнении запросов в Kibana и через решения Elastic возвращается нормальный ответ без уведомления о том, что некоторые из запрошенных индексов сжаты.
  • Для агрегаций гистограмм по времени поддерживаются только fixed_intervals (а не интервалы, учитывающие календарь).
  • Поддержка часовых поясов имеет свои особенности:

    • Гистограммы по времени с интервалами, кратными часу, основаны на значениях, сгенерированных в UTC. Это хорошо работает для часовых поясов, которые находятся на целых часах, например, +5:00 или -3:00, но требует смещения отчётных интервалов времени, например, 2020-01-01T10:30:00.000 вместо 2020-03-07T10:00:00.000 для часового пояса +5:30 (Индия), если сжатие агрегирует значения в час. В этом случае результаты включают поле downsampled_results_offset: true, чтобы указать, что интервалы времени смещены. Этого можно избежать, если использовать интервал сжатия в 15 минут, так как он позволяет правильно вычислять часовые значения для смещённых интервалов.
    • Гистограммы по времени с интервалами, кратными дню, аналогично затрагиваются, если сжатие агрегирует значения в день. В этом случае начало каждого дня всегда рассчитывается в UTC при генерации сжатых значений, поэтому интервалы времени необходимо смещать, например, отображать их как 2020-03-07T19:00:00.000 вместо 2020-03-07T00:00:00.000 для часового пояса America/New_York. В этом случае также добавляется поле downsampled_results_offset: true.
    • Переход на летнее/зимнее время и другие особенности часовых поясов влияют на отчётные результаты, как описано для агрегации гистограмм по времени. Кроме того, сжатие с ежедневным интервалом затрудняет отслеживание любой информации, связанной с изменением времени перехода на летнее/зимнее время.

Ограничения и ограничения

Для сжатия применяются следующие ограничения:

  • Поддерживаются только индексы в потоке данных временных рядов (потоке данных временных рядов).
  • Данные сглаживаются только по временной размерности. Все остальные размерности копируются в новый индекс без каких-либо изменений.
  • Внутри потока данных сглаженный индекс заменяет исходный индекс, а исходный индекс удаляется. Для заданного временного периода может существовать только один индекс.
  • Исходный индекс должен быть в режиме только для чтения для успешного выполнения процесса сглаживания. Подробности см. в примере ручного запуска сглаживания.
  • Поддерживается многократное сглаживание данных для одного периода (сглаживание сглаженного индекса). Интервал сглаживания должен быть кратен интервалу сглаженного индекса.
  • Сглаживание предоставляется как действие ILM. См. сглаживание.
  • Новый сглаженный индекс создаётся на уровне данных исходного индекса и наследует его параметры (например, количество фрагментов и реплик).
  • Поддерживаются числовые типы метрик gauge и counter типы метрик.
  • Настройка сглаживания извлекается из карты индекса потока данных временных рядов. Единственным дополнительным необходимым параметром является сглаживание fixed_interval.

Попробуйте

Для проведения тестирования сглаживания попробуйте наш пример ручного запуска сглаживания.

Сглаживание можно легко добавить в вашу политику ILM. Для получения информации попробуйте наш пример запуска сглаживания с ILM.

© 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/downsampling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API