Überwachung vom Windows Backup mit Zabbix
Checkliste Voraussetzungen:
Windows
Windows Backup Sicherung mit wbadmin.msc
Windows 2008R2
Die Cmdlets für Windows 2008 R2 Server Backup sind in einem Windows PowerShell Snap-In enthalten. Bevor Sie beginnen, müssen Sie das Cmdlet-Snap-In installieren.
Danach müssen Sie jedes Mal, wenn Sie die Cmdlets verwenden wollen, das Windows Server Backup-Cmdlet-Snap-In in die Instanz von Windows PowerShell einfügen.
Mit folgenden Befehl wird das Snap-In geladen:
PS>add-pssnapin windows.serverbackup
Windows PowerShell
Version:
WSManStackVersion 3.0
PSVersion 4.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.36366
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
Zabbix
Version: 3.0
Notwendiges Wissen:
- Installation und Betrieb von Zabbix
- Administration von Windows
Allgemeines:
- Das Aufrufen von dem PowerShell Skript und das versenden mit "zabbix_sender" kann auch auf andere Bereich übertagen werden und kann als "blau-Pause" verwendet werden.
Ändern der Ausführungsrichtlinie für Windows PowerShell Skripte
Mit dem Cmdlet Set-ExecutionPolicy kann die Ausführungsrichtlinie für Windows PowerShell Skripte geändert werden
Restricted (Eingeschränkt) | Es dürfen keine Skripts ausgeführt werden |
AllSigned (Vollständig signiert) | Nur von einem vertrauenswürdigen Autor erstellte Skripts dürfen ausgeführt werden. |
RemoteSigned (Remote signiert) |
Lokale, unsignierte Skripte dürfen ausgeführt werden |
Unrestricted (Uneingeschränkt) | Keine Einschränkungen. Alle Windows PowerShell-Skripts dürfen ausgeführt werden. |
Empfehlung:
RemoteSigned (Remote signiert)
Set-ExecutionPolicy RemoteSigned
Überprüfung Ausführungsrichtlinie:
Get-ExecutionPolicy
Einführung
Ich kann nur sagen "auwei"
Ich suchte nach einer Lösung, für ein Monitroing, wie man ein Windows Backup mit zabbix überwachen kann.
Dafür gibt es einige Skripte und Ansätze. Leider berücksichten die meisten keine Fehlersituationen oder gehen Blind an die Sache:
Für mich gibt es drei Bedingungen, die für ein gültiges Backup erfüllt sein müssen:
1) | JobType | backup |
2) | error Meldung | länge ist gleich null |
3) | End Time / date | Backup EnD Time / date muss größer sein, als das experation Datum (Ablaufdatum) |
Ausganslage:
PowerShell command als "administrator" starten
Get-WBJob -previous 3
JobType : FileRecovery
StartTime : 19.02.2017 16:59
EndTime : 19.02.2017 16:59
JobState : Completed
CurrentOperation :
HResult : 0
DetailedHResult : 0
ErrorDescription :
JobItems : {D:\drucker\HP LaserJet Pro MFP M125-M126 PCLmS.bat}
VersionId :
SuccessLogPath : C:\Windows\Logs\WindowsServerBackup\FileRestore-19-02-2017_15-59-47.log
FailureLogPath :
JobType : Backup
StartTime : 19.02.2017 16:36
EndTime : 19.02.2017 16:38
JobState : Completed
CurrentOperation :
HResult : 80780167
DetailedHResult : 0
ErrorDescription : Der Vorgang wurde vom Benutzer abgebrochen.
JobItems : {VolumeList, SystemState, BareMetalRecovery}
VersionId :
SuccessLogPath : C:\Windows\Logs\WindowsServerBackup\Backup-19-02-2017_15-36-02.log
FailureLogPath : C:\Windows\Logs\WindowsServerBackup\Backup_Error-19-02-2017_15-36-02.log
JobType : Backup
StartTime : 18.02.2017 23:00
EndTime : 18.02.2017 23:23
JobState : Completed
CurrentOperation :
HResult : 0
DetailedHResult : 0
ErrorDescription :
JobItems : {VolumeList, SystemState, BareMetalRecovery}
VersionId : 02/18/2017-22:00
SuccessLogPath : C:\Windows\Logs\WindowsServerBackup\Backup-18-02-2017_22-00-18.log
FailureLogPath : C:\Windows\Logs\WindowsServerBackup\Backup_Error-18-02-2017_22-00-18.log
Die drei Jobs in einer Zusammenfassung:
# | JobType | EndTime | ErrorDescription |
---|---|---|---|
1 | FileRecovery | 19.02.2017 16:59 | |
2 | Backup | 19.02.2017 16:38 | Der Vorgang wurde vom Benutzer abgebrochen. |
3 | Backup | 18.02.2017 23:23 |
Daraus ergibt sich, das der Job 3 das letzte gültige Backup ist.
Würde man mit einem
Get-WBJob -previous 1
den backup Status prüfen ,so bekommt man nur den Job 1 "FileRecovery" zurück. Dieser wurde erfolgreich abgeschlossen und es würde "grün" gemeldet, was falsch ist. Es ist ja ein FileRecovery.
Das PowerShell Script:
Das Script steht unterhalb dieser URL
https://github.com/NET-CRY/zabbix/tree/master/Windows%20Backup
unter scripts und heißt status_wbackup.ps1
$backupdata_array = Get-WBJob -previous 10 foreach($backupdata in $backupdata_array) { $JobType = $backupdata.JobType if ($Jobtype -eq "Backup" ) { $starttime = $backupdata.startTime $endtime = $backupdata.endTime $errormsg = $backupdata.errorDescription $originalerrormsg = $backupdata.errorDescription $resultcode = $backupdata.HResult $JobType = $backupdata.JobType if ($errormsg.Length -eq 0) { $endtime_datetime = [datetime]::parseexact($endtime, 'dd.MM.yyyy HH:mm',$null) $start_datetime = [datetime]::parseexact($starttime, 'dd.MM.yyyy HH:mm',$null) $duration = $endtime_datetime - $start_datetime break } } } $ts = New-TimeSpan -Days 1 -Hours 12 -Minutes 30 $expired = (get-date) - $ts $endtime = [datetime]::parseexact($endtime, 'dd.MM.yyyy HH:mm',$null) if ($endtime_datetime -lt $expired ) { Write-Host "error to old" $expr write-host $errormsg Result code $resultcode $startTime $start_datetime $duration } if ($errormsg.Length -eq 0) { write-host Result code $resultcode $startTime $start_datetime $duration }
Ausgangslage ist "
Es werden die letzten 10 Jobs geholt:
$backupdata_array = Get-WBJob -previous 10
Das Objet wir in einer "foreach" schleife bearbeitet:
foreach($backupdata in $backupdata_array) {
In der Schleife wird der Job Type ermittelt. Handelt es sich um den Job Type "Backup", wird das Objekt genauer untersucht:
if ($Jobtype -eq "Backup" )
Es wird ermittelt, ob bei diesen Objekt eine error Meldung vorliegt
if ($errormsg.Length -eq 0)
Sollte die Länge von der error Meldung 0 sein, so wird die Schleife abgebrochen.
Wir haben jetzt ein Objekt gefunden, was die zwei Kritieren erüffen:
1) Bedindung | JobType | backup |
2) Bedindung | error Meldung | länge ist gleich null |
Es wird jetzt die start- und endtime in ein datetime Objekt umgewandelt.
Als abfall Produkt errechne ich als Performace count die dauer von dem Backup.
Es diritte Bedingung ermittelt ich eine Zeit, wie alt das Backup sein darf:
$ts = New-TimeSpan -Days 1 -Hours 12 -Minutes 30
$expired = (get-date) - $ts
Das ist die exeratjon Time
Diese vergleiche mit der endtime vom Backup
if ($endtime_datetime -lt $expired ) {
Damit haben wir eine dritte Bedingung, die erfüllt sein muss
3) Bedindung | End Time / date | muss größer sein, als das experation Datum (Ablaufdatum) |
Wenn das der Fall sein sollte, haben wir ein "Backup to old" und das Backup ist ungültig
Damit haben wir drei Möglichkeiten:
1) | Backup wurde nicht gefunden |
2) | Backup hat einen Fehler |
3) | Backup ist zu alt |
4) | Backup ist ok |
Output PowerShell Script
ts01.phs.local wb.errorcode 0
ts01.phs.local wb.resultcode 0
ts01.phs.local wb.duration 24
ts01.phs.local wb.errormsg " -"
ts01.phs.local wb.starttime " 02.03.2017 23:00"
ts01.phs.local wb.timestamp 148856515654728
Der Vorteil beim senden mit "zabbix_sender" ist derjenige, das mit einem Auruf mehrere Daten gleichzeitig gesendet werden können. Der Aufbau von dem Datensatz ist:
<host> <key> <value>
Diese werden dann zum Zabbix gesendet.
Windows Aufgabeplanung erstellen
Allgemeine Aufgabe erstellen
Für das ermitteln von dem Windows Backup Status erstellen wir ein neue Aufgabe. Dazu wählen wir nicht die einfache, sonder die normale. Dort können wir auch einen Interval einstellen:
Trigger erstellen
Der Trigger soll jede Stunde ausgeführt werden
Aktion erstellen und Daten mit zabbix_sender versenden
Das starten von dem PowerShell Script wird mit einer Windows Batch Datei durchgeführt.
Dort übergeben wir die ganzen Parameter und versenden mit "zabbix_sender" die Informatioen zu dem Zabbix Server.
Das Skript steht unter:
https://github.com/NET-CRY/zabbix/blob/master/Windows%20Backup/scripts/exec.bat
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command c:\zabbix\scripts\backup01.ps1 | c:\zabbix\bin\win64\zabbix_sender.exe -c c:\zabbix\conf\zabbix_agentd.conf -i - -vv
Zabbix Template import
Für die Überwachung eines Host wird als erstes das Zappix Template Importiert.
Das Template steht ebenfalls unter Github zum Download bereit
https://github.com/NET-CRY/zabbix/blob/master/Windows%20Backup/template/zbx_export_windows_backup.xml
Nach dem Import steht das Template zur Verfügung und kann dem Host zugeordnet werden.
Die Daten werden mit dem "zabbix_sender" passive gesendet
Artikelaktionen