Существует два основных типа источников данных, когда мы говорим о поисковых операциях: Данные, основанные на времени (например, журналы доступа) и Данные, не основанные на времени (например, инвентаризация товаров).
Журналы, основанные на времени, имеют ряд общих черт:
- Поле @timestamp является обязательным и наиболее важным.
- Документы не обновляются.
- Документы разбиваются на индексы по времени.
- Старые документы реже ищутся или могут вообще не искаться, но их все равно нужно хранить.
Для эффективного перемещения данных мы можем использовать политики ISM (Index State Management). Index State Management позволяет определять пользовательские политики для автоматизации рутинных задач, таких как перемещение данных между узлами или удаление при определенных условиях. Таким образом, мы можем разделить наши данные по возрасту и определить их перемещение с самого быстрого оборудования на более медленное и, в конечном счете, в мусорную корзину.
Именно здесь в игру вступают потоки данных. Нам нужен способ указать политике ISM, как разделить данные на индексы. Раньше мы использовали псевдонимы rollover, но теперь потоки данных реализуют это поведение "из коробки". Потоки данных также используют шаблоны индексов, чтобы сделать генерацию еще более простой.
Как создать потоки данных в OpenSearch
Во-первых, нам нужно создать шаблон индекса, который настроит все индексы под именем, которое мы определим как Data Streams:
1 2 3 4 5 6 7 | PUT _index_template/logs-template { "index_patterns": [ "datalogs-*" ], "data_stream": {} } |
Как мы знаем, ISM позволяет определять пользовательские политики для автоматизации рутинных задач, таких как перемещение данных между узлами или удаление при определенных условиях. Без ISM не имеет смысла использовать индекс потока данных.
Отсюда все индексы, которые мы создаем, начиная с "datalogs-", будут потоками данных. По умолчанию в документах необходимо включить поле @timestamp (это поле можно изменить).
Теперь у нас есть 2 варианта:
1. Мы можем вызвать API потока данных напрямую:
1 | PUT _data_stream/datalogs-example |
2. Мы можем просто добавить документ к этому имени индекса:
1 2 3 4 5 | POST datalogs-test/_doc { "@timestamp": "2024-03-20T16:24:03.417+00:00", "message": "this is an example log" } |
Наконец, просто запустите последнюю команду и обратите внимание на ответ:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "_index" : ".ds-datalogs-test-000001", "_id" : "trjdqIFB7jRCWfUHatx-", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 } |
Что здесь произошло? Мы обратились к потоку данных, но Opensearch создал базовый индекс, в котором будут храниться данные. Имя потока данных - это просто псевдоним. Хорошо то, что нам не нужно беспокоиться о том, какой индекс мы проталкиваем. Мы просто должны выполнить push в поток данных, настроить политику ISM, и все будет работать.
Если мы установим политику для выполнения переноса через день, то через день мы увидим индекс .ds-datalogs-test-000002, и так далее. Обратите внимание, что индекс начинается с точки, это означает, что индекс скрыт. Мы не должны взаимодействовать с индексом напрямую.
Мы можем получить подробную информацию о нашем потоке данных с помощью этой команды:
1 | GET _data_stream/datalogs-test |
И еще больше информации:
1 | GET _data_stream/datalogs-test/_stats |
Как искать в потоке данных
Поиск в потоке данных аналогичен поиску в обычном индексе. Будут запрошены все базовые индексы.
1 | GET datalogs-test/_search |
Как удалить поток данных
При удалении потока данных будут удалены все базовые индексы:
1 | DELETE _data_stream/datalogs-test/ |
Ограничения потоков данных
Потоки данных оптимизированы для работы с временными сериями.
- Они предназначены в первую очередь для добавления данных.
- Поле @timestamp является обязательным.
- Поисковые запросы отображаются на все индексы, запросы на запись - на последний индекс записи.
Потоки данных можно использовать с помощью политик ISM, что еще больше упрощает процесс перемещения данных между узлами и управления политиками хранения.
Заключение
Потоки данных обеспечивают настройку, которая отлично работает с данными, основанными на времени, что значительно упрощает настройку политик ISM.
Если вы хотите получать журналы или любые другие документы, которые ориентированы на временные метки, вы можете использовать потоки данных и забыть о настройке скользящих псевдонимов. Просто приступайте к созданию политик ISM для обработки хранимых данных.