====== SMS-Alarmierung mit YAPS ====== ==== YAPS Installation ISDN ==== YAPS ist ein Tool zum Versenden von SMS über Modem bzw. eine ISDN-Karte. Als ISDN-Karte empfiehlt sich: * AVM Fritz!PCI v2.0 ISDN (rev 02) Damit eine ISDN-Karte auch funktioniert, muss noch das Paket "isdnutils" installiert werden. apt-get install isdnutils **// Wichtig!!! Durch die Installation des Paketes isdnutils wird die "default route" auf die ISDN-Karte konfiguriert. Um dies zu korrigieren, bitte wie im Artikel [[Isdnutils]] beschrieben vorgehen.//** \\ Das Tool ''yaps'' ist im Downloadbereich unter: http://www.jbackes.de/downloads/yaps/yaps-0.96.tar.gz zu finden. Hier liegt auch ein bereit kompiliertes yaps-Binary http://www.jbackes.de/downloads/yaps/yaps. Sollte dies nicht funktionieren, kann über das tar.gz wie folgt neu kompiliert werden. make depend make make install Die Binär-Datei '''yaps''' wird nach /usr/sbin/ kopiert. cp yaps /usr/sbin Seine Konfiguration holt YAPS aus der Datei ''/etc/yaps.rc''. Eine vorkonfigurierte yaps.rc gibt es ebenfalls im Downloadbereich unter: http://www.jbackes.de/downloads/yaps/yaps.rc cp yaps.rc /etc/ \\ Außerdem muss der User "nagios" in der Gruppe "dialout" sein, damit er auch auf das ISDN-Interface zugreifen darf. adduser nagios dialout '' Wichtig:
Ab Ubuntu Version 9.10 funktioniert der oben beschriebene Weg nicht mehr. Aus noch ungeklärten Gründen lässt sich zwar die SMS versenden, yaps bleibt aber beim "hangup" stehen, so dass das Interface gesperrt ist und keine weitere SMS mehr versendet werden kann. Als "workaround" kann mit den CAPI-Treibern gearbeitet werden.'' ==== YAPS Installation CAPI-Treiber ==== Um die Fritzcard über CAPI mit YAPS ansprechen zu können, müssen folgende Pakete installiert werden: * capiutils * build-essential (damit kompiliert werden kann) * linux-headers- apt-get install capiutils build-essential linux-headers-2.6.32-24-generic Mit den capiutils wird eine Modul-Blacklist erzeugt, welche verhindert, dass die hisax-Treiber geladen werden. Zusätzlich muss hier noch der Eintrag ''blacklist avmfritz'' hinzugefügt werden.
Die ''/etc/modprobe.d/blacklist-capiutils.conf'' hat somit folgenden Inhalt: blacklist hisax blacklist hisax_fcpcipnp blacklist avmfritz Nun muss ein neues Kernel-Modul (fcpci) kompiliert und ins System integriert werden. Eine vorkompilierte Version (fcpci.ko) sowie die Quellcode (fritz-fcpci-src-2.6.31_untested.tar.bz2) finden sich im Download-Bereich. wget http://www.jbackes.de/downloads/nagios/fcpci.ko wget http://www.jbackes.de/downloads/nagios/fritz-fcpci-src-2.6.31_untested.tar.bz2 Das fertige Modul muss dann natürlich noch an die passende Stelle kopiert werden und dem System bekannt gegeben werden. Geladen wird es beim Systemstart automatisch, solange die blacklist wie oben angegeben gepflegt ist. mkdir /lib/modules/`uname -r`/kernel/extras cp fcpci.ko /lib/modules/`uname -r`/kernel/extras depmod -a Zur Nutzung von CAPI muss nach einem Systemstart noch der Command ''capiinit start'' ausgeführt werden. Dieses kann in das capiutils-Startskript eingebunden werden. Außerdem muss eine "CAPI-enabled" Version von YAPS genutzt werden (yaps-0.96.c4). Ein entsprechendes tar und eine vorkompilierte Version (yaps.capi) finden sich im Download-Bereich. Die ebenfalls im Download-Bereich liegende ''yaps.rc.capi'' kann benutzt werden. Unterschied zur sonst benutzten ''yaps.rc'' sind lediglich die beiden ''device''-Einträge. device capi/1/ Natürlich muss '''' noch durch die MSN des genutzten ISDN-Anschlusses ausgetauscht werden. wget http://www.jbackes.de/downloads/nagios/yaps-0.96.c4.tar.gz wget http://www.jbackes.de/downloads/nagios/yaps.capi wget http://www.jbackes.de/downloads/nagios/yaps.rc.capi cp yaps.capi /usr/sbin/yaps chmod 755 /usr/sbin/yaps cp yaps.rc.capi /etc/yaps.rc Außerdem muss der User "nagios" in der Gruppe "dialout" sein, damit er auch auf das ISDN-Interface zugreifen darf. adduser nagios dialout ==== YAPS Einbindung in Nagios ==== In den contacts.cfg der wird festgelegt, wer und bei welchem Vorfall benachrichtigt wird. define contact{ contact_name name alias Vorname Nachname service_notification_period 24x7 host_notification_period 24x7 host_notification_options n,d,u,r service_notification_options n,w,u,c,r service_notification_commands notify-by-sms host_notification_commands host-notify-by-sms pager 0123456789 } Unter Ubuntu werden standardmäßig unter ''/etc/nagios-plugins/config'' die commands definiert. Hier muss definiert werden, (z.B.:in einer eigenen Datei ''jb_alarmierung.cfg'') was per SMS an den Pager/das Handy geschickt wird. ####### SMS Alarmierung ############### # 'notify-by-sms' command definition define command{ command_name notify-by-sms command_line PFAD/yaps $CONTACTPAGER$ "$NOTIFICATIONTYPE$: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$" } # 'host-notify-by-sms' command definition define command{ command_name host-notify-by-sms command_line PFAD/yaps $CONTACTPAGER$ "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$/$HOSTADDRESS$ is $HOSTSTATE$" } === Besonderheit in großen Umgebungen === Bei großen Umgebungen, kann es vorkommen, dass mehrere SMS zeitgleich versendet werden sollen. Hier kann es dann zu Problemen können, das jeweils nur ein Prozess die ISDN-Karte nutzen kann. Um dies abzufangen und gleichzeitig eine Protokollierung über die versendeten SMS/Pager-Nachrichten zu erhalten, wird hier nicht direkt das Binary 'yaps' sondern ein selbstgeschriebenes Shell-Skript 'yaps.sh' aufgerufen. Für den Fall, dass das die ISDN-Karte belegt sein sollte, ist ein retry intervall von 10 Versuchen in 10sec Abstand definiert. \\ ''yaps.sh:'' #!/bin/sh DATE=`date +%b" "%d" "%T` LOGFILE="/opt/nagios/nec/var/log/pager.log" ptarget=$1 pmsg=$2 declare -i RENUM=0 declare -i i=0 /usr/bin/yaps -C /etc/yaps.rc $ptarget "$pmsg" RC=$? while [ $i -lt 10 ]; do if [ "$RC" = "0" ]; then i=10 else DATE=`date +%b" "%d" "%T` echo "waiting for device" echo "$DATE - -> waiting for device" /bin/sleep 10 /usr/bin/yaps -C /etc/yaps.rc $ptarget "$pmsg" RC=$? RENUM=$i+1 echo "$DATE - RETRY $RENUM -> $ptarget - $pmsg" >> $LOGFILE fi; i=$i+1 done DATE=`date +%b" "%d" "%T` if [ "$RC" = "0" ]; then echo "$DATE - SUCCESS -> $ptarget - $pmsg" >> $LOGFILE else echo "$DATE - ERROR -> $ptarget - $pmsg" >> $LOGFILE fi; exit $RC \\ --- //[[mail@jbackes.de|JB]] 2008/11/27 17:35//