Найти в Дзене
Pavel Zloi

Как подружить OpenWRT и Prometheus?

Давненько заготовка данной публикации лежала у меня в черновиках, но вот купив себе новенький ASUS RT-AX1800U мне потребовалось повторить настройку OpenWRT таким образом чтобы появилась возможность снимать с него метрики через Prometheus. Так что на этот раз решил всё подробнейшим образом задокументировать и довести публикацию до релиза. В данной публикации мы для начала обсудим как выполнить установку и первоначальную настройку экспортера на роутере, далее на стороннем сервере при помощи Docker запустим сервис Prometheus, подключим к нему Grafana и настроим специальный дашборд для просмотра информации о нашей железке. Предполагается, что читателю упомянутые выше технологии знакомы, поэтому заострять на них внимания не будем, а продолжим и первым шагом будет... Предполагается, что у вас уже имеется роутер прошитый под OpenWR (и что вы знаете что такое OpenWRT;) на котором достаточно свободного места для установки экспортера (на всё про всё понадобится примерно 500 килобайт). И так прис
Оглавление

Давненько заготовка данной публикации лежала у меня в черновиках, но вот купив себе новенький ASUS RT-AX1800U мне потребовалось повторить настройку OpenWRT таким образом чтобы появилась возможность снимать с него метрики через Prometheus. Так что на этот раз решил всё подробнейшим образом задокументировать и довести публикацию до релиза.

Сгенерированно при помощи DALL-E
Сгенерированно при помощи DALL-E

В данной публикации мы для начала обсудим как выполнить установку и первоначальную настройку экспортера на роутере, далее на стороннем сервере при помощи Docker запустим сервис Prometheus, подключим к нему Grafana и настроим специальный дашборд для просмотра информации о нашей железке.

Предполагается, что читателю упомянутые выше технологии знакомы, поэтому заострять на них внимания не будем, а продолжим и первым шагом будет...

Установка пакетов на OpenWRT

Предполагается, что у вас уже имеется роутер прошитый под OpenWR (и что вы знаете что такое OpenWRT;) на котором достаточно свободного места для установки экспортера (на всё про всё понадобится примерно 500 килобайт).

И так приступим, логинимся на роутер через web-интефрейс, авторизуемся из под root, далее заходим на страницу System > Software, на этой странице находится интерфейс пакетного менеджера.

Как попасть на пакетный менеджер
Как попасть на пакетный менеджер

Как не сложно догадаться откроется страница Software, на ней нас для начала интересует кнопка Update lists..., нажимаем на неё.

Обновление списка пакетов
Обновление списка пакетов

Появится модальное окно, а в нём отладочные данные о процессе обновления списка пакетов, смотрим что всё хорошо, далее справа снизу жмём кнопку Dismiss.

Список пакетов успешно обновлён
Список пакетов успешно обновлён

Теперь найдём необходимые пакеты, для этого в поле Filter пишем слово exporter и смотрим что получилось.

Отфильтрованные пакеты по слову exporter
Отфильтрованные пакеты по слову exporter

Тут нам потребуется установить несколько пакетов:

  • prometheus-node-exporter-lua - это основной пакет, он содержит в себе HTTP сервер и через плагины собирает информацию о железке, представляет из себя легковесную официальную версию node_exporter;
  • prometheus-node-exporter-lua-nat_traffic - плагин для сбора информацию о работе цепочек NAT;
  • prometheus-node-exporter-lua-netstat - плагин для сбора сетевой статистики;
  • prometheus-node-exporter-lua-openwrt - плагин для сбора общей информации об инсталляции OpenWRT;
  • prometheus-node-exporter-lua-uci_dhcp_host - плагин позволяющий получать информацию об IP-адресах выданных DHCP сервером;
  • prometheus-node-exporter-lua-wifi - плагин для сборка информация о вай-фай адаптерах;
  • prometheus-node-exporter-lua-wifi_stations - сбор инорфмации о пользователя подключенных по вай-фай.

Прожмём кнопочку Install... возле каждого пакета из списка выше.

Установка пакета prometheus-node-exporter-lua
Установка пакета prometheus-node-exporter-lua

Либо, если вы ценитель командной строки, вот тоже самое через консоль:

opkg update
opkg install \
prometheus-node-exporter-lua \
prometheus-node-exporter-lua-nat_traffic \
prometheus-node-exporter-lua-netstat \
prometheus-node-exporter-lua-openwrt \
prometheus-node-exporter-lua-uci_dhcp_host \
prometheus-node-exporter-lua-wifi \
prometheus-node-exporter-lua-wifi_stations

Далее потребуется настроить node_exporter, по умолчанию он запускается только на интерфейсе localhost, но нам будет необходимо поменять это на интерфейс на lan.

