Pull to refresh

Nagios мониторинг баланса мобильного телефона

Reading time 6 min
Views 9.9K

Для чего это нужно


Когда в семье число мобильных телефонов становится более 3-х, назревает вопрос мониторинга баланса и оповещения, когда баланс приближается к критической отметке. Есть много средств для мониторинга баланса, но зачем городить огород, когда под рукой есть незаменимый Nagios (так получилось что и дома у меня есть свой мониторинговый сервер, его основная задача наблюдать за состоянием серверов организаций которые я администрирую в нерабочее время). Данное решение также подойдет для мониторинга баланса корпоративного лицевого счета.

Небольшое отступление


Осуществлять мониторинг, будем посредством http/https запросов к серверам операторов мобильной связи. Для этого нам понадобится php с подключенной библиотекой curl. Для мониторинга будет использоваться Nagios, а для построения графиков Mrtg. В данной версии, реализована работа с двумя операторами мобильной связи, МТС и Билайн. Как ни странно с Билайном оказалось меньше всего проблем: делаем запрос на авторизацию, затем делаем запрос баланса, затем парсим HTML вывод. С МТС-ом оказалось интересней, для каждого региона они используют свое доменное имя «Интернет помощника», что добавляет пару незапланированных действий в алгоритм. Проблема решилась вычислением региона по префиксу номера телефона, в этом помог Интернет ресурс МТТ, который предоставляет доступ к базе данных префиксов операторов связи. После получения региона, мы получаем доменное имя «Интернет помощника» путем разбора java-скрипта с сайта МТС, затем авторизация и парсинг HTML-вывода. Сюда также можно прикрутить Мегафон, но пока не до него.

Итак, от теории к практике


Я не буду заострять внимание на настройке Nagios, я думаю, у обитателей хабра с этим не возникнет проблем, и перейду, так сказать, к самому вкусному. Качаем последнюю версию скриптов отсюда, распаковываем. получаем 3 файла, mobile-api.php, nagios-check-mobile-balance.php, mrtg-mobile-balance.php. Из названия понятны назначения файлов, плагин к Nagios, скрипт к MRTG и файл с функциями для получения баланса (я постарался как можно подробней его раскомментировать).

Копируем файлы по местам и назначаем права


cp ./mobile-balance-api.php /usr/local/lib/
cp ./nagios-check-mobile-balance.php /usr/lib/nagios/plugins/check_mobile_balance.php
cp ./mrtg-check-mobile-balance.php /usr/lib/mrtg2/check_mobile_balance.php
chmod +x /usr/lib/nagios/plugins/check_mobile_balance.php
chmod +x /usr/lib/mrtg2/check_mobile_balance.php


Проверяем работоспособность


Для начала, необходимо исправить константы в /usr/local/lib/mobile-balance-api.php
DEFINE("CACHE_PATH", "/var/cache/balance"); # Директория для сохранения данных
DEFINE("COOKIE_FILE_NAME", CACHE_PATH . "/cookie.txt"); # Имя файла для хранения cookie
DEFINE("OPERATOR_AUTO_DETECT", True);  # Автоматическое определение оператора
DEFINE("AUTO_SAVE_DATA", True); # Сохранять ли данные после автоматического определения оператора
DEFINE("BAD_ATTEMPTS_COUNT", 3); # Количество неудачных попыток, актуально для МТС

Затем необходимо исправить путь в константе «MOBILE_API», в файле /usr/lib/nagios/plugins/check_mobile_balance.php
DEFINE("MOBILE_API", "/usr/local/lib/mobile-balance-api.php");

Если у Вас ещё нет пароля для доступа к «Интернет помощнику», то делаем следующие:
  • Для пользователей МТС: со своего мобильного телефона (или в программе МТС-Коннект) наберите:*111*25# или позвоните по номеру 111 5 (при нахождении в домашней сети) и следуйте инструкции автоинформатора.
  • Для пользователей Билайна: позвоните со своего телефона на бесплатный номер *110*9# и получите SMS с паролем к системе.

Тестовый запуск скрипта
/usr/lib/nagios/plugins/check_mobile_balance.php -w 20 -c 10 -n 9128141111 -p 123456

Ответ
BALANCE OK- +79128141111 = 55 rub
Если неверный пароль, или хост МТС-а is down (такое очень часто бывает, с Билайном лучше) скрипт вернет 0-й баланс.

Настраиваем Nagios


Правим файл /etc/nagios/objects/commands.cfg, добавляем новую команду «check_mobile_balance»
define command{
command_name check_mobile_balance
command_line $USER1$/check_mobile_balance.php -w 30 -c 10 -n $ARG1$ -p $ARG2$
}

-w 30 — это порог warning/предупреждение в рублях
-c 10 — это порог critical/критично в рублях

Затем правим /etc/nagios/objects/localhost.cfg добавляем проверки
define service{
use local-service
host_name localhost
service_description Balance +79128141111
check_command check_mobile_balance!9128141111!123456
}

Где 9128141111 — номер телефона, 123456 — пароль к мобильному помощнику.

Затем перечитываем настройки Nagios: service nagios reload и идем в веб-интерфейс наслаждаться результатом:


Графики


