Перейти к содержанию

Руководство по переносу данных из 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

kubectl get deployments vmsingle-victoria-metrics -n monitoring -o jsonpath='{.spec.template.spec.containers[].image}'
В ответе вы получите имя образа и Tag в ней является искомой версией
Пример вывода:

harbor.bootsman.host/bootsman-nimbus/common-artifacts/victoriametrics-victoria-metrics:v1.119.0

Установка:

wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.119.0/vmutils-linux-amd64-v1.119.0.tar.gz  
mkdir vmutils && tar -xzvf vmutils-linux-amd64-v1.119.0.tar.gz -C vmutils && cd vmutils  

Установка:

wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/VICTORIA_METRICS_VERSION/vmutils-linux-amd64-VICTORIA_METRICS_VERSION.tar.gz  
mkdir vmutils && tar -xzvf vmutils-linux-amd64-VICTORIA_METRICS_VERSION.tar.gz -C vmutils && cd vmutils  

Создание снимка данных Prometheus

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

    1. Откройте окно редактирования нужного кластера
    2. В списке аддонов найдите rancher-monitoring и добавьте в него параметр: prometheus.prometheusSpec.enableAdminAPI=true

    AdminApi AdminApi

    Добавьте дополнительный value для модуля rancher-monitoring

      apiVersion: addon.bootsman.tech/v1alpha1
      kind: Config
      ...
      spec:
        enabled: true
        values:
          ...
          prometheus:
            prometheusSpec:
              enableAdminAPI: true
          ...
    
  2. Сохраните изменения и дождитесь их применения в кластере

    Заметка

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


    Для выполнения дальнейших инструкций откройте, если еще не сделали, два она терминала(Далее по тексту будет комментарий "Окно 1 или Окно 2")
    Дождитесь перезагрузки Prometheus из модуля rancher-monitoring

  3. Создание снимка данных

    • Пробросьте порт prometheus на локальную машину:
      # Окно 1
      kubectl port-forward -n cattle-monitoring-system service/prometheus-operated 9090
      
    • Отправляем запрос в API Prometheus для создания снимка:

      # Окно 2
      curl -XPOST localhost:9090/api/v1/admin/tsdb/snapshot
      

      Заметка

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

    • Ожидайте завершения.
      Пример успешного создания:

      # Окно 2
      {"status":"success","data":{"name":"20250730T084721Z-2f9eefc7b69ae20b"}}
      

    • Скопируйте снимок на АРМ Администратора
      # Окно 2
      kubectl cp -n cattle-monitoring-system prometheus-rancher-monitoring-prometheus-0:/prometheus/snapshots/ prom_snap
      
    • Получите имя снимка для дальнейших действий
      # Окно 2
      export SNAPSHOT_NAME=$(ls prom_snap/ | grep $(date +"%Y%m%d"))
      
    • Отключите проброс обычным прерыванием
      # Окно 1
      Ctrl + c
      

Загрузка данных в victoria-metrics

  • Пробросьте порт VictoraMetrics на локальную машину:
    # Окно 1
    kubectl port-forward -n monitoring service/vmsingle-victoria-metrics 8429
    
  • Запустите миграцию:
    # Окно 2
    ./vmctl-prod prometheus --vm-addr=http://localhost:8429 --prom-snapshot=prom_snap/${SNAPSHOT_NAME}
    
  • Процесс миграции:
    vmctl анализирует снимок и выводит статистику: количество блоков данных, временной диапазон, количество метрик и точек данных.

    Пример вывода:

    # Окно 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.
  • Результат импорта:
    После завершения вы увидите статистику, например:

    # Окно 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
    

  • Отключите проброс обычным прерыванием

    # Окно 1
    Ctrl + c
    

Фильтрация данных

Вы можете ограничить переносимые данные с помощью фильтров по времени или меткам:

Фильтрация по времени

Используйте флаги для указания временного диапазона:

  • --prom-filter-time-start: начало периода (например, 2023-02-07T00:07:01Z).
  • --prom-filter-time-end: конец периода (например, 2025-07-20T00:07:01Z).

Пример команды:

./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:

./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:

Задаёт количество одновременно работающих процессов чтения данных. Для лучшей производительности установите значение, равное количеству ядер процессора.
Пример:

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