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

Приложения

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 читает его при старте. Отдельных шагов не нужно — см. Восстановить данные.

Та же статья — в панели, в разделе «Справка».