Мониторинг бекапов в S3

Мониторинг бекапов в Наблюдателе отвечает на вопрос, который обычно задают слишком поздно: а бекап вообще делается? Подключите S3-бакет, укажите «папки», куда скрипт складывает дампы, — и Наблюдатель будет следить, появляются ли новые файлы, не стал ли свежий бекап подозрительно маленьким и сколько места осталось в хранилище.

Агент и доработка приложения не нужны: бакет опрашивает сам Наблюдатель снаружи. Поэтому проверка работает, даже если сервер с приложением упал. Файлы не скачиваются и не читаются — хватает ключа с правом только на просмотр списка объектов.

Что проверяется

Раз в 15 минут (период можно изменить) Наблюдатель листает заданные префиксы и для каждого считает:

Показатель Зачем
Возраст последнего объекта бекап не появился вовремя — скрипт сломался или упёрся в место
Размер последнего объекта и его изменение к предыдущему новый дамп резко меньше прежнего — возможно, пустой или обрезанный
Число объектов и объём префикса динамика роста
Заполнение квоты бакета когда кончится место; нужно указать квоту
Успешность опроса ключ отозван, бакет удалён, хранилище недоступно

Целостность архива не проверяется — только наличие, время и размер.

Какой ключ нужен

Создайте у провайдера отдельный ключ с правом только на листинг бакета (s3:ListBucket), без чтения и записи объектов. Не используйте root-ключ аккаунта.

Ключ хранится в зашифрованном виде и после сохранения больше нигде не показывается — ни в кабинете, ни ИИ-ассистенту. При редактировании хранилища поля ключа можно оставить пустыми («не менять»).

Хранилище должно быть доступно из интернета по https. Адреса внутренних сетей (10.x, 192.168.x, localhost и подобные) запрещены, поэтому MinIO или Ceph внутри вашего compose или кластера пока не подключить.

Как подключить бакет

  1. Откройте стек и вкладку «S3». Она есть у любого стека, агент не нужен.
  2. Нажмите «Подключить хранилище».
  3. Заполните форму «Подключить 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