AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Asterisk и Nagios

Библиотека 11 сообщений 15.12.2009 17:41 - 01.12.2011 09:23
#1 15.12.2009 17:41

Asterisk и Nagios

И так начнем. Потребовалось мониторить сервисы с помощью nagios, но по мимо мониторинга захотелось получать оповещение о проблемах в сети. Для начало настроил отсылку на почту, но данный способ не понравился, так как пока проверишь почту время утрачено. Тут пришла идея звонить на мобильный....

Что потребовалось.

Сервер! под Linux

•Nagios 3.0.1 использовал EZNAG

•Cepstral Swift 4.X Это для создания фраз(хотя можно и свои поставить)

•Asterisk 1.4.X

Ставим *
Ставим Eznag
Ставим Cepstral Swift
Думаю заморочек не появится...

После изменяем конфиг nagiosa


Создаем контакт

vi /usr/local/nagios/etc/objects/contactst.cfg

Код: Выделить всё

define contact { contact_name kinder use generic-contact alias Nagios Admin contactgroups admins host_notifications_enabled 1 service_notifications_enabled 1 host_notification_period 24x7 service_notification_period 24x7 host_notification_options d,u,r,f,s service_notification_options w,u,c,r,f,s host_notification_commands notify-host-by-email,notify-host-by-phone service_notification_commands notify-service-by-email,notify-service-by-phone email [email protected] address2 local/[email protected] } 
Можно доработать...


После потребуется создать Notification command. Это требуется для того чтоб нам * позвонила...

vi /usr/local/nagios/etc/objects/commands.cfg

Код: Выделить всё

define command{ command_name notify-host-by-phone command_line $USER1$/notify-by-phone.sh $CONTACTADDRESS2$ "Nagios Host Alarm. Notification Type: $NOTIFICATIONTYPE$. Host: $HOSTNAME$. State: $HOSTSTATE$. Address: $HOSTADDRESS$ Info: $HOSTOUTPUT$ Time: $LONGDATETIME$" _host_$HOSTEVENTID$ } define command{ command_name notify-service-by-phone command_line $USER1$/notify-by-phone.sh $CONTACTADDRESS2$ "Nagios Service Alarm. Notification Type: $NOTIFICATIONTYPE$. Service: $SERVICEDESC$. Host: $HOSTALIAS$. Address: $HOSTADDRESS$. State: $SERVICESTATE$. Time: $LONGDATETIME$. Additional Info: $SERVICEOUTPUT$" _service_$SERVICEEVENTID$ } 
НУ а теперь правим настройки *

/etc/asterisk/extensions.conf

Код: Выделить всё

[alarm] exten => s,1,Answer exten => s,2,NoOp(alarmid: ${alarmid}) exten => s,3,Playback(/var/spool/alarm/alarm${alarmid}) exten => s,4,Hangup
И так настройки оповещения мы сделали нагиос и * работаю.
Отвлечемся чуть на добавление хостов так как с этим возник затык. Долго не мог добиться того чтоб nagios отрабатывал Notification command.
Так что ниже конфиг для хостов и сервисов


Hosts

Код: Выделить всё

# added by EZNag/Nmap define host { host_name name use linux-server alias name address 192.168.0.1 check_command check-host-alive max_check_attempts 3 check_period 24x7 contacts kinder notification_interval 120 notification_period 24x7 notification_options d,u,r notifications_enabled 1 } 
Service

Код: Выделить всё

# added by EZNag/Nmap define service { service_description PING host_name name use local-service is_volatile 0 check_command check_ping!100.0,20%!500.0,60% max_check_attempts 3 check_period 24x7 notification_interval 120 notification_period 24x7 notification_options w,u,c,r contact_groups global-admins } 
Обратите внимание на то что host_name должен совпадать в hoste и service///

Далее создаем скрип для создания звонка...

Код: Выделить всё

