- PVSM.RU - https://www.pvsm.ru -

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch

Рады представить наш новый Open Source-проект — elasticsearch-extractor [1]. Это простой веб-интерфейс, решающий единственную задачу: извлечение заданного индекса из снапшота Elasticsearch. Почему такой проект вообще появился?

Зачем

Представьте, что у вас есть большое количество однотипных инсталляций Elasticsearch в Kubernetes, где хранятся и анализируются многочисленные логи от приложений и инфраструктуры. Схема довольно обычная:

  • Эти логи ежедневно архивируются в снапшоты, которые хранятся в S3-репозитории. (Строго говоря, выбор S3 — дело вкуса: снапшоты могут храниться и в других репозиториях, зарегистрированных в Elasticsearch.)
  • Для экономии места настроен механизм очистки логов — в среднем они живут по 14 дней.
  • Снапшоты же могут храниться в S3 до 90 дней.

Для анализа различных инцидентов может часто возникать ситуация, когда необходимо доставать логи из снапшотов. Как это делать? В первую очередь приходит идея использовать веб-утилиту Cerebro [2]. Она предоставляет широкие возможности по мониторингу кластера Elasticsearch и управлению его состоянием, включая работу с репозиториями снапшотов.

Однако, к сожалению, доступ ко всем функциям Cerebro избыточен и даже потенциально опасен. Для простой операции «извлечь такой-то индекс за такое-то число» не нужна возможность удалить репозиторий, снапшот или произвольный набор индексов. А разделение пользовательских прав в этом приложении не предусмотрено.

Так у нас и возникла потребность в простом инструменте, позволяющем решать одну задачу: извлечение нужного индекса в Elasticsearch. Им стал elasticsearch-extractor.

Возможности и интерфейс

Код elasticsearch-extractor [1] написан на Go. Функционально утилита представляет собой:

  1. пользовательский веб-интерфейс;
  2. сервер, проксирующий запросы к Elasticsearch.

Интерфейс максимально упрощен и исключает возможность ошибочных/опасных действий со стороны пользователя.

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch - 1
Список снапшотов, доступных в хранилище для извлечения

Используемые в интерфейсе блоки:

  • Repositories — список хранилищ, доступных в кластере;
  • Results — информационные сообщения;
  • Nodes — узлы кластера Elasticsearch и их состояние;
  • Restored Indices — восстановленные индексы и их состояние.

Для восстановления нужного индекса необходимо нажать на кнопку восстановления:

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch - 2

После этого появится модальное окно со списком индексов, которые находятся в выбранном снапшоте:

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch - 3

После нажатия на Restore в список Restored Indices добавится индекс с названием extracted_ORIGNALNAME-DD-MM-YYYY.

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch - 4

Когда индекс полностью восстановится, появится возможность удалить его:

elasticsearch-extractor — утилита для извлечения индексов из снапшотов Elasticsearch - 5

Либо он будет удален автоматически (задачей в curator) через 48 часов.

Важной особенностью является функция расчета необходимого места на узлах кластера Elasticsearch перед восстановлением индекса из снапшота. При нехватке свободного места (для размещения индекса) в восстановлении будет отказано. Это позволяет избежать проблем, когда индекс восстанавливается частично, занимает место и появляются UNASSIGNED-шарды.

Так как мы предполагаем, что все кластеры запущены в Kubernetes, при разработке утилиты была сознательно пропущена реализация каких-либо механизмов контроля доступа /и авторизации:

  • В K8s эта задача возложена на Ingress-контроллер, предоставляющий доступ к этому сервису.
  • Вне K8s можно использовать привычные родные механизмы nginx, Apache и подобных решений.

Попробовать

Утилиту elasticsearch-extractor можно установить в систему (Linux с systemd) или запускать в Docker-контейнере. Инструкции описаны в README проекта [3].

Исходный код проекта распространяется на условиях свободной лицензии (Apache License 2.0). Будем рады улучшениям [4] — равно как проблемам [5], обсуждениям [6] и, конечно, звёздам!

P.S.

Читайте также в нашем блоге:

Автор: Борис

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/359768

Ссылки в тексте:

[1] elasticsearch-extractor: https://github.com/flant/elasticsearch-extractor

[2] Cerebro: https://github.com/lmenezes/cerebro

[3] README проекта: https://github.com/flant/elasticsearch-extractor/blob/main/README.md

[4] улучшениям: https://github.com/flant/elasticsearch-extractor/pulls

[5] проблемам: https://github.com/flant/elasticsearch-extractor/issues

[6] обсуждениям: https://github.com/flant/elasticsearch-extractor/discussions

[7] Как мы Elasticsearch в порядок приводили: разделение данных, очистка, бэкапы: https://habr.com/ru/company/flant/blog/490026/

[8] Логи в Kubernetes (и не только) сегодня: ожидания и реальность: https://habr.com/ru/company/flant/blog/480946/

[9] Источник: https://habr.com/ru/post/532538/?utm_source=habrahabr&utm_medium=rss&utm_campaign=532538