===== Wie man SMS mit Nagios verschicken kann =====
==== SMS-Provider ====
Ich nutze [[http://www.smstrade.de]]. Die haben eine recht einfache http-Schnittstelle.
Prinzipiell geht jeder, der eine http-Schnittstelle bietet.
==== Schnittstelle zum Gateway ====
https://gateway.smstrade.de/?key=$GATEWAY_KEY&to=$NUMBER&route=basic&concat=1&cost=1&message_id=1&count=1&message=$SMS_MESSAGE
==== Script ====
Das ganze in ein Script gegossen:
#!/bin/bash
GATEWAY_KEY=
MESSAGE=$1
SMS_MESSAGE=`php -r "echo urlencode('$MESSAGE');"`
NUMBER=$2
LOGFILE=/var/log/nagios.sms.log
date >> $LOGFILE
echo $SMS_MESSAGE >> $LOGFILE
wget -q -O - --no-check-certificate "https://gateway.smstrade.de/?key=$GATEWAY_KEY&to=$NUMBER&route=basic&concat=1&cost=1&message_id=1&count=1&message=$SMS_MESSAGE" >> $LOGFILE
Das script hat 2 Parameter:
- Nachricht
- Nummer an die die SMS gehen soll
Da die Nachricht url-encodiert werden muss und die Bash das nicht selbst kann, wird hier php dazu bemüht. Da auf dem Nagios-Server eh php für die Weboberfläche von Nagios installiert ist, sollte das kein Problem darstellen.
Die Ausgaben, werden in ein Logfile geschrieben:
- Datum
- url-encodierte Nachricht
- Status-Code von SMS-Trade siehe [[http://www.smstrade.de/pdf/SMS-Gateway_HTTP_API_v2_de.pdf]]
- Message-ID
- Kosten
- Anzahl der versendeten Nachrichten
==== Aufruf von Nagios ====
define command{
command_name notify-service-by-sms
command_line /usr/local/bin/send_nagios_sms.sh "$NOTIFICATIONTYPE$ for $SERVICEDESC$ at host $HOSTALIAS$/$HOSTADDRESS$: $SERVICESTATE$" $CONTACTPAGER$
}
define command{
command_name notify-host-by-sms
command_line /usr/local/bin/send_nagios_sms.sh "$NOTIFICATIONTYPE$ for $HOSTNAME$/$HOSTADDRESS$: $HOSTSTATE$" $CONTACTPAGER$
}
Aufgrund von "concat=1" beim SMS-Versand kann die Nachricht bis zu 1530 Zeichen lang sein. Es werden entsprechend mehrere SMS versendet.
define contact{
contact_name ello-sms
alias ello-sms
service_notification_period 24x7
host_notification_period 24x7
service_notification_options c,r
host_notification_options d,r,u
service_notification_commands notify-service-by-sms
host_notification_commands notify-host-by-sms
pager +49xxxxxx
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members ello,ello-sms
}
Ich hab für den SMS-Versand einen extra Kontakt definiert, dann ist man flexibeler. Man kann auch mehrere Kontakte definieren, die auch für unterschiedliche Dinge Nachrichten bekommen sollen.