#!/bin/bash channel=$1 alarmtext=$2 alarmid=$3 cd /var/spool/alarm echo $alarmtext > alarm$alarmid.txt /opt/swift/bin/swift -n Allison-8KHz -f alarm$alarmid.txt -o alarm$alarmid.tmp.wav /usr/bin/sox alarm$alarmid.tmp.wav -r 8000 alarm$alarmid.ul /bin/mv -f alarm$alarmid.ul alarm$alarmid.ulaw /bin/rm alarm$alarmid.tmp.wav echo "Channel: local/[email protected] MaxRetries: 4 RetryTime: 30 WaitTime: 30 Context: alarm Extension: s Priority: 1 callerid:40 Set: alarmid=$alarmid" > alarm1$alarmid.call echo "Channel: local/[email protected] MaxRetries: 4 RetryTime: 30 WaitTime: 30 Context: alarm Extension: s Priority: 1 callerid:40 Set: alarmid=$alarmid" > alarm2$alarmid.call echo "Channel: local/[email protected] MaxRetries: 4 RetryTime: 30 WaitTime: 30 Context: alarm Extension: s Priority: 1 callerid:40 Set: alarmid=$alarmid" > alarm3$alarmid.call /bin/chmod 777 alarm1$alarmid.call /bin/chmod 777 alarm2$alarmid.call /bin/chmod 777 alarm3$alarmid.call /bin/mv alarm1$alarmid.call /var/spool/asterisk/outgoing /bin/mv alarm2$alarmid.call /var/spool/asterisk/outgoing /bin/mv alarm3$alarmid.call /var/spool/asterisk/outgoing
Изменение и добавление user для обзвона лучше делать в скрипте. ИМХО

ААА и еще забыл сообшать нам потребуеться sox ну это так же для сбора фраз...

Код: Выделить всё

mkdir /var/spool/alarm chown nagios.asterisk /var/spool/alarm/ usermod -G nagcmd,asterisk nagios vim /usr/local/nagios/libexec/notify-by-phone.sh # (copy and paste above script) chown nagios.nagios /usr/local/nagios/libexec/notify-by-phone.sh chmod 750 /usr/local/nagios/libexec/notify-by-phone.sh vim /usr/local/nagios/etc/objects/contacts.cfg # (copy and paste above config) vim /usr/local/nagios/etc/objects/commands.cfg # (copy and paste above config) /etc/init.d/nagios reload vim /etc/asterisk/extensions.conf # (copy and paste above config) /etc/init.d/asterisk reload 
Выполняем все эти действия! Запускаем, * запускаем nagios/ Тушим любой host и после ждем звонка на мобильник или рабочий телефон.



В статье не стал указывать как настроить план набора для совершения звонка так как каждый его может собрать так как ему нравиться...

С Уважением
#2 15.12.2009 20:15
зачёт! :good:
#3 16.12.2009 10:21
добавлю от себя, что чекать астериск можно с помощью софтинки под названием Sipsak. Она позволяет посылать запросы INVITE и REGISTER, на основе ответов которых можно сообщать нагиусу о работоспособности или сбое астериска.
#5 18.12.2009 13:26
внесу свои 5 копеек.
также можно очень просто рисовать графики через munin
в дебиане apt-get install munin munin-node и на оф саите посмотреть дополнительные плагины к астеру
чекает:
количество пиров, количество каналов(делит по кодекам), и еще что то.

не центосе почти так же .

пример тут
http://nerdvittles.kicks-ass.net/munin/ ... l#Asterisk
#6 19.12.2009 12:47
Это все реализовано в cacti.
Можно рисовать почти все что нужно.
Могу так же отписать как это реализовал!
#7 19.12.2009 13:37
так же в cacti графики рисую..
#8 27.01.2010 16:56
опишите как реализованно в какти ... подумываю реализовать мониторинг
заранее спасибо
#9 28.01.2010 11:05
Вот скрипт для cacti там же есть Templates для cacti. Так же есть небольшая инструкция для установки скрипта и его настройки.
На * требуется добавить user для AMI в файле manager.conf

[user]
secret = user
read = command
write = command
deny = 0.0.0.0/0.0.0.0
permit = 192.168.0.0/255.255.255.0
#10 30.11.2011 19:35
я вот понять не могу, для аналоговой линии что делать? ...
Мы прослушать сообщение не сможем ... так как оно будет проговариваться в канал, как раз в то время, когда пойдёт звонок ...
#11 01.12.2011 09:23
Интересно тема развивается. Началось с того, как использовать Астериск в мониторинге, продолжилась тем, как мониторить сам Астериск, а сейчас опять вернулась к использованию астериска =)

В незерегистрированной версии tts движка в начале сгенерированного файла звучит предупреждение. Его можно отрезать =)

Код: Выделить всё

sox /tmp/hello.wav /tmp/hello_cut.wav trim 00:08