Данные в виде временных рядов обладают следующими свойствами:
🔎 есть поле @timestamp и оно обязательное
🔎 документы не обновляются
🔎 документы делятся на индексы, основываясь на времени
🔎 поиск по старым документам менее вероятен, чем по новым
В OpenSearch для перемещения данных используется ISM (Index State Management). Эта технология позволяет определять политики для автоматизации перемещения данных между узлами или их удаления при определенных условиях. Таким образом, можно разделить данные по возрасту и определить их перемещение, например, с SSD-дисков на HDD-диски и, в конечном итоге, их удалить.
В этот момент в игру вступают потоки данных. Нужен какой-то способ указать ISM как разделить данные на индексы и это как раз он. Потоки данных используют шаблоны индексов. Для начала создадим шаблон индекса и определим поток данных:
PUT _index_template/logs-templateВыше мы определили, что все индексы, начинающиеся с logs будут потоками данных. Теперь запишем документ в индекс logs-messages
{
"index_patterns": [
"logs-*"
],
"data_stream": {}
}
POST logs-messages/_docА теперь магия! Извлечем этот документ и увидим, что он оказался в потоке данных:
{
"@timestamp": "2023-04-26T09:30:33.132+03:00",
"message": "съешь ещё этих мягких французских булок да выпей чаю"
}
{
"_index" : ".ds-logs-messages-000001",
"_id" : "y0UApX0BzzHCVHV5VzYo",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Что здесь произошло? Мы записали документ в поток данных, а Opensearch создал базовый индекс, в котором будут храниться записанные данные. Имя потока данных — это псевдоним. Можно даже не беспокоиться о том, какой индекс мы выполнили запись. Нужно просто выполнять запись в поток данных, настроить политику ISM, а OpenSearch сам разберется куда записать. Согласитесь, удобно.Если ISM будет настроен выполнять перенос через день, то через 1 день появится индекс .ds-logs-messages-000002 и так далее. Обратите внимание, что индекс начинается с точки, это означает, что индекс скрыт. Не нужно взаимодействовать с индексом напрямую. Две следующие команды помогут извлечь полезную статистику по использованию потоков данных:
GET _data_stream/logs-messagesИскать в потоке данных тоже просто:
GET _data_stream/logs-messages/_stats
GET logs-messages
/_search
Takeaway, как говорится:🔎Потоки данных предназначены для неизменных данных, которые только дополняются
🔎Поле @timestamp обязательно
🔎Поисковые запросы выполняются по всем индексам в потоке, запросы на запись к последнему индексу
🔎Вам не нужно выбирать индекс, в который записывать, записывайте данные в поток
Ребята, накидайте, пожалуйста огней, если пост был вам полезен😊