Сбор, хранение, обработка метрик
Набор компонентов
- Single-node
- metrics-storage
- слушает порт 8428 и работает в режиме хранения (storage), выборки (select) и вставки (insert);
- основные параметры запуска:
-retentionPeriod(время хранения метрик, по-умолчанию1y);-storageDataPath(каталог хранения метрик, по-умолчанию/metrics).
- metrics-agent
- слушает порт 8429 и осуществляет сбор метрик с экспортеров в формате Prometheus;
- отправляет полученные метрики в metrics-storage по протоколу Prometheus remote-write;
- автоматически получает конфигурацию таргетов с сервиса мониторинга;
- основные параметры запуска:
-promscrape.config(uri путь до конфигурации таргетов, по-умолчаниюhttp://monitoring:8004/v4/vmagent/vmagent/config);-promscrape.configCheckInterval(интервал обновления конфигурации, по-умолчанию10s);-remoteWrite.url(путь до remote-write ручки сервиса хранения метрик, по-умолчаниюhttp://metrics-storage:8428/api/v1/write).
- metrics-ruler
- слушает порт 8880 и занимается обработкой (оценкой) правил оповещений в соответствии с конфигурацией;
- основные параметры запуска:
-configCheckInterval(интервал обновления правил, по-умолчанию10s);-datasource.url(адрес источника метрик для оценки, по-умолчаниюhttp://metrics-storage:8428);-notifier.url(адрес сервиса нотификации, по-умолчаниюhttp://monitoring:8004/v4);-remoteWrite.url(путь до remote-write ручки сервиса хранения метрик, по-умолчаниюhttp://metrics-storage:8428);-rule(uri путь до конфигурации правил, может быть несколько, по-умолчаниюhttp://monitoring:8004/v4/vmalert/vmalert/config).
- metrics-storage
- HA-cluster
- metrics-storage
- слушает порты 8400 (TCP, для insert), 8401 (TCP, для select) и 8482 (HTTP, для API и метрик), и работает только в режиме хранения;
- параметры запуска аналогичны параметрам single-node версии metrics-storage.
- metrics-insert
- слушает порт 8480 (HTTP) и занимается приемом метрик от агента сбора метрик и отправкой их в metrics-storage в соответствии с фактором репликации;
- основные параметры запуска:
-storageNode(адреса узлов metrics-storage, разделенные запятой, пример:vmstorage-1:8400,vmstorage-2:8400);-replicationFactor(фактор репликации, если не указан или 1, кластер будет работать в режиме шардирования, пример:2).
- metrics-select
- слушает порт 8481 (HTTP) и занимается выборкой метрик по запросу из хранилища метрик;
- основные параметры запуска:
-storageNode(адреса узлов metrics-storage, разделенные запятой, пример:vmstorage-1:8401,vmstorage-2:8401);-dedup.minScrapeInterval=1ms(предотвращение дедупликации метрик путем указания минимально допустимого расхождения scrape interval, пример:1ms).
- metrics-agent
- работает аналогично single-node версии metrics-agent.
- metrics-ruler
- работает аналогично single-node версии metrics-ruler.
- metrics-storage
Главное отличие кластерной версии от single-node — обязательная поддержка мультитенантности.
В URL запросов добавляется accountID (tenant). Формат: /insert/<accountID>/... и /select/<accountID>/....
accountID — произвольное 32-битное целое число (обычно 0 для дефолтного тенанта).
Настройка переменной DATASOURCE_URL в Памир расположена в глобальных настройках сервиса мониторинга:

Пример значений DATASOURCE_URL при реализации кластера Metrics:
http://metrics-select-1:8481/select/0/(если контейнер select расположен на узле с сервисом мониторинга);http://<адрес узла metrics-select>:8481/select/0/(если контейнер select расположен на другом узле с публикацией порта 8481).
Создание кластера высокой доступности (HA)
Для организации отказоустойчивой конфигурации Metrics необходимо переопределить сервисы
в файле docker-compose.additional.yml:
Настройка сервисов, работающих на разных узлах Docker Engine
services:
metrics-storage:
profiles: !override [never]
metrics-storage-1:
container_name: vmstorage-1
command:
- "vmstorage"
- "-retentionPeriod=1y"
- "-storageDataPath=/metrics"
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8400:8400"
- "8401:8401"
volumes: !override
- type: volume
source: vmstorage-1_data
target: /metrics
metrics-insert-1:
container_name: metrics-insert-1
command:
- "vminsert"
- "-storageNode=metrics-storage-1:8400,<IP-адрес/DNS-имя metrics-storage-2>:8400"
- "-replicationFactor=2"
depends_on: !override
- metrics-storage-1
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8480:8480"
metrics-select-1:
container_name: metrics-select-1
command:
- "vmselect"
- "-storageNode=metrics-storage-1:8401,<IP-адрес/DNS-имя metrics-storage-2>:8401"
- "-dedup.minScrapeInterval=1ms" # Дедупликация
depends_on: !override
- metrics-storage-1
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8481:8481"
где, <IP-адрес/DNS-имя metrics-storage-2>:<8400/8401> - указываются IP-адреса соседних узлов с контейнером metrics-storage.
Данную процедуру повторить на всех узлах, изменяя имя контейнера container_name и список узлов metrics-storage в command.
Настройка сервисов, работающих на одном узле Docker Engine
Также возможен запуск нескольких экземпляров Metrics на одном узле:
services:
metrics-storage:
profiles: !override [never]
metrics-storage-1:
container_name: vmstorage-1
command:
- "vmstorage"
- "-retentionPeriod=1y"
- "-storageDataPath=/metrics"
extends:
file: docker-compose.deps.yml
service: metrics-storage
volumes: !override
- type: volume
source: vmstorage-1_data
target: /metrics
metrics-storage-2:
container_name: vmstorage-2
command:
- "vmstorage"
- "-retentionPeriod=1y"
- "-storageDataPath=/metrics"
extends:
file: docker-compose.deps.yml
service: metrics-storage
volumes: !override
- type: volume
source: vmstorage-2_data
target: /metrics
metrics-insert-1:
container_name: metrics-insert-1
command:
- "vminsert"
- "-storageNode=metrics-storage-1:8400,metrics-storage-2:8400"
- "-replicationFactor=2"
depends_on: !override
- metrics-storage-1
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8480:8480"
metrics-insert-2:
container_name: metrics-insert-2
command:
- "vminsert"
- "-storageNode=metrics-storage-1:8400,metrics-storage-2:8400"
- "-replicationFactor=2"
depends_on: !override
- metrics-storage-2
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8490:8480"
metrics-select-1:
container_name: metrics-select-1
command:
- "vmselect"
- "-storageNode=metrics-storage-1:8401,metrics-storage-2:8401"
- "-dedup.minScrapeInterval=1ms" # Дедупликация
depends_on: !override
- metrics-storage-1
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8481:8481"
metrics-select-2:
container_name: metrics-select-2
command:
- "vmselect"
- "-storageNode=metrics-storage-1:8401,metrics-storage-2:8401"
- "-dedup.minScrapeInterval=1ms" # Дедупликация
depends_on: !override
- metrics-storage-2
extends:
file: docker-compose.deps.yml
service: metrics-storage
ports:
- "8491:8481"
Применение всех внесенных параметров в файлы docker-compose.additional.yml, либо другие env-файлы осуществляется командой:
pamirctl start # Можно указать конкретные сервисы через пробел, в таком случае будут перезапущены только указанные сервисы.
Конфигурация агента сбора метрик
Агент сбора метрик (metrics-agent) конфигурируется посредством флагов командной строки,
описанных в наборе компонентов для metrics-agent, а также самой конфигурации, которая передается
флагом -promscrape.config.
Данный аргумент принимает два типа значения:
- путь до файла конфигурации в файловой системе (например,
/config.yml) - URL-адрес файла конфигурации, доступного для загрузки (например,
https://pamir.example.com/api/monitoring/v4/vmagent/vmagent/config).
Веб-сервер, на котором размещается файл конфигурации агента сбора метрик должен отдавать файл в формате text/plain.
Сервер Памир отдает конфигурацию в корректном формате.
В качестве значения по-умолчанию для этого флага указывается сервис мониторинга Памир с путем до файла конфигурации.
Адрес конфигурации можно получить в веб-интерфейсе конфигурации агента сбора метрик (поле URI для получения конфигурации):

Масштабирование и распределение агентов сбора метрик
Агенты сбора метрик могут быть сконфигурированы в docker-compose.additional.yml. Пример конфигурации с двумя агентами:
services:
metrics-agent:
profiles: [never]
metrics-agent-1:
extends:
file: docker-compose.deps.yml
service: metrics-agent
command:
- "vmagent"
- "-httpListenAddr=:8429"
- "-promscrape.config=https://pamir.example.com/api/monitoring/v4/vmagent/vmagent1/config"
- "-promscrape.configCheckInterval=10s"
- "-promscrape.config.strictParse=false"
- "-remoteWrite.url=http://metrics-storage:8428/api/v1/write"
metrics-agent-2:
extends:
file: docker-compose.deps.yml
service: metrics-agent
command:
- "vmagent"
- "-httpListenAddr=:8429"
- "-promscrape.config=https://pamir.example.com/api/monitoring/v4/vmagent/vmagent2/config"
- "-promscrape.configCheckInterval=10s"
- "-promscrape.config.strictParse=false"
- "-remoteWrite.url=http://metrics-storage:8428/api/v1/write"
Аналогичные операции возможно реализовать при распределении агентов по разным узлам Docker Engine.
Ключевыми параметрами в данном случае будут:
- адрес конфигурации агента сбора метрик в
-promscrape.config; - адрес узла хранения метрик
remoteWrite.url;- в случае распределения по узлам Docker Engine нужно опубликовать наружу порт сервиса metrics-storage и использовать адрес узла с опубликованным портом в
remoteWrite.url.
- в случае распределения по узлам Docker Engine нужно опубликовать наружу порт сервиса metrics-storage и использовать адрес узла с опубликованным портом в
Конфигурация агента обработки правил
Агент обработки правил (metrics-ruler) конфигурируется посредством флагов командной строки,
описанных в наборе компонентов для metrics-ruler, а также набором правил, которая передается
флагом -rule.
Данный аргумент принимает два типа значения:
- путь до файла конфигурации в файловой системе (например,
/rules.yml) - URL-адрес файла конфигурации, доступного для загрузки (например,
https://pamir.example.com/api/monitoring/v4/vmalert/vmalert/config).
Веб-сервер, на котором размещается файл конфигурации агента обработки правил должен отдавать файл в формате text/plain.
Сервер Памир отдает конфигурацию в корректном формате.
В качестве значения по-умолчанию для этого флага указывается сервис мониторинга Памир с путем до файла конфигурации.
Адрес конфигурации можно получить в веб-интерфейсе конфигурации агента обработки правил (поле URI для получения конфигурации):

Масштабирование и распределение агентов обработки правил
Агенты обработки правил могут быть сконфигурированы в docker-compose.additional.yml. Пример конфигурации с двумя агентами:
services:
metrics-ruler:
profiles: [never]
metrics-ruler-1:
extends:
file: docker-compose.deps.yml
service: metrics-ruler
command:
- "vmalert"
- "-configCheckInterval=10s"
- "-datasource.url=http://metrics-storage:8428"
- "-notifier.url=https://pamir.example.com/api/monitoring/v4"
- "-remoteWrite.url=http://metrics-storage:8428"
- "-rule=https://pamir.example.com/api/monitoring/v4/vmalert/vmalert1/config"
- "-rule=https://pamir.example.com/api/monitoring/v4/vmalert/vmalert1_2/config"
metrics-ruler-2:
extends:
file: docker-compose.deps.yml
service: metrics-ruler
command:
- "vmalert"
- "-configCheckInterval=10s"
- "-datasource.url=http://metrics-storage:8428"
- "-notifier.url=https://pamir.example.com/api/monitoring/v4"
- "-remoteWrite.url=http://metrics-storage:8428"
- "-rule=https://pamir.example.com/api/monitoring/v4/vmalert/vmalert2/config"
- "-rule=https://pamir.example.com/api/monitoring/v4/vmalert/vmalert2_2/config"
В флаге rule в примере указано несколько адресов до конфигурации правил. Агент обработки правил поддерживает
несколько файлов конфигурации и читает их в порядке переданных аргументов.
Аналогичные операции возможно реализовать при распределении агентов по разным узлам Docker Engine.
Ключевыми параметрами в данном случае будут:
- адрес конфигурации обработки правил в
-rule; - адрес узла хранения метрик
remoteWrite.url;- в случае распределения по узлам Docker Engine нужно опубликовать наружу порт сервиса metrics-storage и использовать адрес узла с опубликованным портом в
remoteWrite.url;
- в случае распределения по узлам Docker Engine нужно опубликовать наружу порт сервиса metrics-storage и использовать адрес узла с опубликованным портом в
- адрес узла нотификации для отправки уведомлений по обработанным правилам.
Применение всех внесенных параметров в файлы docker-compose.additional.yml, либо другие env-файлы осуществляется командой:
pamirctl start # Можно указать конкретные сервисы через пробел, в таком случае будут перезапущены только указанные сервисы.