Es handelt sich bei diesem Script um ein simples wrapper-tool um die Ausgabe des find Befehls an Nagios-ähnliche
Monitoring-Systeme zu übergeben.
Dieses Script wird vor allem dazu verwendet um zu überprüfen ob Dateien/Ordner mit einem bestimmten Namen, Typ und Alter
vorhanden bzw. nicht vorhanden sind. Es ist flexibel aufgebaut und kann auch für andere Zwecke eingesetzt werden.
Hilfe
Changelog
Installation/Voraussetzungen
Abhängigkeiten
Keine Paketabhängigkeiten, Script ist direkt in der Shell lauffähig: einfach Quellcode kopieren, und ausführbar machen (+x)
Dieses Script wurde auf bash für den Einsatz mit Icinga2 geschrieben und unter Ubuntu ausgiebig getestet. Es ist bei uns auch
auf Debian und CentOS im Einsatz. Standardprogramme wie test, find, awk und grep werden vorausgesetzt.
Der Quellcode ist einfach und kann beliebig an das eigene System angepasst werden.
PID file
Dieses Script erstellt ein PID file zur Laufzeit und es lässt sich keine zweite Instanz starten solange das PID file vorhanden
ist. Dies dient als Vorsichtsmaßnahme, falls der find zu lange braucht oder zu viele Systemressourcen verschlingt.
Um diesen Sicherheitsmechanismus zu umgehen einfach die entsprechende Funktion im Quellcode löschen.
Dokumentation
Arbeitsweise
Es handelt sich bei diesem Script um ein simples wrapper-tool um die Ausgabe des find Befehls an Nagios-ähnliche
Monitoring-Systeme zu übergeben.
Das Script führt folgenden Befehl aus:
Wenn eine Datei mit den Suchkriterien gefunden wurde, und nicht älter ist als ${warn} dann gibt das Script
${exit_file_found} zurück.
Wenn eine Datei mit den Suchkriterien gefunden wurde, und älter ist als ${warn} bzw ${crit}, dann
gibt das Script entsprechend 1=WARNING oder 2=CRITICAL zurück.
Wenn keine Datei gefunden wurde ist der exit code ${exit_file_not_found}
interne Scriptfehler werden gelogt nach ERR_LOG="/tmp/${PROGNAME}.error.log" mit Timestamp
timestamp_log=$(date "+%F %T") (kann im Quellcode angepasst werden)
Dieses Script wird verwendet um zu überprüfen ob Dateien/Ordner mit einem bestimmten Namen, Typ und Alter vorhanden sind.
Generell kann man mit Hilfe dieses Scriptes alles prüfen was man mit einem find Aufruf finden und filtern kann.
Kreativität und Anwendungsmöglichkeiten sind dabei kaum Grenzen gesetzt. Siehe auch Hilfe und manpage zu find.
Anmerkung: Der ausführende User muss Leseberechtigung für die Datei(en) besitzen, sonst werden sie vom Script nicht
gefunden.
Beispiel:
Automatische Datenimporte, die im 2 Stunden Intervall stattfinden und ein .csv file anlegen, sollen geprüft werden.
wenn das file älter ist als 2 std, dann ist das ein Indikator dafür dass der Import fehlgeschlagen ist bzw. der letzte
Import länger als 2 Stunden her ist
Anmerkung: mit -type d wird explizit nach Ordnern bis zu 2 Ebenen tief (maxdepth 2) gesucht,
alternativ könnte man auch noch eine Ebene tiefer gehen und nach den dumps selbst suchen
Beispiel:
Ein bestimmter Prozess legt ein .lock file im Dateisystem ab solange er läuft, um einen weiteren Aufruf zu unterbinden. Es soll
geprüft werden ob der Prozess aktuell läuft und eskaliert werden falls der Prozess zu lange braucht. (5min warning, 10min
critical)
Eine Anwendung legt im Fehlerfall ein Logfile an. Es soll geprüft werden ob ein solches file NICHT vorhanden ist, und als
Problem eskaliert werden falls es vorhanden ist.
Aufruf:
Um eine solche Prüfung zu realisieren muss man den entsprechenden Service/Check/Prüfung negieren, d.h. in
der Monitoring-Konfiguration umdrehen OK->CRITICAL und CRITICAL->OK Das heisst wenn das Script das file findet (mit OK aussteigt)
meldet das Monitoring dies als CRITICAL und umgekehrt. (Beispiel Icinga2: CheckCommand negate)
Alternativ
kann ab der Version v1.3 dieses Scriptes mit den parametern --exit_file_found und
--exit_file_not_found gearbeitet werden.