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
*********************************
check_find_file_age
*********************************
Script for using "find" command and generate nagios-compatible output
Usage: check_find_file_age.sh -f {folder} -w {warn} -c {crit}
arguments:
-f --folder {search-folder}
-w --warn {warning} age in minutes
-c --crit {critical} age in minutes
optional arguments:
--maxage find -mmin -{warn/crit} (default)
--minage find -mmin +{warn/crit}
--ignore ignore all results younger/older this value
Note: used to exclude false positives, for example
if you got very old files in the check folder you want to ignore
example: warn and crit in minutes
1 day = 1440
7 days = 10080
optional arguments:
Note: these arguments will be passed to find command, and use the same syntax
-n --name {filename} regex for find
-t --type set -type for find, like "d" (directories only)
-maxdepth set maxdepth for find (default: 1)
-arg --arg any other arguments, see "man find"
example: -arg "-size 0c"
--exit_file_found exit_code for Script if file was found (default:0)
--exit_file_not_found exit_code for Script if file was not found (default:2)
Note: exit_codes have to be one of: 0 1 2
optional arguments:
--okstring optional String to add to output for OK state
--notokstring optional String to add to output for not-OK state
Note: mask the strings in " "
-h --help shows this help message
-V --version prints version and release info
Nagios compatible exit codes: 0=OK;1=WARN;2=CRIT;3=UNKNOWN
This plugin generates no perfdata.
***********************************************************************
Thank you for using this script!
For more infos on our services please visit www.admin-box.de
Changelog
v1.0 2016-12-07 initial release
v1.1 2017-02-13 added option to search for folders only
v1.2 2017-12-19 public release (reworked code, added comments and documentation)
v1.3 2018-03-01 added optional parameters --minage and --maxage (default)
added optional strings to output
added optional parameters for find
exit_codes as parameter for file found/not found
v1.3.1 2018-03-07 added --ignore parameter to exclude false positives that are too old to check
v1.3.2 2018-05-23 bugfixes exit_level
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.
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)
OK - "/tmp" not older than 30 min
WARNING - "/sicherung" older than 10 min
CRITICAL - "/backup/mysql.dump" not found
Anwendungsbeispiele
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.
Download
#############################
### Copyright and License ###
#############################
#
# Copyright (C) 2016 Anton Daudrich
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program.
# If not, see http://www.gnu.org/licenses/.
#
#############################