Aktionen

Zabbix SMS mit Gammu

Aus freie Dokumentation

Gammu und Gammu-SMSD

Gammu ist eine Software zum Steuern von Mobilfunkgeräten wie Handys und USB-GSM-Modems. Gammu unterstützt zahlreiche Endgeräte. Im Gegensatz zur nativen SMS-Modem-Schnittstelle vom Zabbix-Server unterstützt Gammu auch Geräte, die per Bluetooth oder mit proprietären Datenkabeln mit dem Hostsystem verbunden sind. Gammu bringt außerdem einen Serverdienst für den Versand von SMS mit, der ähnlich wie ein Mailserver Versandaufträge annimmt und asynchron über eine Warteschlange abarbeitet.
Eine einfache Möglichkeit, SMS zu verschicken, stellen die überall günstig erhältlichen UMTS-Modem-Sticks von HUAWEI dar. Fast alle Modelle arbeiten problemlos mit Gammu zusammen.

Gammu installieren und Modem testen

Benutzer von Debian und Ubuntu können Gammu aus den Standard-Repositorys installieren. Wer CentOS oder RHEL einsetzt, muss zuerst das RPMForge Repository" aktivieren.

Verhindern Sie, dass der HUAWEI als USB-Speichermedium erkannt wird. Die Software usb-modeswitch erledigt das für Sie. Installieren Sie ebenfalls Gammu und den SMS-Server.

apt-get install usb-modeswitch gammu gammu-smsd  #Debian, Ubuntu
yum install usb_modeswitch                       #CentOS, RHEL
Benutzern von Red Hat und CentOS haben keine andere Wahl, als Gammu aus den Quellen zu kompilieren. Über das Repository von RPMForge kann man zwar ein Paket namens gammu installieren, doch enthält dieses nicht den benötigten SMS-Server gammu-smsd. Die von der Gammu-Webseite verlinkten RPM-Pakete enthalten den SMS-Server ebenfalls nicht.

Stecken Sie das Modem ein und prüfen Sie, ob es vom Betriebssystem erkannt wurde.

# ls -l /dev/ttyU*
crw-rw---- 1 root dialout 188, 0 2010-10-25 14:41 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 2010-10-25 14:16 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 2010-10-25 14:16 /dev/ttyUSB2

Legen Sie eine Konfiguration /root/.gammurc an:

[gammu]
port=/dev/ttyUSB0
connection=at
name=huawei usb stick

Testen Sie, ob Ihr USB-Modem erkannt wird. Probieren Sie ggf. alle drei Ports /dev/ttyUSB0-2 durch.

root@zabbix:~# gammu networkinfo
Network state        : home network
Network              : 262 07 (O2, Germany), LAC 55AE, CID AF4
Name in phone        : "o2 - de"
Packet network state : home network
Packet network       : 262 07 (O2, Germany), LAC 55AE, CID AF4
Name in phone        : "o2 - de"
GPRS                 : attached

Nun übergeben Sie dem Modem die PIN der SIM-Karte mit dem Kommando gammu --entersecuritycode PIN 0000 und testen die SMS-Funktion mit gammu getallsms. Wenn Sie eine Ausgabe erhalten, können Sie mit echo "test"|gammu --sendsms TEXT +4917000000 eine SMS schicken. Wenn dieser Test erfolgreich war, können Sie Gammu-SMS-Server einrichten.

SMS-Server einrichten

Verwenden Sie nicht das Kommando gammu --sendsms als Alarmierungsskript für den Zabbix-Server. Das Versenden einer Kurznachricht kann u.U. länger als der maximale Timeout von 30 Sekunden dauern. Bedenken Sie außerdem, dass bei einem Fehler mehrere SMS gleichzeitig an verschiedene Personen gesendet werden. Um einen zuverlässigen SMS-Versand zu gewährleisten, brauchen Sie eine Warteschlange – eine Art Postausgang –, in der Nachrichten zwischengespeichert und dann nacheinander „abgearbeitet“ werden. Aus diesem Grund müssen Sie den Gammu-SMS-Server konfigurieren.
Öffnen Sie die Datei /etc/gammu-smsdrc mit einem Editor und tragen Sie den korrekten Modemport ein. Gegebenenfalls müssen Sie die verschiedenen Ports einzeln testen. Die restlichen Einstellungen können Sie unverändert lassen:

# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB1
connection = at
# Debugging
#logformat = textall

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = /var/log/gammu-smsd.log
PIN = ''
# Increase for debugging information
debuglevel = 0

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Starten Sie den SMS-Server und testen Sie, ob das Modem eine Verbindung zum Mobilfunknetz aufgebaut hat. Wenn dies der Fall ist, schicken Sie eine Nachricht.

service gammu-smsd start
gammu-smsd-monitor
echo "Testnachricht" | gammu-smsd-inject TEXT +4917XXXXXX

Mit den Standardeinstellungen darf nur der Root-User Nachrichten in die Warteschlange „schieben“. Ändern Sie mit dem Kommando chmod -R o+rwx /var/spool/gammu/ die Berechtigungen, damit auch die unprivilegierten Benutzer dies dürfen.

Gammu als Zabbix-Medium einrichten

Nun können Sie folgendes Skript in den Ordner für Alarmierungsskripte legen:

#!/bin/bash

LOG=/tmp/gammu-zabbix.log
NUMBER=$(echo $1|sed s/"^0"/"+49"/)
TEXT=$(echo $2|cut -b 1-160)
gammu-smsd-inject TEXT $NUMBER -len 160 -text "$TEXT" 2>&1 >>$LOG

Machen Sie das Skript ausführbar und testen Sie es:

chmod +x gammu-sms.sh
./gammu-sms.sh 017xxxxx "Hallo, ich bin eine SMS"

Nun können Sie das soeben erstellte Skript über die Zabbix-Weboberfläche als Medium einrichten.

Hinzufügen eines neuen Mediums

SMS-Server monitoren

Wenn Sie den Gammu-SMSD für den Versand von Kurznachrichten verwenden, sollten Sie diesen auch monitoren. Schließlich wollen Sie sich auf diesen Dienst verlassen.

Richten Sie Items mit den folgenden Keys ein:

  • proc.num[gammu-smsd] Prüft, ob der Dienst läuft.

Richten Sie einen Cronjob ein, der zum Beispiel alle 10 Minuten den Status des Servers per Zabbix-Sender an den Zabbix-Server meldet. Dazu können Sie folgendes Skript als Vorlage nutzen:

#!/bin/bash

#
# Report Status of gammu-smsd to Zabbix-Server using zabbix_sender
#

ZABBIX_SERVER=127.0.0.1
HOSTNAME=srv01.example.com
LOGFILE=/tmp/gammu2zabbix.log


PORT=$(awk -F "=" '/port/ {print $2}' /etc/gammu-smsdrc)
PORT_STATUS=$(gammu-detect -b|grep -c $PORT)
zabbix_sender -z $ZABBIX_SERVER -s $HOSTNAME -k gammu_smsd.portstatus -o $PORT_STATUS 2>&1 >>$LOGFILE

if [ $PORT_STATUS = 1 ]
then
    gammu-smsd-monitor --loops=1 --delay=1|\
    egrep "(Sent|Received|Failed|NetworkSignal)"|\
    awk -F':' '{print "- gammu_smsd." $1 $2}'|\
    zabbix_sender -z $ZABBIX_SERVER -s $HOSTNAME -v -i - 2>&1 >>$LOGFILE
fi

Damit können Sie dann die folgenden Item-Keys vom Typ „Zabbix-Trapper“ einrichten.

gammu_smsd.portstatus
gammu_smsd.Sent
gammu_smsd.Received
gammu_smsd.Failed
gammu_smsd.NetworkSignal

Wichtig ist, dass Sie einen Trigger einrichten, der gammu_smsd.portstatus überwacht. Dieser muss stets 1 sein.