check_find_file_age.sh

Quellcode herunterladen

Name

Script name: check_find_file_age
Author: Anton Daudrich
Company: ADMIN INTELLIGENCE GmbH
Version: v1.3.2
Release date: 2018-05-23

Beschreibung

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.


Das Script führt folgenden Befehl aus:

    
find ${folder} -maxdepth ${maxdepth} -mmin -${warn} -type ${type} -name ${name}
    
  
  • 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)


Kommandozeilenparameter

siehe Hilfe


Exit Codes

Nagios-kompatible exit codes: 0=OK;1=WARNING;2=CRITICAL;3=UNKNOWN
default exit code: 3=UNKNOWN


Perfdata

Dieses Script generiert keine Perfdaten.


Beispielausgabe

    
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
Aufruf:

check_find_file_age.sh –f /dataimport -type f -name „*.csv“ -w 120 –c 150



Beispiel:

Regelmäßige MySQL dumps die in dynamisch erzeugten Unterordnern 2 Ebenen tief abgelegt werden, sollen auf ihre Aktualität geprüft werden.

  • Ordnername mit regex angeben, type und maxdepth parameter verwenden
Aufruf:

check_find_file_age.sh –f /mysqldumps -maxdepth 2 -type d -name „mysqldump_2018-*“ -w 1440 –c 2880


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)


Aufruf:

check_find_file_age.sh –f /tmp -type f -name „prozessname.lock“ -w 5 –c 10



Beispiel:

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/.
#
#############################
    
  
Quellcode herunterladen

Feedback

Haben Sie Fragen zu diesem Script oder Plugin?
Sie möchten Verbesserungsvorschläge einbringen oder haben Fehler gefunden?
Kontaktieren Sie uns gerne!

Kontaktformular