Prepaid-Guthaben für SMS-Benachrichtigung prüfen
1. Mai 2010 | Von Thorsten Robers | Kategorie: Monitoring | AvailabilityIn einem anderen Beitrag habe ich ja bereits einen Weg vorgestellt, mit dem das Prepaid-Guthaben von SIM-Karten mittels SMS getestet werden kann. Nun will ich noch einen anderen Weg vorstellen. Hierbei werde ich USSD einsetzen um an die Informationen über den aktuellen Guthabenstand zu gelangen.
USSD steht für Unstructured Supplementary Service Data und stellt ein Übermittlungsdienst für GSM-Netze dar. Bekannt ist dieser Dienst den meisten durch die etwas kryptischen Tastenkombinationen wie *100# oder dergleichen. Diese Tastenkombinationen sind ja auf einem Handy einfach zu verwenden, jedoch mit einem GSM-Modem, welches für die Benachrichtigung an ein Nagios-System angebunden ist, sieht es schon deutlich schwieriger aus. Hierbei machen wir uns die Funktionalität des SMSServerTools3 zu nutze.
Auch wenn die wesentliche USSD-Funktionalität erst ab der kommenden Version 3.1.7 zur Verfügung stehen wird, können wir USSD-Nachrichten auch bereits jetzt mit einem Trick verwenden. Hierzu wird mit einem einfachen Bash-Skript um die ServerTool-Funktionalität herum der Guthabenstand erhoben. In der kommenden Version wird es einen separaten Eventhandler für die Verarbeitung von USSD-Nachrichten geben, dieser Eventhandler wird mit dem Parameter eventhandler_ussd in die Server-Konfiguration aufgenommen. Der Eventhandler wird dann in Zukunft die Auswertung und Benachrichtigung an Nagios übernehmen. Bis dahin sollte auch der folgende Weg sehr zufriedenstellend funktionieren.
Zunächst werden die SMSServerTools konfiguriert, damit diese in regelmäßigen Abständen das entsprechende USSD-Kommando absetzt.
regular_run_cmd = AT+CUSD=1,"*100#",15; regular_run_interval = 60000 regular_run_logfile = /var/log/smsd_regular_run.log regular_run_statfile = /var/log/sms_guthaben
Mit regular_run_cmd wird das Kommando, welches regelmäßig ausgeführt werden soll, definiert. In meinem Fall ist es die Abfrage des Guthabens mittels *100# mit dem entsprechenden Befehlen für das Modem.
Das Intervall wird mit regular_run_interval definiert. Nun kommen wir jedoch noch nicht an die Ausgabe die uns das Netz des Mobilfunkbetreibers zur Verfügung stellt. Normalerweise wird es ja auch direkt auf dem Display des Handys ausgegeben. Die SMSServerTools stellen uns jedoch zwei Möglichkeiten zur Verfügung um die Antwort des Netzbetreibers in Dateien zu schreiben. Die erste Möglichkeit wird mittels regular_run_logfile definiert. Hierdurch werden die Ausgaben in eine Log-Datei geschrieben. Nach jedem Aufruf des Kommandos wird die Ausgabe an das Logfile angefügt. Hierdurch wird das Parsen der Log-Datei ein wenig erschwert, weil wir eine zunehmende Anzahl an Einträgen verarbeiten müssten.
Eine weitere Möglichkeit wird durch den Konfigurationsparameter regular_run_statfile definiert. In dieser Datei wird nur die letzte Meldung des Kommandos gespeichert. Daher verwende ich auch diese Datei im weiteren Verlauf um das aktuelle Guthabenkonto abzufragen.
Der Inhalt dieser Datei könnte wie folgt aussehen:
2010-05-01 19:31:03,5, GSM1: CMD: AT+CUSD=1,"*100#",15;: OK +CUSD: 0," Aktuelles Xtra-Guthaben: 11.24 EUR. Xtra SMS Option S: 5Ct. ins T-Mobile Netz.",0
Zunächst habe ich mir folgendes Skript geschrieben mit dem ich die Stat-Datei parse.
#!/bin/bash REGSTAT="/var/log/sms_guthaben" CUT="/bin/cut" CAT="/bin/cat" TR="/usr/bin/tr" if [ -f $REGSTAT ] then CONTENT=$( $CAT $REGSTAT | $CUT -d ':' -f 8 | $CUT -d "E" -f 1 | $TR -d "." | $TR -d " " ) if [ $CONTENT -lt 150 ] then echo "Guthaben: $CONTENT Cent|guthaben=$CONTENT;;150;0;" exit 1 else echo "Guthaben: $CONTENT Cent|guthaben=$CONTENT;;150;0;" exit 0 fi else echo "Guthaben-File not found" exit 2 fi exit 0
Mit diesem Skript wird die Datei geparst, der Guthabenstand extrahiert und anschließend mit einem Sollwert verglichen. Anschließend wird eine Ausgabe – inklusive Performancedaten – für Nagios vorbereitet. Das Parsen des Guthabenstandes ist an die jeweiligen Mobilfunkbetreiber anzupassen. In meinem Fall handelt es sich um eine T-Mobile XtraCard.
Nun muß nur noch die Nagios-Service und -Command-Definition erstellt werden. Ich rufe als Kommando hierbei einfach direkt das Skript ohne Parameter auf. Es ließe sich jedoch auch schnell an variable Schwellwerte anpassen.