Для вывода графиков я предпочитаю использовать MRTG. Это легкое, простое в настройках приложение. Подразумеваем, что MRTG у Вас установлен, настроен и работает. Проверяем константу «MOBILE_API», в файле /usr/lib/nagios/plugins/check_mobile_balance.php. Правим /etc/mrtg/mrtg.cfg добавляем следующие строки:
Target[mb]: `/usr/lib/mrtg2/check_mobile_balance.php 9128141111 123456`
MaxBytes[mb]: 500
MaxBytes2[mb]: 75
Title[mb]: Mobile balance +79218141111
Options[mb]: unknaszero,gauge,growright,nopercent,transparent,noborder,pngdate,noinfo
AbsMax[mb]: 500
YLegend[mb]: Rub
ShortLegend[mb]: R
Legend1[mb]: Rub
Legend2[mb]: Rub
LegendI[mb]: Rub
LegendO[mb]: Rub
PageTop[mb]: Mobile balance +79218141111

Тестируем, env
LANG=C mrtg /etc/mrtg/mrtg.cfg --logging /var/log/mrtg.log > /dev/null 2>&1

Смотрим, что получилось.


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

Итого


На самом деле скрипт является универсальным решением, и им можно мониторить не только баланс мобильного телефона, но и например рейтинг на rutracker или карму на Хабре.

Мониторинг кармы на Хабре


Для мониторинга кармы на Хабре, необходимо явно прописать пользователя «habrahabr.carma.yozhiks» (пользователь yozhiks выбран не случайно, дабы воздать должное за инвайт) в переменной $manual_detect в файле /usr/local/lib/mobile-balance-api.php например:
$manual_detect = array (
"9128141111" => array("url" => "https://ihelper.ural.mts.ru/SelfCarePda/Security.mvc/LogOn", "operator" => "mts"),
"9061971111" => array("url" => "https://uslugi.beeline.ru/loginPage.do|https://uslugi.beeline.ru/vip/prepaid/refreshedPrepaidBalance.jsp", "operator" => "beeline"),
"habrahabr.carma.yozhiks"   => array("url" => "http://yozhiks.habrahabr.ru", "operator" => "habrahabr.carma")
);

и добавить оператора «habrahabr.carma» в переменную $operators:
$operators = array(
"mts"     => array("name" => 'ОАО "Мобильные Телесистемы"', "result" => "<br/>Баланс: <strong><strong>|</strong> руб.< /strong>"),
"beeline" => array("name" => 'ОАО "Вымпел-Коммуникации"',   "result" => '<td class="tabred">|& nbsp;'),
"habrahabr.carma" => array("name" => 'Хабрахабр карма', "result" => '< span class="mark"><span>|</span></span>')
);

проверяем:
/usr/lib/nagios/plugins/nagios-check-mobile-balance.php -w 30 -c 10 -n habrahabr.carma.yozhiks -p 1

Ответ: BALANCE OK- +7habrahabr.carma.yozhiks = 58 rub
Конечно для такого мониторинга необходимо немного изменить скрипт, но в целом получилось неплохо.

Спасибо за внимание.

P.S. Сегодня при тестировании скрипта, были выявлены проблемы с сайтом МТТ. Проблем можно избежать ручной записью настроек номера, в переменную $manual_detect по шаблону.

P.P.S Nano MRTG HowTo для Windows
Качаем:
windows.php.net/download - php 5.3.5
www.activestate.com/store/activeperl/download - perl 5.12.3
oss.oetiker.ch/mrtg/pub - mrtg 2.17


Устанавливаем/Распаковываем:
perl в c:\perl
mrtg в c:\mrtg
php5 в c:\php
mobile-balance-api.php и mrtg-check-mobile-balance.php в c:\mrtg\bin\


Включаем вывод ошибок в php.ini display_errors = On и error_reporting = E_ALL & ~E_NOTICE на всякий пожарный.

Правим константы:
mobile-balance-api.php
DEFINE(«CACHE_PATH», «c:\Tmp»);
mrtg-check-mobile-balance.php
DEFINE(«MOBILE_API», «c:\mrtg\bin\mobile-balance-api.php»);

Проверяем:
c:\php\php c:\mrtg\bin\mrtg-check-mobile-balance.php 9128141111 123456

Если есть ошибки, смотрим разбираемся.

Настраиваем MRTG:
mkdir c:\mrtg\www
Редактируем/создаем c:\mrtg\mrtg.cfg
EnableIPv6: no
WorkDir: c:\mrtg\www
Target[mb]: `c:\php\php c:\mrtg\bin\mrtg-check-mobile-balance.php 9128141111 123456`
MaxBytes[mb]: 500
MaxBytes2[mb]: 75
Title[mb]: Mobile balance +79218141111
Options[mb]: unknaszero,gauge,growright,nopercent,transparent,noborder,pngdate,noinfo
AbsMax[mb]: 500
YLegend[mb]: Rub
ShortLegend[mb]: R
Legend1[mb]: Rub
Legend2[mb]: Rub
LegendI[mb]: Rub
LegendO[mb]: Rub
PageTop[mb]: Mobile balance +79218141111


Проверяем:
c:\perl\bin\perl c:\mrtg\bin\mrtg c:\mrtg\bin\mrtg.cfg
В директории c:\mrtg\www должны появится файлы mb*.png и mb.html. Команду c:\perl\bin\perl c:\mrtg\bin\mrtg c:\mrtg\bin\mrtg.cfg в «Планировщик задач». Все.

P.P.P.S График моей кармы и рейтинга на MRTG. Синяя — рейтинг, зеленая — карма.
image
Tags:
Hubs:
+87
Comments 40
Comments Comments 40

Articles