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-storage | metrics-storage-1, metrics-storage-2, … |
| Каталог данных | /metrics (том pamir_metrics-data) | /metrics (тома vmstorage-N_data) |
| URL создания снапшота | http://localhost:8428/snapshot/create | http://localhost:8482/snapshot/create |
Все команды выполняются из каталога приложения ($HOME/.pamir или /opt/pamir).
Подготовка хранилища
Контейнер metrics-storage запускается в режиме read_only. Запись возможна только в
том данных (/metrics) и в смонтированные тома, поэтому:
- для S3 дополнительных томов не требуется —
vmbackupпишет напрямую в объектное хранилище (служебные файлы — во временныйtmpfs/tmp); - для NFS (
fs://) каталог репозитория нужно подключить как отдельный том на внешнее хранилище.
Подключение NFS-каталога в 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
Каждому узлу vmstorage назначайте отдельный путь в -dst
(…/vmstorage-1, …/vmstorage-2 и т.д.), чтобы копии узлов не перезаписывали друг друга.
При восстановлении данные возвращаются на соответствующий узел из его каталога.
Восстановление
vmrestore записывает данные в -storageDataPath, поэтому сервис хранения на время
восстановления должен быть остановлен. Восстановление выполняется отдельным запуском
утилиты через docker compose run (с тем же образом и томом данных).
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:
#!/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
Служба и таймер:
[Unit]
Description=Pamir VictoriaMetrics backup
[Service]
Type=oneshot
ExecStart=%h/.local/bin/pamir-backup-metrics.sh
[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