Перейти к основному содержимому
Версия: 2.0 (WIP)

Сбор, хранение, обработка метрик

Набор компонентов

  1. Single-node
    1. metrics-storage
      • слушает порт 8428 и работает в режиме хранения (storage), выборки (select) и вставки (insert);
      • основные параметры запуска:
        • -retentionPeriod (время хранения метрик, по-умолчанию 1y);
        • -storageDataPath (каталог хранения метрик, по-умолчанию /metrics).
    2. 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).
    3. 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).
  2. HA-cluster
    1. metrics-storage
      • слушает порты 8400 (TCP, для insert), 8401 (TCP, для select) и 8482 (HTTP, для API и метрик), и работает только в режиме хранения;
      • параметры запуска аналогичны параметрам single-node версии metrics-storage.
    2. metrics-insert
      • слушает порт 8480 (HTTP) и занимается приемом метрик от агента сбора метрик и отправкой их в metrics-storage в соответствии с фактором репликации;
      • основные параметры запуска:
        • -storageNode (адреса узлов metrics-storage, разделенные запятой, пример: vmstorage-1:8400,vmstorage-2:8400);
        • -replicationFactor (фактор репликации, если не указан или 1, кластер будет работать в режиме шардирования, пример: 2).
    3. metrics-select
      • слушает порт 8481 (HTTP) и занимается выборкой метрик по запросу из хранилища метрик;
      • основные параметры запуска:
        • -storageNode (адреса узлов metrics-storage, разделенные запятой, пример: vmstorage-1:8401,vmstorage-2:8401);
        • -dedup.minScrapeInterval=1ms (предотвращение дедупликации метрик путем указания минимально допустимого расхождения scrape interval, пример: 1ms).
    4. metrics-agent
      • работает аналогично single-node версии metrics-agent.
    5. metrics-ruler
      • работает аналогично single-node версии metrics-ruler.
примечание

Главное отличие кластерной версии от 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

docker-compose.additional.yml
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 на одном узле:

docker-compose.additional.yml
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. Пример конфигурации с двумя агентами:

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.

Конфигурация агента обработки правил

Агент обработки правил (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. Пример конфигурации с двумя агентами:

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-compose.additional.yml, либо другие env-файлы осуществляется командой:

pamirctl start # Можно указать конкретные сервисы через пробел, в таком случае будут перезапущены только указанные сервисы.

Связанные разделы