Ordner-Änderungsdatum in Nagios überwachen
Ich hatte den Anwendungsfall, dass ich eine Datensicherung, welche in einen Dateisystemordner erfolgt (Backup to disk) mit Nagios überwachen sollte. Bei jedem Backup ändert sich auch das Änderungsdatum des Ordners. Es liegt also nahe, diesen Wert in Nagios zu überwachen. Nachfolgend mein VBScript check_folderage.vbs, welches genau diesen Zweck erfüllt.
check_folderage.vbs erstellen
Kopiere nachfolgenden Inhalt in die Datei check_folderage.vbs
'
' check_folderage.vbs
'
' Version 1.0
'
' Copyright by Flo Krug
'
' Comment: Nagios Plugin to check the age of a folder and if it exceeds the given warning or critical treshhold nagios generates an event
'
' Parameters
' -w <warning_hours> (required): value in hours when nagios/this script generates a warning if sophos av was not updated
' -c <critical_hours> (required): value in hours when nagios/this script generates a critical if sophos av was not updated
' -f <folder> (required): folder to check the last changed date
Dim arg_warning, arg_critical, arg_folder, arg_counter
Dim strSophosAvFile, objSophosAvFile
Dim strFolderDate, strWarningDate, strCriticalDate, strCurrentDate
' Parameters -w, -c and -f required
Set args = WScript.Arguments
If args.Count < 6 Or args.Count > 6 Then
WScript.Echo "UNKNOWN: wrong parameters. Use: check_folderage.vbs -w <warning_hours> -c <critical_hours> -f <folder>"
WScript.Quit (3)
End If
arg_counter = 0
For Each arg In args
arg_counter = arg_counter + 1
If LCase(arg) = "-w" And arg_counter < args.Count Then
arg_warning = args(arg_counter)
End If
If LCase(arg) = "-c" And arg_counter < args.Count Then
arg_critical = args(arg_counter)
End If
If LCase(arg) = "-f" And arg_counter < args.Count Then
arg_folder = args(arg_counter)
End If
Next
' We have to check if the folder we want to check exists
Set wshShell = CreateObject( "WScript.Shell" )
Set objFSO = Createobject ("Scripting.FileSystemObject")
If objFSO.FolderExists(arg_folder) = False Then
WScript.Echo "UNKNOWN: Folder " & arg_folder & " not found"
WScript.Quit (3)
End If
' Now we need the last modified date and compare it with the current time
Set objFolder = objFSO.GetFolder("" & arg_folder & "")
strFolderDate = objFolder.DateLastModified
strWarningDate = objFolder.DateLastModified + (arg_warning/24)
strCriticalDate = objFolder.DateLastModified + (arg_critical/24)
strCurrentDate = Now
' Compare last update time, warning and critical date and generate nagios event
If strCriticalDate <= strCurrentDate Then
WScript.Echo "CRITICAL: folder " & arg_folder & " last updated on " & strFolderDate & " (WARNING on " & strWarningDate & ", CRITICAL on " & strCriticalDate & ")"
WScript.Quit (2)
End If
If strWarningDate <= strCurrentDate Then
WScript.Echo "WARNING: folder " & arg_folder & " last updated on " & strFolderDate & " (WARNING on " & strWarningDate & ", CRITICAL on " & strCriticalDate & ")"
WScript.Quit (1)
End If
WScript.Echo "OK: folder " & arg_folder & " last updated on " & strFolderDate & " (WARNING on " & strWarningDate & ", CRITICAL on " & strCriticalDate & ")"
WScript.Quit (0)
Zum Testen rufe das Script über die Eingabeaufforderung auf, Beispiel:
check_folderage.vbs -f C:\mein\ordner -w 30 -c 60
Im Beispiel gibt das Script WARNING zurück, sobald der Ordner bzw. dessen Inhalt spätestens nach 30 Stunden nicht geändert wurde, nach 60 Stunden wird ein Critical ausgelöst.
Einbindung in Nagios
Bitte lies dir den Artikel Backup Exec in Nagios überwachen durch und verfahre ähnlich wie dort beschrieben. Das Prozedere ist nahezu identisch.