Управление старыми данными в 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 и включить фазу удаления, указав число дней, после которого индексы удаляются.

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


После применения политики старые индексы, соответствующие шаблону, будут удалены автоматически.
## Когда 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. Это упрощает операции и снижает нагрузку на кластер.
Автор
Редакция
Похожие материалы
Кибербезопасность
Herodotus: механизм и защита Android‑трояна
Windows руководство
Включить новое меню «Пуск» в Windows 11
Excel
Панель полей сводной таблицы в Excel — руководство
Windows 11
Включить новое меню «Пуск» в Windows 11
Windows
Дубликаты Диспетчера задач в Windows 11 — как исправить
Instagram