Приложения
Prometheus: снимки
Prometheus пишет данные постоянно, поэтому копия его каталога файлами может оказаться несогласованной. arcula делает лучше: просит Prometheus снять снимок базы (TSDB) и отправляет его. Снимок целый на момент создания и почти не занимает места: это жёсткие ссылки на блоки данных.
Снимок делает admin API Prometheus. По умолчанию он выключен.
Идут ли снимки
В плане защиты у Prometheus в «Как копировать» — «снимок Prometheus». Это значит, что агент пытается снять снимок при каждом бэкапе. Получилось ли — видно в журнале.
Снимок не вышел — бэкап не падает: агент копирует каталог данных файлами и оставляет предупреждение. Где его увидеть: сервер → «Журнал» → строка «Бэкап сохранён» → нажмите на неё → «Строки лога». Строка такая:
agent: prometheus_snapshot_failed: the admin API did not make a snapshot (admin APIs disabled) — the data directory is copied as files without consistency; for a snapshot start Prometheus with --web.enable-admin-apiВ скобках — причина так, как её ответил Prometheus:
admin APIs disabled— admin API выключен. Включите его, как ниже.- Другой ответ Prometheus — снимок не получился у него самого. Разберитесь по логам Prometheus.
no answer— ответа нет: Prometheus не работает или слушает не тот порт, что в его флагах.
Пока причина не устранена, Prometheus копируется файлами — без согласованности.
Если в «Как копировать» написано «снимок Prometheus — агент пока не умеет (обновите его)», агент на сервере старый. См. Обновить агентов.
Включить admin API
Добавьте флаг --web.enable-admin-api в команду Prometheus. В Compose — в command сервиса. Флаги, которые там уже есть, оставьте: command заменяет их целиком.
services:
prometheus:
image: prom/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --web.enable-admin-apiПересоздайте контейнер:
docker compose up -d prometheusСледующий бэкап пойдёт снимком, предупреждения в строках лога не будет.
Admin API умеет и удалять данные. Не открывайте порт Prometheus в интернет: агенту он нужен только изнутри контейнера, на 127.0.0.1.Как агент делает снимок
- Запрос
POST /api/v1/admin/tsdb/snapshotидёт изнутри контейнера Prometheus — через curl,ncиз busybox или wget. Порт наружу не нужен. - Порт и префикс агент берёт из флагов Prometheus:
--web.listen-address,--web.route-prefixили--web.external-url. - Снимок ложится в
<каталог данных>/snapshots/<имя>, уходит в бэкап на место каталога данных и удаляется после отправки. - Нужен Docker: снимок делается в контейнере.
Восстановление
Снимок лежит в бэкапе там же, где лежал бы каталог данных. arcula restore возвращает его вместе с томом или каталогом, Prometheus читает его при старте. Отдельных шагов не нужно — см. Восстановить данные.
Та же статья — в панели, в разделе «Справка».