TGViewer
Elastic Stack recipes Elastic Stack recipes @elasticstack_ru · 1.55K subscribers
Post #165 941
В ElasticSearch и OpenSearch могут храниться данные как в виде временных рядов с полем времени (например, логи приложений) так и без специального поля с указанием времени (например, каталог товаров интернет-магазина). Данные, которые содержат время, удобнее всего хранить в виде потоков данных (data streams). В этом посте на примере OpenSearch мы расскажем чем потоки данных отличаются от обычных индексов и когда их можно использовать.

Данные в виде временных рядов обладают следующими свойствами:
🔎 есть поле @timestamp и оно обязательное
🔎 документы не обновляются
🔎 документы делятся на индексы, основываясь на времени
🔎 поиск по старым документам менее вероятен, чем по новым

В OpenSearch для перемещения данных используется ISM (Index State Management). Эта технология позволяет определять политики для автоматизации перемещения данных между узлами или их удаления при определенных условиях. Таким образом, можно разделить данные по возрасту и определить их перемещение, например, с SSD-дисков на HDD-диски и, в конечном итоге, их удалить.

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

PUT _index_template/logs-template
{
"index_patterns": [
"logs-*"
],
"data_stream": {}
}

Выше мы определили, что все индексы, начинающиеся с logs будут потоками данных. Теперь запишем документ в индекс logs-messages

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 обязательно
🔎Поисковые запросы выполняются по всем индексам в потоке, запросы на запись к последнему индексу
🔎Вам не нужно выбирать индекс, в который записывать, записывайте данные в поток

Ребята, накидайте, пожалуйста огней, если пост был вам полезен😊
More from @elasticstack_ru
  1. Sep 11, 2026A visual guide to troubleshooting search performance using Query Insights dashboards В ста…
  2. Aug 21, 2026Online index migration and shard scaling in OpenSearch with the AOSC plugin AOSC — это ope…
  3. Aug 14, 2026Wazuh без ограничений дашборда: работаем напрямую с индексами Wazuh хорош ровно до тех пор…
  4. Aug 13, 2026Поиск в глубину: какие инструменты помогают работать поиску в Uzum Market Интересная стать…
  5. Aug 11, 2026Проведем аудит систем логирования Elasticsearch / OpenSearch Системы централизованного лог…
  6. Aug 5, 2026Вышел Elastic 9.5 Уж не знаем договаривались они или нет, но анонс по новым релизам у Elas…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →