====== 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 =
incoming = yes
pin =
baudrate = 19200
smsc = <49+TELEFONNUMMER_DER_SMS-ZENTRALE_SEINES_ANBIETERS>
Nach dem Einrichten nur noch ein Reload.
service smstools reload
==== SMS senden ====
sendsms ''
=== 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 =
regular_run_statfile =
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 guthaben file path\n" \
"-w warning value\n" \
"-c 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$