Тема
Руководство по переносу данных из Prometheus в VictoriaMetrics с помощью vmctl
Требования к переносу
Необходимые пакеты:
- kubectl
- curl
Включенный модуль rancher-monitoring
Включенный модуль victoria-metrics
Алгоритм переноса
- Установка утилиты vmctl
- Создание снимка данных (snapshot) Prometheus из модуля rancher-monitoring
- Загрузка данных в victoria-metrics
Заметка
Пример выполнения алгоритма будет произведен на АРМ Администратора и каждый шаг будет выполняться исключительно с консоли АРМ Администратора.
Для простоты описание будет содержать в себе две активные сессии подключения к АРМ Администратора.
Установка vmctl
vmctl — это удобный инструмент для переноса исторических данных из Prometheus в VictoriaMetrics с использованием снимка данных (snapshot), который входит в пакет vmutils.
Для получения правильной версии проверьте версию вашей инсталяции victoria-metrics
bash
kubectl get deployments vmsingle-victoria-metrics -n monitoring -o jsonpath='{.spec.template.spec.containers[].image}'В ответе вы получите имя образа и Tag в ней является искомой версией
Пример вывода:
bash
harbor.bootsman.host/bootsman-nimbus/common-artifacts/victoriametrics-victoria-metrics:v1.119.0Создание снимка данных Prometheus
- Для создания снимка потребуется включить Admin API Prometheus:
- Сохраните изменения и дождитесь их применения в кластере
Заметка
Для применения изменений prometheus будет перезапущен.
<br>Для выполнения дальнейших инструкций откройте, если еще не сделали, два она терминала(Далее по тексту будет комментарий "Окно 1 или Окно 2")
<br>Дождитесь перезагрузки Prometheus из модуля rancher-monitoring
- Создание снимка данных
- Пробросьте порт prometheus на локальную машину:bash
# Окно 1 kubectl port-forward -n cattle-monitoring-system service/prometheus-operated 9090 - Отправляем запрос в API Prometheus для создания снимка:bash
# Окно 2 curl -XPOST localhost:9090/api/v1/admin/tsdb/snapshot
- Пробросьте порт prometheus на локальную машину:
Заметка
При большом объеме данных, выполнение запроса займет некоторое время.
- Ожидайте завершения.
<br>Пример успешного создания:
```txt
# Окно 2
{"status":"success","data":{"name":"20250730T084721Z-2f9eefc7b69ae20b"}}
```
- Скопируйте снимок на АРМ Администратора
```bash
# Окно 2
kubectl cp -n cattle-monitoring-system prometheus-rancher-monitoring-prometheus-0:/prometheus/snapshots/ prom_snap
```
- Получите имя снимка для дальнейших действий
```bash
# Окно 2
export SNAPSHOT_NAME=$(ls prom_snap/ | grep $(date +"%Y%m%d"))
```
- Отключите проброс обычным прерыванием
```bash
# Окно 1
Ctrl + c
```
Загрузка данных в victoria-metrics
Пробросьте порт VictoraMetrics на локальную машину:
bash# Окно 1 kubectl port-forward -n monitoring service/vmsingle-victoria-metrics 8429Запустите миграцию:
bash# Окно 2 ./vmctl-prod prometheus --vm-addr=http://localhost:8429 --prom-snapshot=prom_snap/${SNAPSHOT_NAME}Процесс миграции:
vmctlанализирует снимок и выводит статистику: количество блоков данных, временной диапазон, количество метрик и точек данных.
Пример вывода:txt# Окно 2 Prometheus import mode Prometheus snapshot stats: blocks found: 26; blocks skipped by time filter: 0; min time: 1753617600116 (2025-07-27T15:00:00+03:00); max time: 1753801690147 (2025-07-29T18:08:10+03:00); samples: 2144246801; series: 9249975. Found 26 blocks to import. Continue? [Y/n]- Нажмите
Y(или Enter), чтобы продолжить. Для отмены введитеn.
- Нажмите
Результат импорта:
После завершения вы увидите статистику, например:txt# Окно 2 2025/07/29 19:01:11 Import finished! 2025/07/29 19:01:11 VictoriaMetrics importer stats: idle duration: 2m40.609969986s; time spent while importing: 32m8.548525875s; total samples: 2144246801; samples/s: 1111844.88; total bytes: 42.5 GB; bytes/s: 22.0 MB; import requests: 10714; import requests retries: 0; 2025/07/29 19:01:11 Total time: 32m9.882366375sОтключите проброс обычным прерыванием
bash# Окно 1 Ctrl + c
Фильтрация данных
Вы можете ограничить переносимые данные с помощью фильтров по времени или меткам:
Фильтрация по времени
Используйте флаги для указания временного диапазона:
--prom-filter-time-start: начало периода (например,2023-02-07T00:07:01Z).--prom-filter-time-end: конец периода (например,2025-07-20T00:07:01Z).
Пример команды:
bash
./vmctl-prod prometheus \
--prom-snapshot=prom_snap/${SNAPSHOT_NAME} \
--vm-addr=http://localhost:8429 \
--prom-filter-time-start=2023-02-07T00:07:01Z \
--prom-filter-time-end=2025-07-20T00:07:01ZФильтр исключает блоки данных вне указанного диапазона и дополнительно фильтрует временные ряды внутри оставшихся блоков.
Фильтрация по меткам
Фильтрация по меткам позволяет выбрать данные по имени метки или её значению. Используйте флаги:
--prom-filter-label: имя метки, например,__name__(для имени метрики) илиinstance.--prom-filter-label-value: регулярное выражение для фильтрации значений метки (по умолчанию.*— все значения).
Пример команды для переноса метрик, начинающихся с promhttp:
bash
./vmctl-prod prometheus \
--prom-snapshot=prom_snap/${SNAPSHOT_NAME} \
--vm-addr=http://localhost:8429 \
--prom-filter-label="__name__" \
--prom-filter-label-value="promhttp.*" \
--prom-filter-time-start=2023-02-07T00:07:01Z \
--prom-filter-time-end=2025-07-20T00:07:01ZНастройка производительности
Что влияет на производительность:
- Скорость работы библиотеки Prometheus.
- Скорость чтения с диска (I/O).
- Значение параметра
--prom-concurrency.
Параметр --prom-concurrency:
Задаёт количество одновременно работающих процессов чтения данных. Для лучшей производительности установите значение, равное количеству ядер процессора.
Пример:
bash
--prom-concurrency=4Заметка
По умолчанию используется 1 процесс.
Полный список основных флагов
`--prom-snapshot`: Путь к снимку данных Prometheus.
`--prom-concurrency`: Количество одновременных процессов чтения (по умолчанию: 1).
`--prom-filter-time-start`: Начало временного диапазона в формате RFC3339 (например, `2020-01-01T20:07:00Z`).
`--prom-filter-time-end`: Конец временного диапазона в формате RFC3339.
`--prom-filter-label`: Имя метки для фильтрации (например, `__name__`).
`--prom-filter-label-value`: Регулярное выражение для фильтрации значений метки (по умолчанию: `.*`).
