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 не потребуется.