Когда в семье число мобильных телефонов становится более 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 и файл с функциями для получения баланса (я постарался как можно подробней его раскомментировать).
Для начала, необходимо исправить константы в /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
Если у Вас ещё нет пароля для доступа к «Интернет помощнику», то делаем следующие:
Для пользователей МТС: со своего мобильного телефона (или в программе МТС-Коннект) наберите:*111*25# или позвоните по номеру 111 5 (при нахождении в домашней сети) и следуйте инструкции автоинформатора.
Для пользователей Билайна: позвоните со своего телефона на бесплатный номер *110*9# и получите SMS с паролем к системе.
Ответ 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
Листинги скриптов приводить думаю смысла нет, ибо много строк. На всякий случай продублирую ссылку на них, здесь.
Итого
На самом деле скрипт является универсальным решением, и им можно мониторить не только баланс мобильного телефона, но и например рейтинг на rutracker или карму на Хабре.
Мониторинг кармы на Хабре
Для мониторинга кармы на Хабре, необходимо явно прописать пользователя «habrahabr.carma.yozhiks» (пользовательyozhiks выбран не случайно, дабы воздать должное за инвайт) в переменной $manual_detect в файле /usr/local/lib/mobile-balance-api.php например:
Ответ: BALANCE OK- +7habrahabr.carma.yozhiks = 58 rub Конечно для такого мониторинга необходимо немного изменить скрипт, но в целом получилось неплохо.
Спасибо за внимание.
P.S. Сегодня при тестировании скрипта, были выявлены проблемы с сайтом МТТ. Проблем можно избежать ручной записью настроек номера, в переменную $manual_detect по шаблону.
Проверяем: 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. Синяя — рейтинг, зеленая — карма.