Выгрузка метрик с помощью плагина Network collectd
в InfluxDB¶
В этом документе приводится пример использования плагина Network для экспорта метрик в темпоральную базу данных InfluxDB. Также будет продемонстрировано, как визуализировать собранные в InfluxDB метрики с помощью Grafana.
Схема работы примера¶
Пример метрики
В этом примере рассматривается работа с единичной метрикой curl_json-wallarm_nginx/gauge-abnormal
, которая показывает количество запросов, обработанных нодой Вебмониторэкс.
В этом документе используется следующая схема развертывания:
-
WAF‑нода Вебмониторэкс развернута на хосте, доступном по IP‑адресу
10.0.30.5
и полному доменному имениnode.example.local
.Плагин
network
дляcollectd
на WAF‑ноде настроен так, что все метрики отсылаются на сервер InfluxDB10.0.30.30
на порт25826/UDP
.Особенности плагина Network
Обратите внимание, что плагин может работать только с использованием протокола UDP (см. примеры использования и документацию плагина
network
). -
На отдельном хосте с IP‑адресом
10.0.30.30
(далее — «хост Docker») развернуты сервисыinfluxdb
иgrafana
в виде Docker‑контейнеров.Сервис
influxdb
с базой данных InfluxDB настроен следующим образом:- Создан источник данных
collectd
(collectd input
в терминологии InfluxDB), который слушает на порту25826/UDP
и записывает поступающие метрики в базу данных с именемcollectd
. - Коммуникация с API InfluxDB происходит при помощи порта
8086/TCP
. - Сервис находится в общей Docker‑сети
sample-net
с сервисомgrafana
.
Сервис
grafana
c Grafana настроен следующим образом:- Веб-консоль Grafana доступна по адресу
http://10.0.30.30:3000
. - Сервис находится в общей Docker‑сети
sample-net
с сервисомinfluxdb
.
- Создан источник данных
Настройка выгрузки метрик в InfluxDB¶
Необходимые условия
Предполагается, что:
- На хост Docker
10.0.30.30
уже установлены Docker Community Edition и утилитаdocker-compose
. - WAF‑нода
node.example.local
уже развернута, настроена, доступна для дальнейшей настройки (например, по протоколу SSH) и работает.
Развертывание InfluxDB и Grafana¶
Разверните InfluxDB и Grafana на хосте Docker:
-
Создайте рабочую директорию, например,
/tmp/influxdb-grafana
и перейдите в нее:mkdir /tmp/influxdb-grafana cd /tmp/influxdb-grafana
-
Для работы источника данных InfluxDB потребуется файл с типами измеряемых величин
collectd
под названиемtypes.db
.Этот файл описывает спецификации наборов данных (англ. «dataset specifications»), которые используются
collectd
. Такие наборы данных включают в себя в том числе типы измеряемых величин. Подробная информация о файле доступна здесь.Скачайте файл
types.db
из репозитория GitHub проектаcollectd
и поместите его в рабочую директорию. -
Получите базовый файл конфигурации InfluxDB, выполнив следующую команду в рабочей директории:
docker run --rm influxdb influxd config > influxdb.conf
-
Включите источник данных
collectd
в файле конфигурации InfluxDBinfluxdb.conf
, поменяв значение параметраenabled
в секции[[collectd]]
сfalse
наtrue
.Прочие параметры оставьте без изменений.
Секция должна выглядеть следующим образом:
[[collectd]] enabled = true bind-address = ":25826" database = "collectd" retention-policy = "" batch-size = 5000 batch-pending = 10 batch-timeout = "10s" read-buffer = 0 typesdb = "/usr/share/collectd/types.db" security-level = "none" auth-file = "/etc/collectd/auth_file" parse-multivalue-plugin = "split"
-
Создайте в рабочей директории файл
docker-compose.yaml
со следующим содержимым:version: "3" services: influxdb: image: influxdb container_name: influxdb ports: - 8086:8086 - 25826:25826/udp networks: - sample-net volumes: - ./:/var/lib/influxdb - ./influxdb.conf:/etc/influxdb/influxdb.conf:ro - ./types.db:/usr/share/collectd/types.db:ro grafana: image: grafana/grafana container_name: grafana restart: always ports: - 3000:3000 networks: - sample-net networks: sample-net:
Согласно настройкам в
volumes:
, InfluxDB будет использовать:- Рабочую директорию в качестве хранилища баз данных.
- Файл конфигурации
influxdb.conf
, который находится в рабочей директории. - Файл с типами измеряемых величин
types.db
, который находится в рабочей директории.
-
Соберите сервисы с помощью команды
docker-compose build
. -
Запустите сервисы с помощью команды
docker-compose up -d influxdb grafana
. -
Создайте базу данных с именем
collectd
для соответствующего источника данных InfluxDB, выполнив следующую команду:curl -i -X POST http://10.0.30.30:8086/query --data-urlencode "q=CREATE DATABASE collectd"
Сервер InfluxDB должен вернуть похожий ответ:
HTTP/1.1 200 OK Content-Type: application/json Request-Id: 23604241-b086-11e9-8001-0242ac190002 X-Influxdb-Build: OSS X-Influxdb-Version: 1.7.7 X-Request-Id: 23604241-b086-11e9-8001-0242ac190002 Date: Sat, 27 Jul 2019 15:49:37 GMT Transfer-Encoding: chunked {"results":[{"statement_id":0}]}
На этом этапе у вас должны быть запущены InfluxDB, готовый принимать метрики от collectd
, и Grafana, готовая осуществлять мониторинг и визуализацию данных, хранящихся в InfluxDB.
Настройка collectd
¶
Настройте collectd
на выгрузку метрик в InfluxDB:
-
Подключитесь к WAF‑ноде (например, с помощью протокола SSH). Убедитесь, что вы работаете под аккаунтом
root
или другим аккаунтом с правами суперпользователя. -
Создайте файл
/etc/collectd/collectd.conf.d/export-to-influxdb.conf
со следующим содержимым:LoadPlugin network <Plugin "network"> Server "10.0.30.30" "25826" </Plugin>
Здесь задаются:
- Сервер, на который отправлять метрики (
10.0.30.30
). - Порт сервера (
25826/UDP
).
- Сервер, на который отправлять метрики (
-
Перезапустите сервис
collectd
, выполнив команду, соответствующую операционной системе, на которой установлена WAF‑нода:sudo service wallarm-collectd restart
sudo systemctl restart wallarm-collectd.service
Теперь InfluxDB получает все метрики WAF‑ноды. Вы можете визуализировать интересующие вас метрики и осуществлять их мониторинг с помощью Grafana.