Работа с метриками WAF‑ноды в Grafana¶
Если вы настроили выгрузку метрик в InfluxDB или Graphite, то вы можете визуализировать эти метрики с помощью Grafana.
Допущения
В этом документе предполагается, что вы развернули Grafana вместе с InfluxDB или Graphite.
В качестве примера описывается работа с одной метрикой curl_json-wallarm_nginx/gauge-abnormal
(количество обработанных запросов) WAF‑ноды node.example.local
.
Вы можете настроить мониторинг любых метрик, доступных для WAF‑ноды.
Перейдите в браузере по адресу http://10.0.30.30:3000
, чтобы попасть в веб-консоль Grafana и войдите в консоль, используя стандартные логин (admin
) и пароль (admin
).
Для мониторинга метрик WAF‑ноды с помощью Grafana требуется:
-
Подключить источник данных.
-
Получить требуемые метрики из источника данных.
-
Настроить отображение этих метрик.
Далее описывается работа со следующими источниками данных:
-
InfluxDB,
-
Graphite.
Подключение источника данных¶
InfluxDB¶
Требуемые шаги для подключения:
-
На главной странице консоли Grafana нажмите на кнопку Add data source.
-
Выберите тип источника данных «InfluxDB».
-
Введите необходимые параметры для настройки источника данных:
- Name: InfluxDB
- URL:
http://influxdb:8086
- Database:
collectd
- User:
root
- Password:
root
-
Нажмите на кнопку Save & Test.
Graphite¶
Требуемые шаги для подключения:
-
На главной странице консоли Grafana нажмите на кнопку Add data source.
-
Выберите тип источника данных «Graphite».
-
Введите необходимые параметры для настройки источника данных:
- Name: Graphite
- URL:
http://graphite:8080
. - Version: выберите наиболее новую доступную версию из выпадающего списка.
-
Нажмите на кнопку Save & Test.
Проверка состояния источника данных
При успешном подключении любого источника данных должно появиться сообщение «Data source is working».
Дальнейшие действия¶
Чтобы Grafana могла мониторить метрику:
-
Нажмите на иконку Grafana в левом верхнем углу консоли, чтобы вернуться на главную страницу.
-
Создайте новый дашборд, нажав на кнопку New dashboard. Далее добавьте на дашборд запрос для получения метрики, нажав на кнопку Add Query.
Получение метрик из источника данных¶
InfluxDB¶
Чтобы получить метрику из источника данных:
-
Выберите созданный источник данных «InfluxDB» из выпадающего списка Query.
-
Сконструируйте запрос к InfluxDB:
-
либо с помощью графического конструктора запросов:
-
либо введя запрос вручную, нажав на кнопку Toggle text edit mode (кнопка подсвечена на скриншоте):
-
Запрос для получения метрики curl_json-wallarm_nginx/gauge-abnormal
выглядит следующим образом:
SELECT value FROM curl_json_value WHERE (host = 'node.example.local' AND instance = 'wallarm_nginx' AND type = 'gauge' AND type_instance = 'abnormal')
Graphite¶
Чтобы получить метрику из источника данных:
-
Выберите созданный источник данных «Graphite» из выпадающего списка Query.
-
Последовательно выберите нажатием на кнопку select metric части требуемой метрики в строке Series.
Для метрики
curl_json-wallarm_nginx/gauge-abnormal
необходимо выбрать следующие элементы метрики:- Имя хоста (было задано ранее в файле конфигурации плагина
write_graphite
). По умолчанию плагин использует символ_
в качестве разделителя, поэтому доменное имяnode.example.local
преобразуется вnode_example_local
. - Имя плагина
collectd
, который предоставляет конкретное значение:curl_json
. - Имя инстанса плагина:
wallarm_nginx
. - Тип величины:
gauge
. - Имя величины:
abnormal
.
- Имя хоста (было задано ранее в файле конфигурации плагина
Дальнейшие действия¶
После создания запроса для получения метрики настройте ее отображение.
Настройка отображения метрики¶
Перейдите из редактора запросов на вкладку «Visualization» и выберите визуализацию метрики.
Для метрики curl_json-wallarm_nginx/gauge-abnormal
мы рекомендуем использовать визуализацию «Gauge»:
-
Выберите Calc: Last для отображения текущего значения метрики.
-
При необходимости вы можете настроить пороги допустимых значений (англ. «thresholds») и другие параметры.
Дальнейшие действия¶
После настройки отображения метрики:
-
Завершите настройку, нажав на кнопку «←» в верхнем левом углу консоли Grafana.
-
Сохраните внесенные в дашборд изменения.
-
Проверьте, что Grafana успешно мониторит настроенную метрику.
Проверка работы мониторинга Grafana¶
После того, как вы подключили один из источников данных, а также настроили запрос для получения метрики curl_json-wallarm_nginx/gauge-abnormal
и отображение этой метрики, проверьте работу мониторинга:
-
Включите автоматическое обновление метрики каждые пять секунд (выберите значение из выпадающего списка в правом верхнем углу консоли Grafana).
-
Убедитесь, что текущее количество атак на дашборде Grafana совпадает с выводом
wallarm-status
на WAF‑ноде:- Используйте команду
curl http://127.0.0.8/wallarm-status
, если используются настройки WAF‑ноды по умолчанию. -
Если мониторинг настроен иначе, см. файл конфигурации
/etc/nginx/conf.d/wallarm-status.conf
.Вывод команды будет аналогичен выводу ниже:
{"requests":0,"attacks":0,"blocked":0,"abnormal":0,"tnt_errors":0,"api_errors":0,"requests_lost":0,"segfaults":0,"memfaults":0,"softmemfaults":0,"time_detect":0,"db_id":46,"custom_ruleset_id":4,"proton_instances": { "total":2,"success":2,"fallback":0,"failed":0 },"stalled_workers_count":0,"stalled_workers":[] }
- Используйте команду
-
Выполните тестовую атаку на приложение, защищенное WAF‑нодой. Для этого можно выполнить команду
curl
с вредоносным запросом к приложению или выполнить этот запрос в браузере.Пример
curl -I http://node.example.local/etc/passwd
-
Убедитесь, что счетчик атак увеличился как в выводе
wallarm-status
, так и на дашборде Grafana:{"requests":64,"attacks":16,"blocked":0,"abnormal":64,"tnt_errors":0,"api_errors":0,"requests_lost":0,"segfaults":0,"memfaults":0,"softmemfaults":0,"time_detect":0,"db_id":46,"custom_ruleset_id":4,"proton_instances": { "total":2,"success":2,"fallback":0,"failed":0 },"stalled_workers_count":0,"stalled_workers":[] }
Теперь в дашборде Grafana отображаются значения метрики curl_json-wallarm_nginx/gauge-abnormal
для WAF‑ноды node.example.local
.