Выгрузка метрик с помощью плагина 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.
Сервис
grafanac 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 restartsudo systemctl restart wallarm-collectd.service
Теперь InfluxDB получает все метрики WAF‑ноды. Вы можете визуализировать интересующие вас метрики и осуществлять их мониторинг с помощью Grafana.
