http_requests_total{method="GET", path="/api/v1/user/67890", status="200"} http_requests_total{method="GET", path="/api/v1/user/54321", status="200"} http_requests_total{method="GET", path="/api/v1/user/98765", status="404"}
Настройка в VMAgent параллельной отправки метрик в «новый» и «старый» VMetrics-кластеры
1. Некоторые правила пользования сервисом хранения метрик
1.1. О номере тенанта
VictoriaMetrics cluster supports multiple isolated tenants (aka namespaces). Tenants are identified by accountID or accountID:projectID, which are put inside request URLs for writes and reads. |
-
Тенанты различаются по идентификатору аккаунта (accountID) или по паре accountID:projectID. Например: 203:5.
-
Технически, для того чтобы метрика была отправлена в конкретный тенант, к ней необходимо прикрепить метки, например
vm_account_id=203
иvm_project_id=5
. Допустимо указать толькоvm_account_id=203
— в этом случае кластер VictoriaMetrics воспримет, что метрика предназначена для тенанта203:0
. -
Каждому арендатору назначается уникальный номер, определяющий аккаунт (accountID), в который сохраняются метрики в кластере VictoriaMetrics.
-
Все метрики, отправляемые арендатором в кластер, должны быть помечены меткой vm_account_id со значением, соответствующим выданному номеру аккаунта.
1.2. О номере проекта
-
Перед отправкой метрик в кластер, арендатор может дополнительно присваивать метрикам метку
vm_project_id
, определяющую номер проекта внутри выделенного аккаунта, в который будет сохранена метрика. -
Диапазон допустимых значений
vm_project_id
— от0
до4 294 967 295
. Конкретное значение выбирается арендатором самостоятельно. -
Если метка
vm_project_id
не указана, по умолчанию используется значение0
. Рекомендуется избегать использования нуля, так как при ошибках в конфигурации метрики могут непреднамеренно попадать именно в проект 0. -
При чтении метрик (например, через Grafana) использование метки
vm_project_id
удобно для логической группировки данных на уровне dashboard — эту группировку арендатор выполняет самостоятельно.
1.3. О высокой «кардинальности» метрик
-
Арендатору необходимо избегать назначения на метрики лейблов с динамическими значениями.
-
Пример «проблемных» меток:
-
Если в метках встречаются уникальные значения от миллионов пользователей, это приведёт к взрывному росту числа временных рядов, что негативно скажется на производительности и потреблении ресурсов кластера VictoriaMetrics.
2. Сбор используемой в сценарии информации
Имя переменной |
Описание |
Возможные значения |
|
1 |
REMOTEWRITE_URL_NEW |
VMAuth URL отправки метрик в VM-кластер. Запрашивается у ответственного за мониторинг. |
|
2 |
REMOTEWRITE_URL_OLD |
Адрес отправки метрик в «старый» кластер. Может быть найден в текущих настройках VMAgent. |
|
3 |
BEARER_TOKEN |
Токен доступа к VMAuth. Запрашивается у ответственного за мониторинг. |
|
4 |
TENANT |
Номер выделенного для арендатора «аккаунта». Запрашивается у ответственного за мониторинг. |
|
3. Проверка доступности «нового» VMetrics-кластера
VMAuth настроен возвращать своё состояние https://127.0.0.1:8426/-/ready на анонимные запросы. |
№ |
Задача |
Подробности |
---|---|---|
1 |
Проверка связности. |
|
4. Установка VMAgent из внутреннего rpm-репозитория
№ |
Задача |
Подробности |
---|---|---|
1 |
Добавление в систему rpm-репо. |
|
2 |
Установка пакета. |
|
5. Конфигурирование отправки метрик и настройка глобальных меток
Для параллельной отправки метрик в «новый» и «старый» кластеры, в большинстве случаев понадобятся изменения только в одной переменной Вообще здесь, в этой инструкции, для отправки метрик в различные места назначений задействованы переменные: В предложенной ниже схеме, аутентификация используется только для отправки метрик в «новый» кластер. Поэтому, в каждой из вышеуказанных переменных, значения для отправки метрик в «новый» VMetrics-кластер указаны в первой позиции. Тогда как значения для отправки в «старый» VMetrics-кластер указаны во второй позиции. Так как отправка в «старый» VMetrics-кластер не требует аутентификации, то все переменные, кроме
Естественно, при необходимости, можно дополнить переменные, чтобы организовать отправку в третье и последующие URL. |
№ |
Задача |
Подробности |
||||
---|---|---|---|---|---|---|
1 |
Создание файла /etc/sysconfig/vmagent с флагами запуска демона VMAgent. Переменные передаваемые в VMAgent при запуске демона:
|
Содержимое
httpListenAddr=127.0.0.1:8429 promscrape_config=vmagent.yml ## Silently skip unsupported fields #promscrape_config_strictParse=false loggerLevel=INFO promscrape_suppressDuplicateScrapeTargetErrors=true ## Directory for temporary storage of collected data #remoteWrite_tmpDataPath="/var/lib/vmagent" remoteWrite_tmpDataPath="/data/vmagent" remoteWrite_label="vmagent_hostname=%{SYSTEMD_HOSTNAME}" httpListenAddr=127.0.0.1:8429 promscrape_config=vmagent.yml ## Silently skip unsupported fields #promscrape_config_strictParse=false loggerLevel=INFO promscrape_suppressDuplicateScrapeTargetErrors=true ## Directory for temporary storage of collected data #remoteWrite_tmpDataPath="/var/lib/vmagent" remoteWrite_tmpDataPath="/data/vmagent" remoteWrite_url="https://vd-vmauth.example.org" remoteWrite_bearerTokenFile="bearer.txt" remoteWrite_headers="TenantID: 203" remoteWrite_urlRelabelConfig="filters/203.yml" remoteWrite_maxDiskUsagePerURL=10GB remoteWrite_label="vmagent_hostname=%{SYSTEMD_HOSTNAME}" httpListenAddr=127.0.0.1:8429 promscrape_config=vmagent.yml ## Silently skip unsupported fields #promscrape_config_strictParse=false loggerLevel=INFO promscrape_suppressDuplicateScrapeTargetErrors=true ## Directory for temporary storage of collected data #remoteWrite_tmpDataPath="/var/lib/vmagent" remoteWrite_tmpDataPath="/data/vmagent" remoteWrite_url=\ "https://vd-vmauth.example.org",\ "http://10.1.1.122:8480/insert/222/prometheus/api/v1/write" remoteWrite_bearerTokenFile="bearer.txt" remoteWrite_headers="TenantID: 203" remoteWrite_urlRelabelConfig="filters/203.yml" remoteWrite_maxDiskUsagePerURL=5GB,5GB remoteWrite_label=\ "vmagent_hostname=%{SYSTEMD_HOSTNAME}",\ "vmagent_region=kurch",\ "vmagent_vlan_num=0617",\ "vmagent_vlan_env=dev" |
||||
2 |
Опциональное добавление CA-сертификата домена.
|
|
||||
3 |
Создание файла с секретным Bearer Token.
|
|
||||
4 |
Добавление файлов с фильтрами отбора метрик по номеру тенанта.
|
|
6. Редактирование «основного» файла для настройки сбора метрик методом pull
В большинстве случаев в установленном файле достаточно изменить:
|
№ |
Задача |
Подробности |
||||||
---|---|---|---|---|---|---|---|---|
1 |
Редактирование «основного» conf-файла vmagent.yml
external_labels: (1) scraper_hostname: %{SYSTEMD_HOSTNAME} (2) scraper_region: "kurch" (3) scraper_vlan_num: "0617" (3) scraper_vlan_env: "dev" (3)
|
Пример содержимого файла файла /etc/victoriametrics/vmagent.yml:
|
7. Пример настройки сбора собственных метрик
В большинстве случае в установленных файлах достаточно:
|
№ |
Задача |
Подробности |
---|---|---|
1 |
Редактирование Job-файла для сбора собственных метрик VMAgent.
|
Пример содержимого файла
|
2 |
Редактирование Job для сбора метрик из установленного локально Telegraf.
|
Пример содержимого файла
|
8. Запуск демона vmagent
№ |
Задача |
Подробности |
---|---|---|
1 |
Запуск демона. |
Выполните команду: systemctl enable --now vmagent |
2 |
Проверка |
Выполните команду: journalctl -u vmagent -n 100 -f --no-hostname Примерный ожидаемый вывод: Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.070Z info VictoriaMetrics/app/vmagent/main.go:144 starting vmagent at "[127.0.0.1:8429]"... Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.072Z info VictoriaMetrics/lib/memory/memory.go:42 limiting caches to 1241272320 bytes, leaving 827514880 bytes to the OS according to -memory.allowedPercent=60 Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.073Z info VictoriaMetrics/lib/persistentqueue/fastqueue.go:71 opened fast queue at "/data/vmagent/persistent-queue/1_A3AAB188CD4F97D5" with maxInmemoryBlocks=400, it contains 0 pending bytes, persistence is enabled Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.097Z info VictoriaMetrics/app/vmagent/remotewrite/client.go:211 initialized client for -remoteWrite.url="1:secret-url" Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.098Z info VictoriaMetrics/lib/persistentqueue/fastqueue.go:71 opened fast queue at "/data/vmagent/persistent-queue/2_15F179C5C3171F41" with maxInmemoryBlocks=400, it contains 0 pending bytes, persistence is enabled Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.100Z info VictoriaMetrics/app/vmagent/remotewrite/client.go:211 initialized client for -remoteWrite.url="2:secret-url" Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.100Z info VictoriaMetrics/lib/persistentqueue/fastqueue.go:71 opened fast queue at "/data/vmagent/persistent-queue/3_E93052543439D9D5" with maxInmemoryBlocks=400, it contains 0 pending bytes, persistence is enabled Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.103Z info VictoriaMetrics/app/vmagent/remotewrite/client.go:211 initialized client for -remoteWrite.url="3:secret-url" Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.103Z info VictoriaMetrics/app/vmagent/main.go:169 started vmagent in 0.033 seconds Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.104Z info VictoriaMetrics/lib/httpserver/httpserver.go:169 started server at http://127.0.0.1:8429/ Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.104Z info VictoriaMetrics/lib/httpserver/httpserver.go:171 pprof handlers are exposed at http://127.0.0.1:8429/debug/pprof/ Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.104Z info VictoriaMetrics/lib/promscrape/scraper.go:118 reading scrape configs from "vmagent.yml" Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.106Z info VictoriaMetrics/lib/promscrape/config.go:149 starting service discovery routines... Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.106Z info VictoriaMetrics/lib/promscrape/config.go:155 started 2 service discovery routines in 0.000 seconds Mar 27 18:25:31 vmagent-prod[21127]: 2025-03-27T15:25:31.106Z info VictoriaMetrics/lib/promscrape/scraper.go:439 static_configs: added targets: 2, removed targets: 0; total targets: 2 |
remoteWrite_maxDiskUsagePerURL
не потребуется.