Ключевые функции в сравнении с iml - время создания снапшотов и индексов зашивается в конец их названия, сами снапшоты и индексы формируются логстешом. Политика ротации настраивается в одном месте конфигом. В конфиге прописываются для каждого интересующего нас префикса своя политика - сколько дней храним в кластере и сколько дней храним снапшоты каждого дня. Все индексы которые не попали в паттерны - управляются политикой unknown. Все делается кронджобами.
Фактически это замена curator с только нужными нам функциями.
Также есть ряд команд, которые решают специфичные проблемы - такие как вычисление оптимального числа шардов или автосоздание индекспаттернов.
По-умолчанию предполагается использование config.yaml в котором описаны параметры запуска и запуск через кронджобы с указанием команды.
Все, что указано в конфгиах можно переопределять через флаги и переменные, а также все команды поддерживают --dry-run.
| Команда | Назначение |
|---|---|
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-example/osctlindicesconfig.yaml
Пример в config-example/osctltenants.yaml
Для кластеров, где индексы постоянные (не суточная ротация, например квартальные 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 (на каждый префикс):
- Находит текущие открытые индексы префикса.
- Берёт успешные снапшоты
<prefix>-<дата>не старше 2 дней (за сегодня/вчера). - Если таких снапшотов нет — префикс попадает в алерт (нет свежего снапшота).
- Если есть, но вместе они не покрывают все открытые индексы — в алерт попадают недостающие индексы (снапшот неполный).
- Иначе — префикс 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 репозитории не создаёт.
- Флаги командной строки (наибольший приоритет)
- Переменные окружения
- Общий конфиг (
config.yaml) - Значения по умолчанию (наименьший приоритет)
- ENVIRONMENT_VARIABLES_AND_FLAGS.md - Полный список всех флагов и переменных окружения
- ARCHITECTURE.md - Подробные алгоритмы и архитектура приложения
- DEVELOPMENT.md - Как вносить изменения и тестировать
- Справка:
osctl [команда] --help