This site runs best with JavaScript enabled.

Nagios und Asterisk (Nagios lernt sprechen)

Torsten Uhlmann

March 01, 2006

AGYNAMIX, Blogger, Java, Scala, Javascript, Typescript, ReactJS

Photo by Torsten Uhlmann

newsprogramming

Da wir ja bei uns eine Asterisk-Telefonanlage im Einsatz haben (Hint: wir verkaufen die auch!) und außerdem ein Nagios-Monitoringsystem (NMS: Network Management System), lag die Idee ja nahe, Nagios über Asterisk reden zu lassen. Dazu habe ich folgendes gemacht: Im Nagios ein neues Kommando notify-by-asterisk angelegt, dass im entsprechenden Kontakt angegeben wird. Das Kommando selbst ist recht simpel:

'notify-by-asterisk' command definition define command{ command_name notify-by-asterisk command_line /usr/local/nagios/bin/asterisk_call.sh $NOTIFICATIONTYPE$ $SERVICEDESC$ $HOSTALIAS$ $SERVICESTATE$ $SERVICEOUTPUT$ }

Das Skript asterisk_call.sh ist ein einfaches Shellskript, das zuerst einen Textstring erzeugt, diesen dann durch Festival jagt (erzeugt eine Wav-Datei) und anschließend eine Asterisk-Call-Datei erzeugt, die dann in das outgoing-Verzeichnis von Asterisk kopiert wird. Asterisk nimmt die Datei, generiert einen Anruf und spielt die wav-Datei ab.

103-0391_img.jpg

Die Lösung funktioniert auf unserem System. Damit sie auch woanders läuft müssen noch ein paar Einstellungen vorgenommen werden:

  • visudo ausführen: Der Nagios-User (bei mir: nagios) braucht das Recht, eine Datei als User www-data (unter dem läuft Asterisk bei mir. Ist der Web-User weil ich zusätzlich noch AMP im Einsatz habe und hier gibt es Rechtekonflikte, wenn AMP als Webapplikation nicht auf die Asteriskdateien zugreifen darf.) in das Asterisk outgoing-Verzeichnis (/var/spool/asterisk/outgoing) zu dürfen:

  • nagios ALL = (www-data NOPASSWD:) /bin/cp

  • Die Datei asterisk_call.sh anpassen und für nagios ausführbar in /usr/local/nagios/bin (oder woanders, dann aber das Nagios-Kommando anpassen) zur Verfügung stellen:

#!/bin/sh

NOTIFICATIONTYPE=$1 SERVICEDESC=$2 HOSTALIAS=$3 SERVICESTATE=$4 SERVICEOUTPUT=$5

OUT_STR=/usr/bin/printf "%b" "This is the Nagios Monitoring System sending a \ $NOTIFICATIONTYPE notification. The Service $SERVICEDESC at host $HOSTALIAS \ is in state $SERVICESTATE. This is the service output: $SERVICEOUTPUT."

play_file="/tmp/asterisk_nagios" bf="$play_file.wav" cf="$play_file.call" lf="$play_file.log"

CHANNEL="SIP/(peer)/(no to dial)" CALLER_ID="Nagios " echo "$OUT_STR" > $lf echo "$OUT_STR" | /usr/bin/text2wave -scale 1.5 -F 8000 -o $bf echo "Channel: $CHANNEL" > $cf echo "WaitTime: 60" >> $cf echo "MaxRetries: 3" >> $cf echo "CallerId: $CALLER_ID" >> $cf echo "Application: Playback" >> $cf echo "Data: $play_file" >> $cf sudo -u www-data cp $cf /var/spool/asterisk/outgoing rm $cf

Das wars. Festival ist nur als englische Version erhältlich (es gibt zwar deutsche Anpassungen, hab ich aber noch nicht ausprobiert), es gibt jedoch unter http://www.cepstral.com sehr gut klingende englische und deutsche Stimmen- die kosten so um die 30$. Viel Spaß.

Share article