Unter bestimmten Umständen ist es besser Nagios Meldungen per Telefonanruf zu erhalten. Vor allem in Zeiten von Telefonflatrates ist eine Meldung so günstiger als eine SMS. Damit dies unter Linux funktioniert, können einige freie Anwendungen zu einem einfachen Shell Script kombiniert werden, die genau diesen Zweck erfüllen. Zur Einrichtung benötigt man linphonec für den Aufbau des Telefonats, Expect zur Steuerung von linphonec und text2wave vom festival Paket für die Sprachsynthese.
Installation unter Debian
Die Installation unter Debian gestalltet sich wie immer mit apt recht komfortabel und einfach.
apt-get install expect festival linphonec-nox |
Linphonec
linphonec ist ein freier Kommandozeilen-Client für das SIP Protokoll. Nach der Installation muss man noch eine funktionierende Konfigurationsdatei erstellen.
Beispielkonfiguration linphonec für sipgate
natürlich kann hier ein beliebiger Provider verwendet werden. Auch die Anbindung an einen eigenen SIP Server ist problemlos möglich.
[net] con_type=3 use_nat=1 nat_address= download_bw=0 upload_bw=0 firewall_policy=2 stun_server=stun.sipgate.net:10000 [sip] username= hostname=sipgate.de sip_port=5060 use_registrar=1 as_proxy=0 expires=900 registrar=sip:sipgate.de passwd= addr_of_rec=sip:@sipgate.de guess_hostname=1 contact=sip:@sipgate.de inc_timeout=15 use_info=0 use_ipv6=0 default_proxy=-1 [rtp] audio_rtp_port=5004 video_rtp_port=9078 audio_jitt_comp=60 video_jitt_comp=60 [sound] dev_id=2 rec_lev=100 play_lev=80 source=m local_ring=/usr/share/sounds/linphone/rings/oldphone.wav remote_ring=/usr/share/sounds/linphone/ringback.wav playback_dev_id=ALSA: default device ringer_dev_id=ALSA: default device capture_dev_id=ALSA: default device echocancelation=0 [video] enabled=0 show_local=0 display=0 capture=0 [audio_codec_0] mime=PCMU rate=8000 enabled=1 [audio_codec_1] mime=GSM rate=8000 enabled=1 [audio_codec_2] mime=PCMA rate=8000 enabled=1 [audio_codec_3] mime=speex rate=8000 enabled=1 [audio_codec_4] mime=speex rate=16000 enabled=1 [audio_codec_5] mime=1015 rate=8000 enabled=1 [address_book] entry_count=0 [video_codec_0] mime=theora rate=90000 enabled=1 [video_codec_1] mime=H263-1998 rate=90000 enabled=1 [video_codec_2] mime=MP4V-ES rate=90000 enabled=1 [video_codec_3] mime=x-snow rate=90000 enabled=1 [auth_info_0] username= passwd= realm="sipgate.de" |
Die fertige Konfigurationsdatei speichert man an einem Ort, der später für den Nagios Benutzer erreichbar und lesbar ist.
sip-talk shell script
Das folgende shell script sip-talk übernimmt die Anfragen von Nagios und erzeugt eine entsprechende Sprachnachricht, die mit Hilfe von linphhonec an eine Telefonnummer übertragen wird.
#!/bin/bash # sip-talk - send a voice message # 12.01.2009 fk@kworx.de # config SIPREALM=sipgate.de # used for uri sip: @SIPREALM LINPHONERC=./.linphonerc # path to linphonerc CALLDURATION=60 # max call duration in seconds TMPDIR=/var/tmp LINPHONEC=/usr/bin/linphonec EXPECT=/usr/bin/expect TEXT2WAVE=/usr/bin/text2wave # end config function usage(){ echo "usage: $0 -r -m \"<message>\"" exit 1 } if [ $# -lt 2 ]; then usage fi while getopts "r:m:" OPTION; do case $OPTION in r) RECIPIENT="sip:$OPTARG@$SIPREALM" ;; m) MESSAGE="$OPTARG" ;; *) usage ;; esac done # check values if [ "$RECIPIENT" = "" ]; then usage fi if [ "$MESSAGE" = "" ]; then usage fi # check binaries if [ ! -x "$LINPHONEC" ]; then echo "$LINPHONEC not found!" exit 1 fi if [ ! -f "$LINPHONERC" ]; then echo "$LINPHONERC not found!" exit 1 fi if [ ! -x "$EXPECT" ]; then echo "$EXPECT not found!" exit 1 fi if [ ! -x "$TEXT2WAVE" ]; then echo "$TEXT2WAVE not found!" exit 1 fi DATE=`date +%y%m%d%k%M|sed 's/ /0/'` # generate message MSGWAV=$TMPDIR/$DATE.$RANDOM.wav $TEXT2WAVE -o $MSGWAV -f 8000 << EOF $MESSAGE EOF # execute linphonec while [ -f $TMPDIR/linphonec ]; do sleep 10 done touch $TMPDIR/linphonec $EXPECT << EOF spawn $LINPHONEC -c $LINPHONERC expect "linphonec> " {send "soundcard use files\r"} expect "linphonec> " sleep 5 send "call $RECIPIENT\r" expect "linphonec>; Connected." sleep 1 send "play $MSGWAV\r" sleep $CALLDURATION send "quit\r" EOF # cleanup rm -f $MSGWAV rm -f $TMPDIR/linphonec |
Nagios Konfiguration
In der Nagios Konfiguration müssen noch die Kommandos für die Benachrichtigungen(notifications.cfg) angelegt bzw. konfiguriert werden.
Danach können notify-by-voice und host-notify-by-voice wie gewohnt in der Konfiguration genutzt werden.
define command{ command_name notify-by-voice command_line -r $CONTACTPAGER$ \ -m '"Service: $SERVICEDESC$ Host: $HOSTNAME$ Address: $HOSTADDRESS$ State: $SERVICESTATE$ Info: $SERVICEOUTPUT$ Date: $LONGDATETIME$"' } define command{ command_name host-notify-by-voice command_line -r $CONTACTPAGER$ \ -m '"$NOTIFICATIONTYPE$: $HOSTNAME$ is $HOSTSTATE$ Info: $HOSTOUTPUT$ Time: $LONGDATETIME$"' } |
5 Antworten auf „Nagios Sprachmeldungen mit SIP“
Hi kworx,
Das Skript hat mir verdammt viel geholfen,
allerdings musste ich bei der notifications.cfg noch ’sip-talk‘ bei command_line einfügen.
Was ich bei mir noch angepasst habe ist
touch $TMPDIR/linphonec
/usr/bin/expect < set timeout $CALLDURATION
$EXPECT <; terminated.“
timeout
}
Was bewirken sollte (scheint zumindest so) dass wenn der Angerufene auflegt nagios den nächsten Anruf tätigen könnte während gleichzeitig nach den 60 Sekunden das Gespräch automatisch beendet wird.
Gruß,
Robert
hm,
da ich offensichtlich zu blöd zum richtigen Kommentieren bin hier der ganze Code-Abschnitt den ich meine ^^;
touch $TMPDIR/linphonec
/usr/bin/expect < set timeout 60
$EXPECT < “ {send „soundcard use files\r“}
expect „linphonec> “
sleep 5
send „call $RECIPIENT\r“
expect „linphonec>; Connected.“
sleep 1
send „play $MSGWAV\r“
expect {
„linphonec>; terminated.“
timeout
}
sleep 5
send „quit\r“
EOF
Prima Script, das mir in der Vergangenheit schon sehr geholfen hat. Nun aber ein Problem: ich bin von Ubuntu 10.04LTS auf 12.04LTS umgestiegen. Nach dem Start des Skripts werden die send-Befehle im EXPECT-Abschnitt nur sehr langsam gesendet. Auf der Konsole sehe ich im Sekundenabschnitt einen Buchstaben nach dem anderen folgen. Beim Ausführen von „send „call $RECIPIENT\r““ ist nach dem ersten Digits Schluss und nichts passiert mehr.
ich vermute, dass das Problem mit der aktuellen Version von linphonec (3.3.2) zusammenhängt, denn in der alten Ubuntu-Version funktionierte es noch.
# ./call_out.sh -r 0******** -m „TEST“
spawn /usr/bin/linphonec -c ./linphone.cfg
ALSA lib conf.c:4687:(snd_config_expand) Unknown parameters 0
ALSA lib control.c:951:(snd_ctl_open_noupdate) Invalid CTL default:0
Ready
Warning: video is disabled in linphonec, use -V or -C or -D to enable.
linphonec> soundcard use files
Using wav files instead of soundcard.
linphonec> call sip:0
Über einen Tipp würde ich mich sehr freuen.
Gruß
Peter
Scheint mir eher ein expect Problem zu sein.
Funktioniert linphonec bei manueller Ausführung?
linphonec -c LINPHONERC
Danach beim linphone Prompt:
soundcard use files
call sip:NUMMER@PROVIDER
Wenn es klingelt, dran gehen und ein beliebiges WAV abspielen:
play /PFAD/WAV
Hi,
irgendwo habe ich einen Fehler gemacht. Was muss ich alles an den Scripten bearbeiten und ändern?
Gruß
Andreas