Каталог блюд «Гонца» живёт в одном индексе: блюда меняются, удаляются, добавляются, но их число почти не растёт. Логи устроены иначе: каждый день гигабайты новых записей, старые никогда не правятся, а через месяц их можно удалить. Хранить такой поток в одном индексе неудобно. Разберём, как Elasticsearch хранит данные, которые растут во времени.
Почему не один индекс
Представь журнал в бухгалтерии, куда записывают каждую операцию. Если вести одну толстую тетрадь годами, она станет неподъёмной, а выбросить записи старше года не получится, не переписав тетрадь. Поэтому журналы ведут по месяцам: новая тетрадь на каждый месяц, а старые тетради целиком уходят в архив или в шредер.
С логами то же самое:
- удалять старое дёшево, если оно лежит отдельно. Удалить индекс целиком мгновенно. Удалить из огромного индекса записи старше 30 дней значит перебрать и пометить удалёнными миллионы документов;
- шарды не должны расти бесконечно. Размер шарда 10-50 ГБ, а логи за год весят терабайты;
- свежие и старые данные живут по-разному. Свежие ищут постоянно, их держат на быстрых дисках. Старые нужны раз в месяц, их можно перенести на дешёвые.
Раньше индексы называли по дате руками: logs-2026.06.30, logs-2026.07.01. Сейчас для этого есть data streams.
Data stream
Data stream это одно имя, например logs-nginx.access-default, за которым стоят скрытые индексы по времени. Их называют backing-индексами: .ds-logs-nginx.access-default-2026.07.01-000001, потом ...-000002. Запись всегда идёт в последний, поиск идёт по всем сразу.
У data stream три правила:
- у каждого документа обязательно поле
@timestamp; - документы только добавляются:
PUTс_idи обычное обновление запрещены. Исправлять логи задним числом нельзя, и это правильно; - data stream создаётся по шаблону индекса с разделом
"data_stream": {}. Подробно о шаблонах в уроке 16.
Имена устроены по схеме тип-набор-пространство: logs-nginx.access-default, logs-gonets.app-production, metrics-system.cpu-default. Это соглашение Elastic, и Kibana по нему понимает, что в индексе.
урок из курса
Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.