
Друзья,
Решил с вами поделиться решением задачки, которой занимался (в числе прочего) два последних дня.
Известно, что Nagios прекрасно мониторит хосты с фиксированным IP-адресом.
Но как мониторить телефонные аппараты, зарегистрированные на моей АТС Asterisk, которые получают адреса динамически?
При этом важно не просто пинговать хосты, а определять их статус на АТС.
Понятно, что статус знает сама АТС, с нее я иначал.
Чтобы не гробить сервер большим количеством запросов к Asterisk, которому и без того есть чем заняться (на АТС более 300 абонентов), поручим это занятие CRON-у.
CRON раз в минуту получает и записывает в файл /var/ext_status/cgi-bin/status.log статусы все SIP-пиров, зарегистрированных на АТС.
* * * * * /usr/sbin/asterisk -rx “sip show peers” > /var/ext_status/cgi-bin/status.log
АТС для ответов Nagios-у будет использовать https-протокол стандартного Apache, имеющегося на борту.
С помощью конфигурационного файла /etc/httpd/conf.d/ext_status.conf создаем алиас /ext
ScriptAlias /ext/ /var/ext_status/cgi-bin/
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
Perl-cкрипт /var/ext_status/cgi-bin/sipstat.pl получает на вход CGI параметр ext, равный номеру проверяемого телефона.
Скрипт грепает файл status.log, определяя статус нужного SIP.
Если статус ОК, то скрипт возвращает информацию о номере и в т.ч. URL SIP-агента, по которому можно перейти к редактированию настроек аппарата.
Если не але, то скрипт молчит в 443-ый порт, провоцирую Nagios диагностировать ошибку.
Nagios проверяет SIP-номер по протоколу HTTPS используя штатный check_http
В консоли формат команды таковой
/usr/lib/nagios/plugins/check_http -H -u /ext/sipstat.pl?ext=номер_телефона -s OK
В GUI-нтерфесе заполняем поля:
IP address: адрес_АТС -u /ext/sipstat.pl?ext=номер_телефона
Check command: check_https
Action URL: http://адрес_АТС/ext/sipstat.pl?ext=номер_телефона
Теперь с помощью Nagios можно узнать статус любого телефона, зная его номер,
включить email-уведомление для стратегических номеров.
Кроме того, можно сразу выйди на конфигурирование соответствующего аппарата по IP-адресу, который вычисляет Nagios.
Ну, а при желании можно создать телефонный справочник, где для каждого абонента будет указано доступен он сейчас или нет.
PS. Собственно тема не нова, но все plugin-ы, которые мне удалось найти для Астеристка мне не понравились. Не жалеют они Asterisk, а т.к. мой высоконагруженный, про проще оказалось написать свой.