Перейти к содержимому

Руководство по переносу данных из Prometheus в VictoriaMetrics с помощью vmctl ​

Требования к переносу ​

  1. Необходимые пакеты:

    • kubectl
    • curl
  2. Включенный модуль rancher-monitoring

  3. Включенный модуль victoria-metrics

Алгоритм переноса ​

  1. Установка утилиты vmctl
  2. Создание снимка данных (snapshot) Prometheus из модуля rancher-monitoring
  3. Загрузка данных в 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 ​

  1. Для создания снимка потребуется включить Admin API Prometheus:
  1. Сохраните изменения и дождитесь их применения в кластере

Заметка

Для применения изменений prometheus будет перезапущен.

<br>Для выполнения дальнейших инструкций откройте, если еще не сделали, два она терминала(Далее по тексту будет комментарий "Окно 1 или Окно 2")
<br>Дождитесь перезагрузки Prometheus из модуля rancher-monitoring
  1. Создание снимка данных
    • Пробросьте порт 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

Заметка

При большом объеме данных, выполнение запроса займет некоторое время.

- Ожидайте завершения.
  <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`: Регулярное выражение для фильтрации значений метки (по умолчанию: `.*`).

Команда Боцман