Skip to content

flant/osctl

Repository files navigation

osctl - Инструмент управления жизненным циклом индексов и снапшотов OpenSearch

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

Фактически это замена curator с только нужными нам функциями.

Также есть ряд команд, которые решают специфичные проблемы - такие как вычисление оптимального числа шардов или автосоздание индекспаттернов.

По-умолчанию предполагается использование config.yaml в котором описаны параметры запуска и запуск через кронджобы с указанием команды.

Все, что указано в конфгиах можно переопределять через флаги и переменные, а также все команды поддерживают --dry-run.

Доступные команды (action)

Команда Назначение
snapshots Создание снапшотов согласно политикам в конфиге
snapshotsdelete Удаление снапшотов согласно политикам в конфиге
indicesdelete Удаление индексов согласно политикам в конфиге
snapshotschecker Нахождение отсутствующих снапшотов
retention Удаление индексов со снапшотами при превышении некоторого порога
dereplicator Уменьшение числа реплик у индексов со снапшотами
coldstorage Миграция в холодное хранилище при превышении числа дней
extracteddelete Удаление extracted индексов
danglingchecker Проверка dangling индексов
sharding Автоматическое выставление оптимального числа шардов
indexpatterns Управление index patterns в Kibana
datasource Создание Kibana data-source ( рековерер)
`snapshot-manual Создание только одного снапшота для индексов с определенным паттерном

Конфигурация

Общая конфигурация (config.yaml)

Пример в config.yaml

Конфигурация индексов (osctlindicesconfig.yaml)

Пример в config-example/osctlindicesconfig.yaml

Конфигурация тенантов (osctltenants.yaml)

Пример в config-example/osctltenants.yaml

Full-prefix режим (постоянные индексы) + Elasticsearch 5.x

Для кластеров, где индексы постоянные (не суточная ротация, например квартальные as-horror-v1-events-2025.1) и нужно бэкапить весь префикс целиком — как в старом per-namespace скрипте.

Включается флагом full_prefix_snapshots: true в osctlindicesconfig.yaml (пример: config-example/osctlindicesconfig-fullprefix.yaml). В этом режиме:

Джоба Поведение
snapshots На каждый префикс — все его открытые индексы в один снапшот <prefix>-<дата запуска> (например as-horror-2026.07.03). Один снапшот на префикс в день, имя стабильно. Если снапшот за сегодня уже есть и содержит все сегодняшние индексы — ничего не делает; если каких-то индексов не хватает — досоздаёт их отдельным снапшотом. Закрытые индексы пропускаются.
snapshotsdelete Ретеншн по дням: удаляет снапшоты префикса, дата в имени которых старше чем сегодня - snapshot_count_s3 дней.
snapshotschecker Проверяет, что у каждого префикса есть свежий полный снапшот; иначе шлёт алерт в Madison.
snapshotsbackfill Отключена — завершается с ошибкой (в этом режиме бэкфилл смысла не имеет, не планируйте её).

days_count в этом режиме не требуется. snapshot_count_s3 — это сколько дней хранить снапшоты (при отсутствии берётся s3_snapshots.unit_count.all).

Логика snapshotschecker (на каждый префикс):

  1. Находит текущие открытые индексы префикса.
  2. Берёт успешные снапшоты <prefix>-<дата> не старше 2 дней (за сегодня/вчера).
  3. Если таких снапшотов нет — префикс попадает в алерт (нет свежего снапшота).
  4. Если есть, но вместе они не покрывают все открытые индексы — в алерт попадают недостающие индексы (снапшот неполный).
  5. Иначе — префикс OK. Порог «2 дня» задан константой fullPrefixStaleMaxDays.

Для legacy Elasticsearch 5.2/5.3 дополнительно включите es5_compatibility: true в config.yaml (рядом с opensearch_url). Это:

  • убирает параметр verbose из get-snapshots API (появился только в ES 5.4, ES 5.2/5.3 отвечают HTTP 400);
  • удаляет снапшоты по одному (мульти-удаление — это ES 7.0+);
  • снапшотит только открытые индексы (ES 5.x не умеет снапшотить закрытые);
  • подключается без TLS-клиентских сертификатов — открыто по plain HTTP, если не задана basic-auth.

Предусловие: S3-репозиторий снапшотов должен быть зарегистрирован в кластере заранее (PUT /_snapshot/<repo>), osctl репозитории не создаёт.

Приоритет конфигурации

  1. Флаги командной строки (наибольший приоритет)
  2. Переменные окружения
  3. Общий конфиг (config.yaml)
  4. Значения по умолчанию (наименьший приоритет)

📚 Документация

  • ENVIRONMENT_VARIABLES_AND_FLAGS.md - Полный список всех флагов и переменных окружения
  • ARCHITECTURE.md - Подробные алгоритмы и архитектура приложения
  • DEVELOPMENT.md - Как вносить изменения и тестировать
  • Справка: osctl [команда] --help

About

Go-приложение для управления жизненным циклом индексов OpenSearch кластеров.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors