Мониторинг уровня сигнала E8372H в Prometheus

С некоторых пор для мониторинга домашней сетевой инфраструктуры я перешел на связку из 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 модема в роутере нет.

Информация об уровне сигнала LTE в Mikrotik

Параметры сигнала USB модема можно увидеть, если зайти Web браузером в панель управления, но этот метод плохо подходит для мониторинга.

Уровень сигнала USB модема E8372H в панели управления

Но есть удобный способ получить значения параметров 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>&gt;=-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.

Метрика e8372h_sinr в Prometheus

Ну и, наконец, остается применить эти метрики по своему вкусу в Grafana. Для отображения сигнала я использую панель типа Bar Gauge, предварительно настроив уровни threshold. Значения уровней для LTE можно найти в Интернете, я использовал значения с этой страницы.

E8372H LTE Grafana

Ни же скриншот моей панели мониторинга за двумя LTE модемами: LTE1 — это встроенный модем в роутер Mikrotik Chateau, а LTE2 — это USB модем Huawei E8372H.

Grafana мониторинг двух LTE модемов

Предложения по улучшению и/или исправлению скрипта принимаются через GitHub.

А на этом пока все.