Давненько заготовка данной публикации лежала у меня в черновиках, но вот купив себе новенький ASUS RT-AX1800U мне потребовалось повторить настройку OpenWRT таким образом чтобы появилась возможность снимать с него метрики через Prometheus. Так что на этот раз решил всё подробнейшим образом задокументировать и довести публикацию до релиза.
В данной публикации мы для начала обсудим как выполнить установку и первоначальную настройку экспортера на роутере, далее на стороннем сервере при помощи Docker запустим сервис Prometheus, подключим к нему Grafana и настроим специальный дашборд для просмотра информации о нашей железке.
Предполагается, что читателю упомянутые выше технологии знакомы, поэтому заострять на них внимания не будем, а продолжим и первым шагом будет...
Установка пакетов на OpenWRT
Предполагается, что у вас уже имеется роутер прошитый под OpenWR (и что вы знаете что такое OpenWRT;) на котором достаточно свободного места для установки экспортера (на всё про всё понадобится примерно 500 килобайт).
И так приступим, логинимся на роутер через web-интефрейс, авторизуемся из под root, далее заходим на страницу System > Software, на этой странице находится интерфейс пакетного менеджера.
Как не сложно догадаться откроется страница Software, на ней нас для начала интересует кнопка Update lists..., нажимаем на неё.
Появится модальное окно, а в нём отладочные данные о процессе обновления списка пакетов, смотрим что всё хорошо, далее справа снизу жмём кнопку Dismiss.
Теперь найдём необходимые пакеты, для этого в поле Filter пишем слово 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... возле каждого пакета из списка выше.
Либо, если вы ценитель командной строки, вот тоже самое через консоль:
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, которое позволяет подключиться к консоли через браузер.
Далее пишем в консоли следующую команду:
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
Наполним его следущими содержимым:
Далее жмём комбинацию клавиш [Ctrl]+[X], затем клавишу [Y], затем клавижу [Enter], это сохранит изменения которые мы выполнили в файле.
Возможно вы уже обратили внимание на файл prometheus.yml упомянутий в конфигурации, в нём содержатся настройки сервиса Prometheus, создим его, после чего откроем в редакторе:
touch prometheus.yml
nano prometheus.yml
Наполним его следующим содержимым:
Сохраним и выйдем.
Далее создадим пустую папку prometheus_data в которую сервис Prometheus будет сохранять своё состояние.
mkdir ./prometheus_data
sudo chown 65534:65534 ./prometheus_data
Теперь запустим контейнер с сервисом Prometheus и посмотрим что получилось:
docker-compose up -d
Контейнер запущен и поэтому теперь можно зайти на web-интерфейс и убедиться в том, что Prometheus корректно работает, откроем следующую страницу в браузере http://localhost:9090
Откроется страница с базовым интфрейсом 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_data в которую сервис Grafana будет сохранять своё состояние.
mkdir ./grafana_data
sudo chown 472:0 ./grafana_data
Затем запустим контейнер с Grafana:
docker-compose up -d
Теперь давайте подождём пару минут и откроем в браузере страницу http://localhost:3000
Тут пишем логин admin и пароль admin, после чего откроектся админка и предложит сменить пароль, пропустим этот шаг нажам Skip.
Дальше слева сверху жмём на кнопку [≡] которая открывает менюшку, в менюшке идём в Connection / Add new connection.
На открывшейся странице в поисковом блоке ввода пишем слово prometheus.
Нажимаем на Prometheus, далее в открывшимся меню жмём кнопку Add new data source.
Далее на следующей странице в поле ввода Connection пишем http://prometheus:9090 (это адрес сервиса prometheus в пределах изолированной сети Docker), затем скролим вниз и жмём кнопку Save.
Теперь добавим дашборд, на котором будут собраны все графики о нашем роутере, для этого в менюшке выберем блок Dashboards, на этой странице справа сверху будет кнопка New, жмём её и выпадет менюшка, в ней нажмём кнопку Import.
В поле Dashboard ID пишем число 11147 (это идентификатор дашборда OpenWRT), далее жмём кнопку Load, система подгрузит дашборд с серверов Grafana, далее в секции Prometheus выберем прометеус который мы добавляли ранее.
И после нажатия на кнопку Import мы попадём на этот самый дашборд.
Вот в принципе и всё :)
Завершение
И так, мы разобрались с тем как установить node_exporter на роутер прошитый под OpenWRT и собрать метрики о работе сети. Также мы подружили сервис Prometheus с Grafana и построили красивые графики, которые позволят легко мониторить состояние роутера и сети в целом.
Если вам понравилась эта публикация, не забудьте подписаться на мой Telegram-канал, где я делюсь своими мыслями, новостями и экспериментами. К тому же, если вы хотите поддержать мои усилия то можете сделать пожертвование на CloudTips. Ваша поддержка поможет мне продолжать свою работу и делиться новыми открытиями с вами.
Спасибо за ваше внимание и до новых встреч!