Но этот раз нам в любом случае потребуется либо подключиться через ssh, либо установить расширение для web-интефрейса luci-app-ttyd, которое позволяет подключиться к консоли через браузер.

После установки luci-app-ttyd потребуется нажать F5, чтобы перезагрузить страницу, далее зайти Services / Terminal, а там уже авторизоваться из под пользователя root
После установки luci-app-ttyd потребуется нажать F5, чтобы перезагрузить страницу, далее зайти Services / Terminal, а там уже авторизоваться из под пользователя root

Далее пишем в консоли следующую команду:

sed -r 's/loopback/lan/g' -i /etc/config/prometheus-node-exporter-lua

Эта команда за вас отредактирует файл /etc/config/prometheus-node-exporter-lua и заменит в нём слово localhost на слово lan (названия интерфейсов).

Теперь потребуется либо перезагрузить роутер, либо выполнить следующую команду:

/etc/init.d/prometheus-node-exporter-lua restart

Данная команда выполнит перезапуск сервера node_exporter, после чего он перечитает конфигурацию и станет доступен на интерфейсе lan.

Теперь проверим, что всё работает как надо, для этого выполним команду:

curl http://192.168.1.1:9100/metrics

Кстати, 192.168.1.1 - это IP-адрес моего роутера, он является адресом по умолчанию на роутерах OpenWRT, но может быть другим если вы его меняли на своём роутере.

Энивей, если в ответе будет что-то типа примера ниже, то мы всё сделали правильно и можно двигаться к следующему шагу.

Метрики снятые с роутера
Метрики снятые с роутера

Далее мы настроим сервер Prometheus таким образом, чтобы он снимал показания с node_exporter установленного на роутере, но для начала понадобится разобраться с тем...

Как запустить сервер Prometheus?

Начнём с небольшого вступления, проект Prometheus - это специальный сервис по сбору метрик и аналитических данных с различных удалённых и не очень удалённых систем.

Основная его задача в том чтобы собирать данные из экспортеров сформированные в виде временных рядов, которые затем можно визуализировать и проанализировать для получения информации о производительности и состоянии инфраструктуры в целом или отдельных подсистем в частности.

В официальной документации Prometheus можно почитать о данном проекте чуть подробнее.

Существует множество вариантов установки Prometheus, со всеми ими можете ознакомиться в официальной документации Prometheus, в главе Installation, но а лично я предпочитаю Docker-way.

Кстати ранее я написал публикацию под названием "Большая экскурсия в мир Docker" и если вы не очень знакомы с тем как пользоваться Docker то рекомендую с ней ознакомиться, так как подробности установки Docker Engine и Docker Compose я пропущу.

При описании конфигураций прометеуса буду использовать конфигурации Docker Compose, так как с моей скромной точки зрения это намного удобнее чем ванильный Docker.

И так, создадим пустую папку, назовём её скажем docker-monitoring, после чего перейдём в неё.

mkdir docker-monitoring
cd docker-monitoring

Теперь создадим в ней файл docker-compose.yml и откроем его в редакторе nano (хотя лично я предпочитаю mcedit).

touch docker-compose.yml
nano docker-compose.yml

Наполним его следущими содержимым:

Базовая заготовка сервера Prometheus
Базовая заготовка сервера Prometheus
Конфигурация docker-compose.yml для запуска Prometheus и Grafana (шаг 1)

Далее жмём комбинацию клавиш [Ctrl]+[X], затем клавишу [Y], затем клавижу [Enter], это сохранит изменения которые мы выполнили в файле.

Возможно вы уже обратили внимание на файл prometheus.yml упомянутий в конфигурации, в нём содержатся настройки сервиса Prometheus, создим его, после чего откроем в редакторе:

touch prometheus.yml
nano prometheus.yml

Наполним его следующим содержимым:

Конфигурация прометеуса
Конфигурация прометеуса
Конфигурация docker-compose.yml для запуска Prometheus и Grafana (шаг 2)

Сохраним и выйдем.

Далее создадим пустую папку prometheus_data в которую сервис Prometheus будет сохранять своё состояние.

mkdir ./prometheus_data
sudo chown 65534:65534 ./prometheus_data

Теперь запустим контейнер с сервисом Prometheus и посмотрим что получилось:

docker-compose up -d
Загрузка образа, создание сетевого интерфейса monitoring. создание и запуск контейнера
Загрузка образа, создание сетевого интерфейса monitoring. создание и запуск контейнера

Контейнер запущен и поэтому теперь можно зайти на web-интерфейс и убедиться в том, что Prometheus корректно работает, откроем следующую страницу в браузере http://localhost:9090

Стартовая страница Prometheus
Стартовая страница Prometheus

Откроется страница с базовым интфрейсом Prometheus, который нам отчёливо показывает, что этот фронтенд писали бэкендеры, поэтому не пугайтесь, дальше мы подключим Grafana и будет в разы красивее, ну а пока что просто убедимся в том, что всё работает.

Для этого, в поле Expression напишем скажем wifi_station_transmit_packets_total (отобразить информацию о суммарном количестве пакетов, переданных подключенными к роутеру вай-фай станциями), далее нажмём кнопку Execute и если всё настроено правильно, то мы увидим что-то типа этого:

Метрика отображающее суммарное количество пакетов переданное станциями
Метрика отображающее суммарное количество пакетов переданное станциями

На самом деле вам станет понятно, что всё настроено правильно если в момент набора названия метрики будут вылезать подсказки названий других метрик.

Чтож, на данном шаге предполагается, что сервер Prometheus запущен и настроен, а это значит мы можем перейти к следующему шагу и сделать так, чтобы информация полученная при помощи node_exporter с нашего роутера отображалась красивыми графиками.

Для этого воспользуемся проектом Grafana, а это значит потребуется разобраться с тем...

Как подружить Grafana и Prometheus?

Прежде чем продолжим давайте немного поговорим о проекте Grafana, если в двух словах то этот проект представляет из себя мощный и интуитивно понятной инструмент для визуализации данных и аналитики.

Grafana позволяет создавать красивые и информативные диаграммы, таблицы, графики и другие представления на основе данных из различных источников, включая Prometheus, InfluxDB, Elasticsearch и многих других.

Установку Grafana также будем осуществлять с использованием Docker, для этого снова откроем docker-compose.yml через редактор и добавим в него сервис grafana.

Сервис grafana добавлен в композицию
Сервис grafana добавлен в композицию
Конфигурация docker-compose.yml для запуска Prometheus и Grafana (шаг 3)

Сохраним и выйдем.

-15

Далее создадим пустую папку grafana_data в которую сервис Grafana будет сохранять своё состояние.

mkdir ./grafana_data
sudo chown 472:0 ./grafana_data

Затем запустим контейнер с Grafana:

docker-compose up -d
Запуск контейнера grafana
Запуск контейнера grafana

Теперь давайте подождём пару минут и откроем в браузере страницу http://localhost:3000

Окно авторизации Grafana
Окно авторизации Grafana

Тут пишем логин admin и пароль admin, после чего откроектся админка и предложит сменить пароль, пропустим этот шаг нажам Skip.

Ура, мы в админке
Ура, мы в админке

Дальше слева сверху жмём на кнопку [≡] которая открывает менюшку, в менюшке идём в Connection / Add new connection.

На открывшейся странице в поисковом блоке ввода пишем слово prometheus.

Добавление сервиса Prometheus
Добавление сервиса Prometheus

Нажимаем на Prometheus, далее в открывшимся меню жмём кнопку Add new data source.

Подтверждаем
Подтверждаем

Далее на следующей странице в поле ввода Connection пишем http://prometheus:9090 (это адрес сервиса prometheus в пределах изолированной сети Docker), затем скролим вниз и жмём кнопку Save.

Конфигурация сохранена успешно
Конфигурация сохранена успешно

Теперь добавим дашборд, на котором будут собраны все графики о нашем роутере, для этого в менюшке выберем блок Dashboards, на этой странице справа сверху будет кнопка New, жмём её и выпадет менюшка, в ней нажмём кнопку Import.

Страница создания дополнительного дашборда
Страница создания дополнительного дашборда

В поле Dashboard ID пишем число 11147 (это идентификатор дашборда OpenWRT), далее жмём кнопку Load, система подгрузит дашборд с серверов Grafana, далее в секции Prometheus выберем прометеус который мы добавляли ранее.

Импорт дашборда OpenWRT
Импорт дашборда OpenWRT

И после нажатия на кнопку Import мы попадём на этот самый дашборд.

Дашборд OpenWRT
Дашборд OpenWRT

Вот в принципе и всё :)

Завершение

И так, мы разобрались с тем как установить node_exporter на роутер прошитый под OpenWRT и собрать метрики о работе сети. Также мы подружили сервис Prometheus с Grafana и построили красивые графики, которые позволят легко мониторить состояние роутера и сети в целом.

Если вам понравилась эта публикация, не забудьте подписаться на мой Telegram-канал, где я делюсь своими мыслями, новостями и экспериментами. К тому же, если вы хотите поддержать мои усилия то можете сделать пожертвование на CloudTips. Ваша поддержка поможет мне продолжать свою работу и делиться новыми открытиями с вами.

Спасибо за ваше внимание и до новых встреч!