SMS-Versand
Mit Nagios lassen sich auch SMS-Nachrichten versenden.
Es gibt verschiedene SMS-Modems die sich per Serieller- aber auch per USB-Schnittstelle anschließen lassen.
Hier einige Geräte:
Modell | Beschreibung |
---|---|
CEP CT63 | USB Modem USB/Seriell Starter KIT mit Quadband Antenne |
Teltonika E10 | USB Modem Nachfolger für Falcom Samba 55/56/75 |
Multi-Tech SF100-G-EU | SMS-Server Sendet und empfängt 10 SMS pro Minute |
Braintower SMS Gateway S | SMS-Server verschickt bis zu 15 SMS pro Minute |
Kentix AlarmManager PRO | SMS-Server Bis zu 30 MultiSensoren-RF und LAN und 5 KeyPad anschliessbar |
SMSTools
Mit den SMSTools lässt sich Linux um die SMS-Funktionalität erweitern.
SMSTools installieren
Installiert werden die SMSTools aus den Standard Ubuntu Installationsquellen.
apt-get install smstools
Nach dem Installieren verlinkt man noch das Kommandozeilenprogramm sendsms
, um damit z.B. Test-SMS zu versenden.
ln -s /usr/share/doc/smstools/examples/scripts/sendsms /usr/bin/sendsms chmod a+x /usr/share/doc/smstools/examples/scripts/sendsms
WICHTIG: Mit dieser Verlinkung und Änderung der Dateiberechtigungen können alle User diese Datei ausführen. Ggf. für bestimmte Usergruppen anpassen.
Nun passt man die Konfigurationsdatei noch an und kann danach sofort loslegen.
In der Konfigurationsdatei sind für den ersten einsatz nicht viele Sachen anzupassen.
loglevel = 5 [GSM1] device = <PFAD_ZU_DEVICE> incoming = yes pin = <PIN_DER_SIMKARTE> baudrate = 19200 smsc = <49+TELEFONNUMMER_DER_SMS-ZENTRALE_SEINES_ANBIETERS>
Nach dem Einrichten nur noch ein Reload.
service smstools reload
SMS senden
sendsms <TELEFONNUMMER> '<TEXT>'
Nagios Konfiguration
Befehl für SMS-Notication für Hosts:
sudo /usr/local/bin/sms_nagios.sh $CONTACTPAGER$ "$HOSTNAME$ ist $HOSTSTATE$ @$DATETIME$"
Befehl für SMS-Notication für Services:
sudo /usr/local/bin/sms_nagios.sh $CONTACTPAGER$ "$SERVICEDESC$ auf $HOSTNAME$ ist $SERVICESTATE$ @$DATETIME$"
Damit das Senden der SMS als nicht root Benutzer geht, ruft man den Befehl mit sudo auf. Man sollte hierfür einen Eintrag in der /etc/sudoers
setzten, damit nagios kein Password dafür benötigt.
sudoers-Eintrag:
# Fuer Nagios zum senden von SMS nagios ALL=(ALL) NOPASSWD: /usr/local/bin/sms_nagios.sh
Flood Protection
sms_nagios.sh:
#!/bin/bash FLOODNUM=30 EXPECTED_ARGS=2 E_BADARGS=65 if [ $# -ne $EXPECTED_ARGS ]; then echo "Usage: `basename $0` NUMBER TEXT" exit $E_BADARGS fi FLOODLOCK="/usr/local/nagios/var/sms-flood/FLOODLOCK_$1" NOW=$(date +%s) function smssenden { /usr/bin/sendsms $1 $2 date +%s > $FLOODLOCK } if [ ! -f $FLOODLOCK ]; then smssenden $1 $2 exit 0 fi LASTSEND=$(cat $FLOODLOCK) let DIFF=$NOW-$LASTSEND if [ $DIFF -gt $FLOODNUM ]; then smssenden $1 $2 exit 0 else let TIMELEFT=$FLOODNUM-$DIFF echo floodlock aktiv fuer $TIMELEFT Sekunden exit 1 fi
Guthaben-Check
Der smsd Daemon erstellt eine Datei, in die der er das abgefragte Guthaben hineinschreibt.
Die Konfigurationsparameter lauten:
regular_run_cmd = AT+CUSD=1,"*106#",15; regular_run_interval = 86400 regular_run_logfile = <PFAD> regular_run_statfile = <PFAD>
diese Datei kann von Nagios mit diesem Script abgefragt und bewertet werden.
#!/bin/bash # bash nagios plugin ### # Variables ### OK=0 WARNING=1 CRITICAL=2 UNKNOWN=-1 TO_RETURN=${OK} TO_OUTPUT='' # Print usage information and exit print_usage(){ echo -e "" \ "usage: ./$(basename $0) -f /tmp/guthaben -w 20 -c 30 \n" \ "-f <FILE> guthaben file path\n" \ "-w <EURO> warning value\n" \ "-c <EURO> critical value\n" \ "-h this help" \ "" && exit 1 } ### # Options ### # Loop through $@ to find flags while getopts ":hf:w:c:" FLAG; do case "${FLAG}" in f) # Guthaben File GUTHABEN_FILE="${OPTARG}" ;; w) # Warning value WARNING_VALUE="${OPTARG}" ;; c) # Critical value CRITICAL_VALUE="${OPTARG}" ;; h) # Print usage information HELP=1;; [:?]) # Print usage information print_usage;; esac done ### # Functions ### log_date(){ echo $(date +"%b %e %T") } error() { NOW=$(log_date) echo "${NOW}: ERROR: $1" exit 1 } warning() { NOW=$(log_date) echo "${NOW}: WARNING: $1" } info() { NOW=$(log_date) echo "${NOW}: INFO: $1" } # Do something get_cmd_output(){ #generate output cat ${GUTHABEN_FILE} | sed -E "s/.*Kontostand: ([0-9]{1,}).*/\\1/" || error "failed to run command" } ### # Program execution ### [ "${HELP}" ] && print_usage if [ ${GUTHABEN_FILE} ] && [ ${WARNING_VALUE} ] && [ ${CRITICAL_VALUE} ] then CMD_OUTPUT=$(get_cmd_output) else print_usage fi if [ "${CMD_OUTPUT}" ] && [ ${CMD_OUTPUT} -le ${CRITICAL_VALUE} ] then TO_RETURN=${CRITICAL} elif [ "${CMD_OUTPUT}" ] && [ ${CMD_OUTPUT} -le ${WARNING_VALUE} ] then TO_RETURN=${WARNING} elif [ "${CMD_OUTPUT}" ] && [ ${CMD_OUTPUT} -gt ${CRITICAL_VALUE} ] then TO_RETURN=${OK} else TO_RETURN=${UNKNOWN} fi if [ $TO_RETURN == ${CRITICAL} ] then TO_OUTPUT="CRITICAL" elif [ $TO_RETURN == ${WARNING} ] then TO_OUTPUT="WARNING" elif [ ${TO_RETURN} == ${OK} ] then TO_OUTPUT="OK" else TO_OUTPUT="UNKNOWN" fi TO_OUTPUT="${TO_OUTPUT} - Guthaben: ${CMD_OUTPUT} EUR; ($WARNING_VALUE/$CRITICAL_VALUE) | guthaben=${CMD_OUTPUT}" echo "$TO_OUTPUT"; exit $TO_RETURN;
Die Nagios Prüfbefehlszeile setzt sich somit wie folgt zusammen:
$USER1$/check_smsguthaben.sh -f $ARG1$ -w $ARG2$ -c $ARG3$