Гид по технологиям

Управление старыми данными в Elasticsearch: удаление и ротация индексов

4 min read Elasticsearch Обновлено 29 Oct 2025
Удаление и ротация индексов в Elasticsearch
Удаление и ротация индексов в Elasticsearch

Быстрые ссылки

  • Удаление через “Delete By Query” API
  • Лучший способ: индексы по времени и ILM

Удаление через “Delete By Query” API

Elasticsearch предоставляет API “Delete By Query”, который удаляет все документы, соответствующие запросу. Его можно использовать для удаления документов по диапазону временных меток, например:

POST indexname/_delete_by_query

{

“query”: {

“range” : {

“@timestamp” : {

“gte” : “09/02/2020”,

“lte” : “11/02/2020”,

“format”: “dd/MM/yyyy||yyyy”

}

}

}

}


Определение: Delete By Query — это API, которое находит документы по запросу и помечает их как удалённые; под капотом происходит переиндексация/маркировка, и операции могут потребовать значительных ресурсов.

Важно: этот подход масштабируется линейно по количеству документов. Если у вас много данных (гигабайты/терабайты), операция будет очень медленной и нагружает кластер. Для систем с высокой инжестой (много логов в секунду) удалять данные таким способом нерентабельно.

## Лучший способ: индексы по времени

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

Пример шаблона индекса при инжесте:

index: “indexname-%{+yyyy.MM.dd}”


Это требует настроить pipeline/логгер так, чтобы он создавал индексы с датой в имени. После этого вы управляете жизненным циклом индексов, а не отдельных документов.

### Политики жизненного цикла индекса (ILM)

Kibana: зайдите в Stack Management → Index Lifecycle Policies и создайте политику. Вы можете настроить фазы (hot, warm, cold, delete). Для удаления старых данных достаточно отключить rollover и включить фазу удаления, указав число дней, после которого индексы удаляются.

![Kibana: интерфейс управления политиками жизненного цикла индекса](/files/88a38c52-c172-44a0-b3c4-efbcdd1fd53a.png)

Выберите политику и примените её к шаблону индексов через "Add Policy To Index Template" или присоедините политику к конкретному шаблону индекса.

![Параметры фазы удаления в политике ILM: указание возраста индекса для удаления](/files/86cf21f5-d1d8-4b8b-8b5b-1a180b94eefc.png)

![Добавление политики ILM к шаблону индекса в списке политик](/files/36e321a5-05f3-455a-9f57-df65e05089bb.png)

После применения политики старые индексы, соответствующие шаблону, будут удалены автоматически.

## Когда Delete By Query уместен и когда нет

- Уместен: мелкие объёмы данных, одноразовые исправления, удаление конкретных документов по уникальным критериям.
- Не уместен: непрерывные большие потоки логов, необходимость массового удаления по времени, кластеры с ограниченными ресурсами.

Контрпример: если вы храните редкие записи конфигурации и хотите удалить одну запись — Delete By Query подходит. Если вы храните терабайты логов и хотите удалить логи старше 30 дней — лучше удалять целые индексы.

## Альтернативные подходы

- Ротация индексов по дню/неделе/месяцу + ILM — основной рекомендованный вариант.
- Сжатие/downsizing данных: перемещение старых индексов в холодный узел (cold) вместо удаления.
- Snapshot + удаление: делайте снимки (snapshot) перед удалением, если нужен архив.
- Использовать хранение вне Elasticsearch (S3/архивная БД) для долгосрочных данных.

## Мини-методология: как перейти на индексы по времени за 6 шагов

1. Проанализируйте текущую нагрузку и объёмы по дням.
2. Настройте формат индекса в ваших логерах/ингестерах: indexname-%{+yyyy.MM.dd}.
3. Создайте шаблон индекса (Index Template) с mappings и settings.
4. Создайте политику ILM в Kibana/Elasticsearch и протестируйте на тестовом индексе.
5. Примените политику к шаблону индекса и проверьте, что старые индексы удаляются по расписанию.
6. Настройте мониторинг и алерты на использование диска и время выполнения ILM.

## Контрольный список по ролям

- Инженер по логированию:
  - Настроить формат имени индекса в логгере.
  - Обеспечить согласованность полей @timestamp.
- Администратор Elasticsearch:
  - Создать и протестировать ILM-политику.
  - Применить политику к шаблонам индексов.
  - Настроить snapshot/бэкап перед массовыми удалениями.
- DevOps/инфраструктура:
  - Мониторить использование диска и SLI.
  - Планировать хранение холодных данных и удаление.

## Ключевые факты

- Delete By Query работает на уровне документов и масштабируется линейно с числом документов.
- Ротация индексов позволяет выполнять удаление/архивацию мгновенно (удаляется весь индекс).
- ILM управляет жизненным циклом индекса: rollover, фазы перемещения, удаление.

## Критерии приёмки

- Логи пишутся в индекс с датой в имени в течение 24 часов после переключения конфигурации.
- Политика ILM применена к шаблону индекса и удаляет индексы старше заданного возраста.
- Нет неожиданной потери данных: есть snapshot или архивация для критичных данных.

## Проблемы безопасности и приватности

- Перед массовым удалением убедитесь, что удаляемые данные не подлежат юридическому хранению.
- Делайте снимки/архивы в зашифрованное хранилище, если данные чувствительны.
- Контролируйте доступ к Kibana и правам на изменение ILM и шаблонов индексов.

## Глоссарий (в одну строку)

- Индекс: логическая единица хранения документов в Elasticsearch, может содержать mappings и настройки.
- ILM (Index Lifecycle Management): механизм автоматического управления жизненным циклом индекса.
- Delete By Query: API для массового удаления документов по запросу.

## Краткий итог

Для больших объёмов логов не используйте Delete By Query как основной способ удаления по времени. Настройте индексы по времени и применяйте политику ILM. Это упрощает операции и снижает нагрузку на кластер.

![Иллюстрация ротации индексов в Elasticsearch и удаления старых индексов](/files/7539ad7e-a9ef-48d4-960f-a8f137cbeafe.png)
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти