Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›Потоки данных

Поток данных временных рядов (TSDS)

Поток данных временных рядов (TSDS) моделирует данные метрик со временем как один или несколько временных рядов.

Вы можете использовать TSDS для более эффективного хранения данных метрик. В наших тестах данные метрик, хранящиеся в TSDS, занимали на 70% меньше места на диске, чем обычный поток данных. Точный эффект будет варьироваться в зависимости от набора данных.

Когда использовать TSDS

И обычный поток данных, и TSDS могут хранить данные метрик со временем. Используйте TSDS только если вы обычно добавляете данные метрик в Elasticsearch в режиме реального времени и @timestamp порядке.

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

Отличия от обычного потока данных

TSDS работает как обычный поток данных с некоторыми ключевыми отличиями:

  • Шаблон индекса соответствия для TSDS требует data_stream объект с параметром index.mode: time_series. Этот параметр включает большинство функций, связанных с TSDS.
  • В дополнение к @timestamp, каждый документ в TSDS должен содержать один или несколько полей размерностей. Шаблон индекса соответствия для TSDS должен содержать отображения, по крайней мере, для одной keyword размерности.

    Документы TSDS обычно также содержат одно или несколько полей метрик.

  • Elasticsearch генерирует скрытое _tsid метаполе для каждого документа в TSDS.
  • TSDS использует индексы с временными ограничениями для хранения данных из одного и того же периода времени в одном и том же индексе.
  • Шаблон индекса соответствия для TSDS должен содержать параметр индекса index.routing_path. TSDS использует этот параметр для выполнения маршрутизации по размерностям.
  • TSDS использует внутреннюю сортировку индекса для упорядочивания фрагментов фрагментов по _tsid и @timestamp.
  • Документы TSDS поддерживают только автоматически сгенерированные значения документа _id. Для документов TSDS значение документа _id является хэшем размерностей документа и @timestamp. TSDS не поддерживает пользовательские значения документов _id.
  • TSDS использует синтетические _source, и в результате подвержен некоторым ограничениям и изменениям, применённым к полю _source.

Индекс временных рядов может содержать поля, отличные от размерностей или метрик.

Что такое временной ряд?

Временной ряд — это последовательность наблюдений для конкретного объекта. Вместе эти наблюдения позволяют отслеживать изменения в объекте со временем. Например, временной ряд может отслеживать:

  • Использование процессора и диска для компьютера
  • Стоимость акции
  • Температуру и влажность, считываемые с метеорологического датчика.
time series chart
Рисунок 1. Временной ряд данных, измеренных метеорологическим датчиком, изображённый графиком

В TSDS каждый документ Elasticsearch представляет собой наблюдение или точку данных в определённом временном ряду. Хотя TSDS может содержать несколько временных рядов, документ может принадлежать только одному временной ряду. Временной ряд не может охватывать несколько потоков данных.

Размерности

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

Документ TSDS однозначно определяется своим временным рядом и отметкой времени, которые оба используются для генерации документа _id. Таким образом, два документа с одинаковыми размерностями и одинаковой отметкой времени считаются дубликатами. При добавлении документов в TSDS с помощью конечной точки _bulk, второй документ с той же отметкой времени и размерностями перезаписывает первый. Если используется формат PUT /<target>/_create/<_id> для добавления отдельного документа, а документ с такими же _id уже существует, генерируется ошибка.

Вы помечаете поле как размерность, используя булевый параметр отображения time_series_dimension. Следующие типы полей поддерживают параметр time_series_dimension:

  • keyword
  • ip
  • byte
  • short
  • integer
  • long
  • unsigned_long
  • boolean

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

Определения размерностей могут быть упрощены с помощью прозрачных полей.

Метрики

Метрики — это поля, содержащие числовые измерения, а также значения агрегаций и/или понижения частоты дискретизации на основе этих измерений. Хотя это необязательно, документы в TSDS обычно содержат одно или несколько полей метрик.

Метрики отличаются от размерностей тем, что размерности обычно остаются постоянными, а метрики, как ожидается, будут меняться со временем, даже если редко или медленно.

