Перейти к основному содержимому
Версия: 2.0 (WIP)

VictoriaMetrics

В Памир метрики хранятся в VictoriaMetrics, запущенной в контейнере Docker (сервис metrics-storage). VictoriaMetrics может работать как в режиме single-node, так и в виде кластера с отдельными узлами хранения (vmstorage).

Рекомендованная стратегия

Для VictoriaMetrics используются встроенные утилиты vmbackup и vmrestore. vmbackup создаёт мгновенный снимок данных (snapshot) и выгружает его в репозиторий на внешнем хранилище:

  • общий каталог по NFS (fs://), подключённый в контейнер;
  • объектное хранилище S3 (s3://).

Резервные копии инкрементальны: при записи в тот же репозиторий передаются только изменившиеся части данных. После завершения выгрузки vmbackup автоматически удаляет созданный временный снапшот.

Утилиты уже в образе

Бинарные файлы vmbackup и vmrestore входят в образ VictoriaMetrics дистрибутива (/usr/bin/vmbackup, /usr/bin/vmrestore) — устанавливать ничего не требуется.

Параметры подключения

ПараметрSingle-nodeКластер (vmstorage)
Сервис / контейнерmetrics-storagemetrics-storage-1, metrics-storage-2, …
Каталог данных/metrics (том pamir_metrics-data)/metrics (тома vmstorage-N_data)
URL создания снапшотаhttp://localhost:8428/snapshot/createhttp://localhost:8482/snapshot/create

Все команды выполняются из каталога приложения ($HOME/.pamir или /opt/pamir).

Подготовка хранилища

Контейнер metrics-storage запускается в режиме read_only. Запись возможна только в том данных (/metrics) и в смонтированные тома, поэтому:

  • для S3 дополнительных томов не требуется — vmbackup пишет напрямую в объектное хранилище (служебные файлы — во временный tmpfs /tmp);
  • для NFS (fs://) каталог репозитория нужно подключить как отдельный том на внешнее хранилище.

Подключение NFS-каталога в docker-compose.additional.yml:

docker-compose.additional.yml
services:
metrics-storage:
volumes:
- type: bind
source: /mnt/vm-backups # точка монтирования NFS на хосте
target: /mnt/vmbackup # путь внутри контейнера

Применить изменения:

cd "$HOME/.pamir"
pamirctl start metrics-storage
Права на каталог назначения

Процесс внутри контейнера VictoriaMetrics работает от пользователя nobody (uid 65534). Каталог репозитория (NFS-экспорт или локальный каталог) должен быть доступен на запись этому uid — иначе vmbackup завершится с ошибкой permission denied. Настройте права/владельца NFS-экспорта соответствующим образом (например, разрешите запись uid 65534).

Резервное копирование (single-node)

В каталог NFS (fs://)

cd "$HOME/.pamir"

docker compose exec -it metrics-storage vmbackup \
-storageDataPath=/metrics \
-snapshot.createURL=http://localhost:8428/snapshot/create \
-dst=fs:///mnt/vmbackup

В хранилище S3 (s3://)

cd "$HOME/.pamir"

docker compose exec -it metrics-storage vmbackup \
-storageDataPath=/metrics \
-snapshot.createURL=http://localhost:8428/snapshot/create \
-dst=s3://pamir-metrics-backups/vm \
-customS3Endpoint=https://s3.example.com

Ключи доступа к S3 передаются через переменные окружения AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (например, заданные в .override.env) либо через файл учётных данных (-credsFilePath).

Инкрементальные копии

Запись в один и тот же -dst делает резервное копирование инкрементальным: vmbackup сравнивает содержимое с предыдущей копией и передаёт только изменения. Отдельный полный снимок за дату можно хранить, указывая -dst с подкаталогом-датой.

Резервное копирование (кластер)

В кластерной конфигурации данные распределены между узлами vmstorage, поэтому резервная копия снимается с каждого узла хранения отдельно. HTTP-API узла vmstorage доступен на порту 8482.

На каждом узле с контейнером metrics-storage-N выполните:

cd "$HOME/.pamir"

docker compose exec -it metrics-storage-1 vmbackup \
-storageDataPath=/metrics \
-snapshot.createURL=http://localhost:8482/snapshot/create \
-dst=s3://pamir-metrics-backups/vmstorage-1 \
-customS3Endpoint=https://s3.example.com
warning

Каждому узлу vmstorage назначайте отдельный путь в -dst (…/vmstorage-1, …/vmstorage-2 и т.д.), чтобы копии узлов не перезаписывали друг друга. При восстановлении данные возвращаются на соответствующий узел из его каталога.

Восстановление

vmrestore записывает данные в -storageDataPath, поэтому сервис хранения на время восстановления должен быть остановлен. Восстановление выполняется отдельным запуском утилиты через docker compose run (с тем же образом и томом данных).

Загрузка env-файлов для docker compose run

В отличие от docker compose exec, команда docker compose run создаёт новый контейнер и подставляет тег образа из переменных окружения. Эти переменные хранятся в автоген-файлах, которые обычный docker compose сам не подхватывает (их загружает pamirctl). Поэтому перед docker compose run экспортируйте список env-файлов, иначе образ не разрешится и команда попытается скачать несуществующий тег :latest:

export COMPOSE_ENV_FILES=.env,.deps.autogen

Флаг --pull never дополнительно запрещает обращение к внешнему реестру.

cd "$HOME/.pamir"
export COMPOSE_ENV_FILES=.env,.deps.autogen

# 1. Остановить сервис хранения
docker compose stop metrics-storage

# 2. Восстановить данные в том /metrics
docker compose run --rm --no-deps --pull never --entrypoint vmrestore metrics-storage \
-src=fs:///mnt/vmbackup \
-storageDataPath=/metrics

# 3. Запустить сервис обратно
docker compose start metrics-storage

Для S3 укажите соответствующий источник:

export COMPOSE_ENV_FILES=.env,.deps.autogen
docker compose run --rm --no-deps --pull never --entrypoint vmrestore metrics-storage \
-src=s3://pamir-metrics-backups/vm \
-customS3Endpoint=https://s3.example.com \
-storageDataPath=/metrics

В кластере восстановление выполняется на каждом узле vmstorage из его собственного каталога (-src=…/vmstorage-N).

Проверка резервных копий

Поверхностная проверка по размеру и дате:

# Для NFS-репозитория — размер и дата файлов (с хоста)
ls -lh /mnt/vm-backups/

# Файл backup_complete.ignore в корне репозитория означает успешно завершённую копию
ls -l /mnt/vm-backups/backup_complete.ignore

# Суммарный размер (файлы принадлежат uid 65534 — может потребоваться sudo)
sudo du -sh /mnt/vm-backups/
примечание

Файлы в репозитории создаются от пользователя nobody (uid 65534) с правами 0600/0700, поэтому чтение их содержимого/обход подкаталогов от имени администратора может требовать sudo либо совпадения uid.

Признак корректной копии — наличие файла backup_complete.ignore в каталоге назначения (vmbackup создаёт его только после полного завершения выгрузки). Для S3 наличие этого объекта проверяется средствами выбранного S3-клиента.

Автоматизация (systemd timer)

Скрипт ~/.local/bin/pamir-backup-metrics.sh:

~/.local/bin/pamir-backup-metrics.sh
#!/usr/bin/env bash
set -euo pipefail

cd "$HOME/.pamir"

docker compose exec -T metrics-storage vmbackup \
-storageDataPath=/metrics \
-snapshot.createURL=http://localhost:8428/snapshot/create \
-dst=fs:///mnt/vmbackup
chmod +x ~/.local/bin/pamir-backup-metrics.sh

Служба и таймер:

~/.config/systemd/user/pamir-backup-metrics.service
[Unit]
Description=Pamir VictoriaMetrics backup

[Service]
Type=oneshot
ExecStart=%h/.local/bin/pamir-backup-metrics.sh
~/.config/systemd/user/pamir-backup-metrics.timer
[Unit]
Description=Pamir VictoriaMetrics backup every 6 hours

[Timer]
OnCalendar=*-*-* 01/6:00:00
Persistent=true

[Install]
WantedBy=timers.target

Активация:

systemctl --user daemon-reload
systemctl --user enable --now pamir-backup-metrics.timer
loginctl enable-linger "$USER"
systemctl --user list-timers pamir-backup-metrics.timer

Связанные разделы