Plugins zu Entwickeln für das Monitoring-System Nagios ist mit ein kleinwenig Scripting-Erfahrung kein grosses Problem mehr, wenn man weiss, wo man was ablegen soll. An folgendem Beispiel möchte ich die 3 einfachen Schritte festhalten. So stand ich letzthin vor der Aufgabe die Zeit zu messen, wie lange es braucht, um eine Seite innerhalb eines per Eingabeformular geschützten Bereiches, zu erreichen. Eigentlich gut möglich via CURL – habe ich mir gedacht! Es gibt ja Optionen wie –form oder –data, doch die scheinen auf das ASP.NET und Telerik-spezifische Formular nicht anzuspringen. Also muss der Weg über ein Cookie her mit der Option –cookie.
Doch wie sieht das Plugin nun aus?`
Von Aussen soll dem Plugin ein Cookie, eine URL und die Zeitgrenzen für eine Warnung und einen Error zum abfragen übergeben werden. Wer Scripten kann weiss natürlich das dazu die Variablen $1 – $4 genutzt werden. So kommen wir mal zu einer kleinen Überprüfung und der Übergabe an CURL:
if [ $# -lt 4 ]; then
echo "Please use check_site COOKIE URL WARNING ERROR"
exit 2
fi
warning=$(($3*1000))
error=$(($4*1000))
curl --cookie "ATUH=$1" "$2" -s > /tmp/store.tmp
Doch jetzt soll ja auch noch die Zeit gemessen werden. Also speichern wir vor und nach dem Abrufen der Seite jeweils einen Timestamp:
first=`echo $(($(date +%s%N)/1000000))` warning=$(($3*1000)) error=$(($4*1000)) curl --cookie ".AUTH=$1" "$2" -s > /tmp/store.tmp last=`echo $(($(date +%s%N)/1000000))` need=$(($last-$first))
Und damit hat man schon fast die ganze Arbeit gemacht. Nun noch ein bisschen querchecken und die passenden Ergebnisse ausgeben:
if [ $need -gt $error ]; then
echo "needed `bc -l <<< "scale=3; $need/1000"` seconds for a response"
exit 2
fi
if [ $need -gt $warning ]; then
echo "needed `bc -l <<< "scale=3; $need/1000"` seconds for a response"
exit 1
fi
echo "needed `bc -l <<< "scale=3; $need/1000"` seconds for a response"
exit 0