Friday, May 28, 2010

Use Asterisk for Nagios Notifications

LINK::
http://www.voip-info.org/wiki/view/Use+Asterisk+for+Nagios+Notifications

Use Asterisk for Nagios Notifications
Solution

This is a description about how to connect Nagios to Asterisk.
So you can receive automatic phone calls if Nagios reports some failure. Here is an example about you may hear:
Cepstral TTS Demo

There is also another script on-line that lets your Nagios box call thru the Asterisk Manager protocol (that way you can have your Nagios installation on a separate box). See http://www.pplusdomain.net/asterisk_notification.html for more information.

Components

* Operating system: Red Hat, CentOS, Fedora or Ubuntu


* Monitoring software: Nagios


* VoIP software: Asterisk


* Text-to-speech software: Cepstral TTS



Tested scenario


* Ubuntu 8.04


* Nagios 3.0.1


* Cepstral Swift 4.2.1


* Asterisk 1.4.17




Nagios configuration



Contacts
/usr/local/nagios/etc/objects/contacts.cfg


[...]
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_commands notify-service-by-phone
host_notification_commands notify-host-by-phone
email test@example.com
address2 SIP/1000
}
[...]





Notification command

vim /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$
}

[...]






Asterisk configuration

/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
[...]




Connection script

see also Asterisk auto-dial out
/usr/local/nagios/libexec/notify-by-phone.sh


#!/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: $1
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: alarm
Extension: s
Priority: 1
Set: alarmid=$alarmid" > alarm$alarmid.call

/bin/chmod 777 alarm$alarmid.call
/bin/mv alarm$alarmid.call /var/spool/asterisk/outgoing




Setup procedure

prerequisites: Nagios, Asterisk and Cepstral installed

as root:


apt-get install sox
apt-get install libsox-fmt-all
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




Test via command line


su nagios
/usr/local/nagios/libexec/notify-by-phone.sh SIP/1000 "hello world" first_test_id

No comments:

Post a Comment