С некоторых пор для мониторинга домашней сетевой инфраструктуры я перешел на связку из Prometheus и Grafana. Нет, использовавшийся до этого Zabbix вполне устраивал, но мне все чего-то не хватало, особенно в части графического представления данных. Попробовав возможности Grafana, я понял, что это то, что нужно для моих задач: будь-то вывод счетчика трафика за месяц или индикатор уровня сигнала LTE модемов.
Конечно, можно было использовать Grafana для визуализации данных с Zabbix, но в моем случае мониторинг развернут на базе скромной платы Rapsberry Pi 3, поэтому вместе с обновлением графической части было решено заменить сборщик на Prometheus и удалить, ставшие теперь ненужными, пакеты MySQL и Apache.
Я не буду описывать процесс настройки Prometheus и Grafana, т.к. в Интернете уже опубликовано большое количество инструкций по этому поводу, а ограничусь описанием настройки мониторинга за уровнем сигнала USB модема Huawei E8372H-153 в Prometheus.
Немного технических деталей. В моем случае, модем Huawei E8372H-153 подключен в роутер Mikrotik Chateau LTE12. Роутер имеет собственный встроенный модем (lte1). Информация об уровне сигнал со встроенного модема легко получается в Prometheus с помощью модуля snmp exporter и поддержке SNMP со стороны Mikrotik. Однако, так как USB модем (lte2) работает в режиме HiLink, то никакой информаций об уровне сигнала с USB модема в роутере нет.
Параметры сигнала USB модема можно увидеть, если зайти Web браузером в панель управления, но этот метод плохо подходит для мониторинга.
Но есть удобный способ получить значения параметров SINR, RSRP и RSRQ, можно воспользоваться API, которое в том или ином виде применяется во многих модемах Huawei.
Чтобы увидеть заветные цифры, достаточно получить токен от модема и обратится по адресу:
http://192.168.8.1/api/device/signal
Если все сделано правильно, то будет получен ответ в виде XML, в котором присутствуют значения все необходимых параметров:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<pci>385</pci>
<sc></sc>
<cell_id>200769797</cell_id>
<rsrq>-4dB</rsrq>
<rsrp>-53dBm</rsrp>
<rssi>>=-51dBm</rssi>
<sinr>28dB</sinr>
<rscp></rscp>
<ecio></ecio>
<psatt>1</psatt>
<mode>7</mode>
<lte_bandwidth></lte_bandwidth>
<lte_bandinfo></lte_bandinfo>
</response>
Таким образом, используя API от Huawei можно автоматизировать процесс сбора параметров. Решить эту задачу можно несколькими способами, но самым простым мне видится оформление процедуры в виде скрипта, опрашивающего модем и отправляющего полученные данные в виде метрик в Prometheus. Сам скрипт оформляется в виде службы.
Настройка pushgatwey
Чтобы Prometheus начал принимать PUSH данные, необходимо предварительно настроить модуль pushgateway.
Скачать предварительно скомпилированную версию pushgwatey можно с GitHub. На момент написания этой заметки, актуальна версия 1.4.2. Так как установка осуществлялась на Rapsberry, то был вариант для Linux и ARM7.
wget https://github.com/prometheus/pushgateway/releases/download/v1.4.2/pushgateway-1.4.2.linux-armv7.tar.gz
tar xfz pushgateway-1.4.2.linux-armv7.tar.gz
sudo cp pushgateway-1.4.2.linux-armv7/pushgateway /usr/local/bin/pushgateway
Вносим соответствующие изменения в конфигурацию Prometheus.
- job_name: 'pushgateway'
honor_labels: true
static_configs:
- targets: ['localhost:9091']
Перезапускаем службу и проверяем ее статуc, который должен быть Active.
sudo systemctl restart prometheus
sudo systemctl status prometheus
Настройка мониторинга
Я создал небольшой репозиторий e8372-lte-monitor на Github, с которого вы можете загрузить скрипт и файл службы.
Файл скрипта e8372h_service.sh можно разместить в любом удобном месте, например, домашней папке /home/pi. Не забудьте сделать скрипт исполняемым.
sudo chmod +x e8372h_service.sh
Файл службы e8372h_monitor.service скопировать в папку /etc/systemd/system, перезагрузить диспетчер и запустить службу. Если вы используете для размещения скрипта каталог, отличный от /home/pi, отредактируйте соответствующим образом путь к скрипту в файле e8372h_monitor.service
sudo cp e8372h_monitor.service /etc/systemd/system/e8372h_monitor.service
sudo systemctl daemon-reload
sudo systemctl enable e8372h_monitor
Запускаем службу и проверяем статус, который должен быть Active.
sudo systemctl enable e8372h_monitor
sudo systemctl status e8372h_monitor
Пора проверить работу. Сделать это можно на главной странице Prometheus, введя в строке поиска e8372h_sinr. Результатом запроса должна стать метрика для параметра SINR. Аналогичным образом проверяется доступность метрик e8372h_rsrq и e8372h_rsrp.
Ну и, наконец, остается применить эти метрики по своему вкусу в Grafana. Для отображения сигнала я использую панель типа Bar Gauge, предварительно настроив уровни threshold. Значения уровней для LTE можно найти в Интернете, я использовал значения с этой страницы.
Ни же скриншот моей панели мониторинга за двумя LTE модемами: LTE1 — это встроенный модем в роутер Mikrotik Chateau, а LTE2 — это USB модем Huawei E8372H.
Предложения по улучшению и/или исправлению скрипта принимаются через GitHub.
А на этом пока все.