Для того, чтобы пометить поле как метрику, вы должны указать тип метрики, используя параметр отображения time_series_metric. Следующие типы полей поддерживают параметр time_series_metric:

  • aggregate_metric_double
  • histogram
  • Все числовые типы полей

Принимаемые типы метрик зависят от типа поля:

Допустимые значения для 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 недоступно для запросов и обновления. Также невозможно получить _tsid документа с помощью запроса получения документа. Однако, вы можете использовать поле _tsid в агрегациях и получить значение _tsid в результатах поиска, используя параметр fields.

Не следует полагаться на формат поля _tsid. Он может меняться от версии к версии.

Индексы с временными ограничениями

В TSDS каждый базовый индекс, включая последний, имеет диапазон допустимых значений @timestamp. Этот диапазон определяется настройками индекса index.time_series.start_time и index.time_series.end_time.

При добавлении документа в TSDS Elasticsearch добавляет документ в соответствующий базовый индекс на основе его значения @timestamp. В результате, TSDS может добавлять документы в любой базовый индекс TSDS, который может принимать записи. Это относится даже если индекс не является последним базовым индексом.

time bound indices

Некоторые действия ILM помечают исходный индекс как только для чтения или ожидают, что индекс больше не будет активно записываться, чтобы обеспечить хорошую производительность. К таким действиям относятся: - Удалить - Снизить частоту - Принудительно объединить - Только для чтения - Поисковый снимок - Сжать Управление жизненным циклом индекса не будет продолжать выполнение этих действий, пока не истечет верхний временной предел для принятия записей, представленный настройкой индекса index.time_series.end_time.

Если ни один базовый индекс не может принять значение @timestamp документа, Elasticsearch отклонит документ.

Elasticsearch автоматически настраивает index.time_series.start_time и index.time_series.end_time настройки в рамках процесса создания и переключения индексов.

Время прогнозирования

Используйте настройку индекса 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

Индексироваться могут только данные, попадающие в этот диапазон.

Вы можете использовать API получения потока данных для проверки допустимого диапазона времени для записи в любой TSDS.

Маршрутизация на основе размерностей

В каждом базовом индексе TSDS Elasticsearch использует настройку индекса index.routing_path для маршрутизации документов с одинаковыми размерностями на одни и те же фрагменты.

При создании соответствующей шаблона индекса для TSDS необходимо указать одну или несколько размерностей в настройке index.routing_path. Каждый документ в TSDS должен содержать одну или несколько размерностей, которые соответствуют настройке index.routing_path.

Настройка index.routing_path принимает шаблоны подстановок (например, dim.*) и может динамически подбирать новые поля. Однако Elasticsearch отклонит любые обновления сопоставлений, которые добавляют обработанные, динамические или не-измеряемые поля, которые соответствуют значению index.routing_path.

Проброс полей можно настроить как контейнеры размерностей. В этом случае их подполя автоматически включаются в путь маршрутизации.

Документы TSDS не поддерживают пользовательское значение _routing. Аналогично, вы не можете потребовать значения _routing в сопоставлениях для TSDS.

Сортировка индексов

Elasticsearch использует алгоритмы сжатия для сжатия повторяющихся значений. Это сжатие наиболее эффективно, когда повторяющиеся значения хранятся рядом друг с другом — в одном индексе, на одном фрагменте и рядом в одном фрагменте сегмента.

Большинство временных рядов данных содержит повторяющиеся значения. Размерности повторяются в документах одной временной серии. Значения метрик временного ряда также могут медленно изменяться со временем.

Внутри каждый базовый индекс TSDS использует сортировку индекса для упорядочения фрагментов сегмента по _tsid и @timestamp. Это повышает вероятность того, что эти повторяющиеся значения будут храниться рядом друг с другом для лучшего сжатия. TSDS не поддерживает никакие настройки индекса index.sort.*.

Что дальше?

Теперь, когда вы знаете основы, вы готовы создать TSDS или преобразовать существующий поток данных в TSDS.

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

Spec-Zone.ru

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