Мониторинг бекапов в S3
Мониторинг бекапов в Наблюдателе отвечает на вопрос, который обычно задают слишком поздно: а бекап вообще делается? Подключите S3-бакет, укажите «папки», куда скрипт складывает дампы, — и Наблюдатель будет следить, появляются ли новые файлы, не стал ли свежий бекап подозрительно маленьким и сколько места осталось в хранилище.
Агент и доработка приложения не нужны: бакет опрашивает сам Наблюдатель снаружи. Поэтому проверка работает, даже если сервер с приложением упал. Файлы не скачиваются и не читаются — хватает ключа с правом только на просмотр списка объектов.
Что проверяется
Раз в 15 минут (период можно изменить) Наблюдатель листает заданные префиксы и для каждого считает:
| Показатель | Зачем |
|---|---|
| Возраст последнего объекта | бекап не появился вовремя — скрипт сломался или упёрся в место |
| Размер последнего объекта и его изменение к предыдущему | новый дамп резко меньше прежнего — возможно, пустой или обрезанный |
| Число объектов и объём префикса | динамика роста |
| Заполнение квоты бакета | когда кончится место; нужно указать квоту |
| Успешность опроса | ключ отозван, бакет удалён, хранилище недоступно |
Целостность архива не проверяется — только наличие, время и размер.
Какой ключ нужен
Создайте у провайдера отдельный ключ с правом только на листинг бакета (s3:ListBucket), без чтения и записи объектов. Не используйте root-ключ аккаунта.
Ключ хранится в зашифрованном виде и после сохранения больше нигде не показывается — ни в кабинете, ни ИИ-ассистенту. При редактировании хранилища поля ключа можно оставить пустыми («не менять»).
Хранилище должно быть доступно из интернета по https. Адреса внутренних сетей (10.x, 192.168.x, localhost и подобные) запрещены, поэтому MinIO или Ceph внутри вашего compose или кластера пока не подключить.
Как подключить бакет
- Откройте стек и вкладку «S3». Она есть у любого стека, агент не нужен.
- Нажмите «Подключить хранилище».
- Заполните форму «Подключить S3-хранилище» и нажмите «Подключить».
| Поле | Что указать |
|---|---|
| «Название» | например «Бекапы» |
| «Адрес хранилища» | https://storage.yandexcloud.net, https://s3.amazonaws.com, https://s3.ru-1.storage.selcloud.ru и т. п. |
| «Бакет» | имя бакета |
| «Регион» | если провайдер требует: AWS, Yandex — ru-central1. Пусто — us-east-1 |
| «Path-style адресация» | для MinIO и части провайдеров, где бакет указывается в пути |
| «Access Key ID», «Secret Access Key» | ключ только на листинг |
| «Квота бакета, ГБ» | объём по тарифу провайдера: S3 его не сообщает. Без квоты не будет процента заполнения и прогноза |
| «Период опроса» | каждые 5, 15 (по умолчанию) или 30 минут, каждый час |
| «Считать заполнение по всему бакету» | если бакет общий для нескольких стендов — см. ниже |
В той же форме задаётся первый префикс, остальные добавляются потом. Первый опрос проходит в течение минуты.
Префикс: какую «папку» отслеживать
| Поле | Что указать |
|---|---|
| «Название» | например «Бекапы базы данных» |
| «Префикс» | «папка» в бакете, например backups/db/. Листинг рекурсивный; пусто — весь бакет. / на конце не добавляется сам |
| «Учитывать» | шаблон имени файла, например *.gz |
| «Не учитывать» | шаблон для исключения, например *.tmp |
Шаблоны применяются к имени файла — последней части ключа.
Важно. Если скрипт кроме датированных файлов перезаписывает копию «последнего» бекапа (
db-latest.sql.gz), исключите её: «Не учитывать» —*-latest*. Иначе сравнение «новый файл против предыдущего» будет ложным.
Отслеживайте каждую базу или каждый вид бекапа отдельным префиксом — так уведомление скажет, какой именно бекап пропал.
Общий бакет на несколько стендов
По умолчанию «занято» — это сумма объёма отслеживаемых префиксов. Если в бакете лежат бекапы нескольких стендов, а стек следит только за своими, эта сумма занизит заполнение. Включите «Считать заполнение по всему бакету»: тогда раз в час Наблюдатель листает бакет целиком. Ключу при этом нужен листинг всего бакета. Если бакет общий для нескольких стеков, включайте подсчёт в одном из них.
В бакете больше миллиона объектов — полный подсчёт обрезается, и вкладка покажет «не меньше …» с предупреждением.
Вкладка «S3»
По каждому хранилищу видно:
- статус опроса: «Работает», «Ошибка», «Ожидает опроса», «Выключено», и текст последней ошибки;
- бакет, адрес, период и время последнего опроса;
- заполнение: «Занято … из …», процент и «Место закончится: через …» — прогноз по истории;
- таблица префиксов: «Объектов», «Объём», «Последний объект» (имя, размер, время и изменение «к прежнему»), «Возраст».
Возраст старше 26 часов подсвечивается жёлтым, последний объект меньше прежнего на 50% и больше — красным. Пометка «не все: лимит листинга» значит, что в префиксе слишком много объектов для одного опроса.
Ниже — график «По префиксам» с выбором показателя: объём, число объектов, возраст или размер последнего объекта — и периодом.
Кнопка «Проверить» опрашивает хранилище сразу и объясняет ошибку понятными словами: «нет доступа (403)», «неверный секретный ключ», «бакет не найден», «таймаут», «ошибка TLS», «адрес хранилища запрещён».
Уведомления о бекапах
Кнопка «Алерты» у хранилища открывает окно с правилами, которые уже действуют, и готовыми шаблонами. Отметьте нужные и нажмите «Добавить»:
| Шаблон | Условие | Уровень |
|---|---|---|
| «Новых объектов нет больше 26 ч» | бекап не появился вовремя; пустой префикс — тоже повод | ошибка |
| «Новый объект меньше прежнего вдвое» | новый файл меньше предыдущего на 50% и больше | предупреждение |
| «Бакет заполнен на 80 %» | нужна квота хранилища | предупреждение |
| «Хранилище недоступно 30 мин» | все опросы за 30 минут с ошибкой или опросов не было | ошибка |
Правило, созданное из шаблона, действует на все префиксы хранилища. Порог, конкретный префикс и уровень меняются в правилах проекта: источник «S3-хранилища».
Уведомление называет последний файл: «Новых объектов нет 31 ч (порог 26 ч), последний — db-20260914.sql.gz». Когда бекап снова появился, в ленту стека пишется событие «Порог в норме» с текстом вида «Появился новый объект: db-20260915.sql.gz (3,2 ч назад)». У него уровень «Инфо», поэтому по умолчанию в каналы оно не приходит — только в ленту. Подключение, изменение и отключение хранилища тоже видны в ленте событий.
Совет. Порог 26 часов рассчитан на ежедневный бекап с запасом на задержку. Если бекап делается раз в неделю, поднимите порог до 170–180 часов.
Ограничения
- Версионированный бакет: считаются только текущие версии объектов. Старые версии и delete markers место занимают, но в объём не попадают.
- Незавершённые multipart-загрузки в листинг не попадают, хотя место занимают.
- Содержимое не проверяется: архив может быть битым при нормальном размере. Периодически восстанавливайте бекап на тестовом стенде.
Через ИИ-ассистента
ИИ-ассистент подключит бакет и префиксы, проверит доступ и добавит правила: «подключи бакет backups в Yandex Object Storage к стеку prod, следи за папкой db/, без файлов -latest, и предупреди, если бекап не появится за сутки». Ключ передаётся ему только для создания хранилища и обратно не возвращается.
Что дальше
Первый сервер или стек подключается за пару минут. Бесплатно в раннем доступе.
Нашли неточность или не хватает ответа? Напишите на hello@nablserver.ru