Aktionen

Zabbix:Template BackupExec 2012 Jobs

Aus znilwiki

Changelog:

  • 25.04.2014: Erste Öffentliche Version 0.0.0.40
  • 29.01.2015: Version 0.0.0.42 unterstützt auch BackupExec 2014
  • 20.02.2015: Version 0.0.0.43 kann nun auch wirklich gleichzeitig 2014 und 2012
  • 13.05.2015: Version 0.0.0.45 kann auch mit BackupExec 15 umgehen
  • 13.09.2016: Version 1.0.0.7 (BETA Version) sollte pauschal mit allen BackupExec Versionen mit PowerShell umgehen können


Bekannte Fehler:

  • Der Zabbix Agent wird mit SYSTEM-Rechten ausgeführt. Die Abfrage von BackupExec 2012 erfolgt über die BEMCLI, das ist die PowerShell Erweiterung zu BackupExec 2012. In der Praxis bedeutet dies, das eine PowerShell gestartet wird, diese die BackupExec Erweiterungen nachlädt und dann die eigentlichen Abfragen durchführt. Die Erweiterungen werden über PowerShell-Scripts (.ps1) geladen. Und bei deren Ausführung zickt Windows gerne rum wenn diese z.B. nicht signiert sind. Beim Programmieren musste ich leider mehrmals feststellen das es hakte. Deshalb führt mein Programm bei der Abfrage ein Set-ExecutionPolicy Bypass aus. DAMIT WERDEN ALLE POWERSHELL-SCRIPTE OHNE ÜBERPRÜFUNG DER SIGNATUR AUSGEFÜHRT. DIESE EINSTELLUNG IST FÜR DEN SERVER GGF. DAUERHAFT FÜR ALLE SCRIPTE
Important.png
Hinweis: Die neue Version 0.0.0.43 funktioniert auch mit BackupExec 2014!

Important.png
Hinweis: Die BETA Version 1.0.0.7 funktioniert sollte mit jeder BackupExec Version ab 2012 funktionieren


1 Download

Download: ZabbixTemplateBackupExec2012.zip Version 0.0.0.43 mit BackupExec 2014 Unterstützung
Download BETA: ZabbixTemplateBackupExecPS.zip Version 1.0.0.7 mit BackupExec PS Unterstützung


2 Vorwort

Nachdem ich so etwas für BackupExec 2010 geschrieben hatte fehlte noch das Gegenstück für BackupExec 2012. Hier gibt es keine bemcmd.exe sondern die BEMCLI wird genutzt.
Dabei handelt es sich um eine PowerShell Erweiterung.
Die aktuelle Version sollte mit BackupExec 2014 und BackupExec 15 auch umgehen können.



3 Screenshots / Bilder

Zabbix-BackupExec2012-001.png



4 Funktionsweise

Wie funktioniert es?
Die BackupExec2012.exe wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.
Die .exe ermittelt in der Registry den Installationspfad von BackupExec 2012 und sucht darüber den Pfad zur PowerShell-Erweiterung BEMCLI
Diese wird von der BackupExec2012.exe aufgerufen und kennt verschiedene Parameter:

discoverjobs       : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge
                     die wiederkehrend geplant oder gerade aktiv sind.

Die nachfolgenden Parameter erwarten als 2. Parameter die Job Id!

jobstatus          : Gibt den Status des letzen Backup-Auftrages zurück. 
                     Rückgabewert ist Text
 
jobhowlongago      : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des
                     Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen
                     das ein Auftrag nicht mehr wie geplant angelaufen ist.

jobbytes           : Gibt die gesamte gesicherte Datenmenge in Bytes zurück

jobruntime         : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück

jobPercentComplete : In Prozent wieviel gesichert wurde, 0 bis 100 möglich

jobErrorCode       : Gibt den letzten Fehlercode zurück (scheinbar immer 0)

jobErrorCategory   : Ist bei einem Fehler nicht 0, mögliche Werte noch unbekannt


Damit könnt Ihr das ganze zuvor einmal auf der Kommandozeile / DOS-Box testen.



5 Template

Im Zip-Archiv findet Ihr neben der BackupExec2012.exe auch das Template in Deutsch.
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe 'Templates znil.net' mit den Namen

znil Template BackupExec 2012 Auftragsueberwachung ACTIVE AGENT

Also nur eine Active Agent Version - paasiv müsstet ihr eben selbst daraus bauen bei Bedarf
Darin sind NUR die Items - keine Trigger - die müsst ihr euch selbst anlegen. Als Hilfe dafür habe ich z.B. die Rückgabewerte gebaut wie lange der letzte Start her ist. Damit lässt sich indirekt erkennen wenn z.B,. ein Job hängt (wenn er z.B. mehr als 25h nicht neu gestartet wurde) etc.

6 Rückgabewerte "letzter Status"

Folgende Rückgabewerte sind bei "letzter Status" möglich:

Unknown
Canceled
Completed
SucceededWithExceptions
OnHold
Error
Missed
Recovered
Resumed
Succeeded
ThresholdAbort
Dispatched
DispatchFailed
InvalidSchedule
InvalidTimeWindow
NotInTimeWindow
Queued
Disabled
Active
Ready
Scheduled
Superseded
ToBeScheduled
Linked
RuleBlocked

In der Praxis einige wie "Queued" oder "Scheduled" eher nicht da meine Funktion den letzten Rückgabewert des letzten Auftrages/Jobs zurück liefert, nicht zukünftiger oder gerade laufender Aufträge.



7 Download

Download: ZabbixTemplateBackupExec2012.zip Version 0.0.0.45



8 Installation

Zur Installation müsst Ihr folgendes tun:

  • Kopiert die BackupExec2012.exe in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.
C:\Program Files\Zabbix
  • Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die zabbix_agentd.win.conf die Zeile
UserParameter=znil.BackupExec2012[*],"C:\Program Files\Zabbix\BackupExec2012.exe" $1 "$2"

ein - Pfad natürlich ggf. anpassen

  • Startet des Zabbix Agenten Dienst neu
net stop "zabbix agent"
net start "zabbix agent"
  • Import eine der .XML Dateien in Zabbix und verknüpft diese mit dem Host.
  • Warten! Alle 3600 Sekunden = 1 Stunde wird die Abfrage gestartet.
  • Da erst die Aufträge gefunden werden und dann daurch die Items angelegt werden dauert es eine Weile bis der Agent davon weis.
  • Als Beschleunigung: Nachdem Ihr in Zabbix die Items sehen könnt startet den AGenten auf dem Server noch einmal neu. Wen Ihr noch einen Proxy dazwischen habt müsst ihr den Dienst auf diesen auch einmal neu starten ... oder einfach abwarten!




9 Quellcode

Hier noch für Interessierte der Quellcode der BackupExec2012.exe:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_Outfile=BackupExec2014.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates
#AutoIt3Wrapper_Res_Fileversion=0.0.0.46
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=2014 Bernhard Linz
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=Website|http://znil.net
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_BackupExec_2014_Jobs
#AutoIt3Wrapper_Res_Field=See You|znil.net
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt('MustDeclareVars', 1)
#Region    ;************ Includes ************
#Include <Array.au3>
#include <Constants.au3>
#include <Date.au3>
#EndRegion ;************ Includes ************
; ##########################################################################################################################
; ##########################################################################################################################
; # backupexec2014.exe --> Tool for Check BackupJobs in Zabbix                                                             #
; # 2014 Bernhard Linz    /    Bernhard@znil.de    /    http://znil.net                                                    #
; # Idea and Original at Zabbix Wiki                                                                                       #
; #                                                                                                                        #
; # Latest Version of this Program and Template in German:                                                                 #
; # http://znil.net/index.php?title=Zabbix:Template_BackupExec_2014_Jobs                                                   #
; #                                                                                                                        #
; #	         ________  .__   __.  __   __        .__   __.  _______ .___________.                                          #
; #	        |       /  |  \ |  | |  | |  |       |  \ |  | |   ____||           |                                          #
; #	        `---/  /   |   \|  | |  | |  |       |   \|  | |  |__   `---|  |----`                                          #
; #	           /  /    |  . `  | |  | |  |       |  . `  | |   __|      |  |                                               #
; #	          /  /----.|  |\   | |  | |  `----.__|  |\   | |  |____     |  |                                               #
; #	         /________||__| \__| |__| |_______(__)__| \__| |_______|    |__|                                               #
; #                                                                                                                        #
; ##########################################################################################################################
; ##########################################################################################################################

; find the 'BEMCLI.exe' - take a look at Registry of Host
Dim $SoftwareBasePaths[9] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _
							 "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _
							 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.2", _
							 "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _
							 "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _
							 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.1", _
							 "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _
							 "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0", _
							 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 14.0"]
Global $bemcli
Dim $aparameter[4]
	;$aparameter[0] = "Get-BEJob -JobType Backup -Status Scheduled,Active | select-object -property *" 					; get a List of scheduled and active jobs
	$aparameter[0] = "Get-BEJob -JobType Backup,Duplicate -Status Scheduled,Active,Linked | select-object -property *" 					; get a List of scheduled and active jobs
	$aparameter[1] = "Get-BEJob -JobType Duplicate -Status Linked | select-object -property *" 					; get a list of Duplicate Jobs
	$aparameter[2] = '-o21 -e -j"Name of Job"'			; get last Exit-Code of a specific job by Name
	$aparameter[3] = 'Get-BEJob -Id {ID of Job} | Get-BEJobHistory -FromLastJobRun | select-object -property *'			; get last Exit-Code of a specific job by ID

Dim $stemp
Dim $atemp
Dim $aatemp
Dim $aDateTemp
Dim $aRuntimeTemp
Dim $aBackupJobs_byName[1] = [ 0 ]
Dim $aBackupJobs_byID[1] = [ 0 ]
Dim $aBackupJobs_Selection[1] = [ 0 ]

Dim $s_JSONOutput
Dim $sRunCommand
Dim $sJobStatus
Dim $iJobStatus
Dim $iJobhowlongago
Dim $iJobBytes
Dim $iJobRuntime
Dim $iJobPercentComplete
Dim $iJobErrorCode

; Ok, we need the BEMCLI Extension for PowerShell, just find the BackupExec Installation Folder
; we take 3 try - depends of we are a 32 or 64 bit exe and if we run on a 32 or 64 bit system
$bemcli = RegRead($SoftwareBasePaths[0], "InstallLocation")
If $bemcli = "" Then
	$bemcli = RegRead($SoftwareBasePaths[1], "InstallLocation")
	If $bemcli = "" Then
		$bemcli = RegRead($SoftwareBasePaths[2], "InstallLocation")
		If $bemcli = "" Then
		$bemcli = RegRead($SoftwareBasePaths[3], "InstallLocation")
			If $bemcli = "" Then
				$bemcli = RegRead($SoftwareBasePaths[4], "InstallLocation")
				If $bemcli = "" Then
					$bemcli = RegRead($SoftwareBasePaths[5], "InstallLocation")
					If $bemcli = "" Then
						$bemcli = RegRead($SoftwareBasePaths[6], "InstallLocation")
						If $bemcli = "" Then
							$bemcli = RegRead($SoftwareBasePaths[7], "InstallLocation")
							If $bemcli = "" Then
								$bemcli = RegRead($SoftwareBasePaths[8], "InstallLocation")
								If $bemcli = "" Then
									ConsoleWriteError("Error, no installed BackupExec 2012/2014 found" & @CRLF)
								Exit 1
								EndIf
							EndIf
						EndIf
					EndIf
				EndIf
			EndIf
		EndIf
	EndIf
EndIf
$bemcli = "Import-Module '" & $bemcli & "Modules\BEMCLI\BEMCLI'"

; ##########################################################################################################################
; ##########################################################################################################################
;                                                                                   ########################################
; ######## ##     ## ##    ##  ######  ######## ####  #######  ##    ##  ######     ########################################
; ##       ##     ## ###   ## ##    ##    ##     ##  ##     ## ###   ## ##    ##    ########################################
; ##       ##     ## ####  ## ##          ##     ##  ##     ## ####  ## ##          ########################################
; ######   ##     ## ## ## ## ##          ##     ##  ##     ## ## ## ##  ######     ########################################
; ##       ##     ## ##  #### ##          ##     ##  ##     ## ##  ####       ##    ########################################
; ##       ##     ## ##   ### ##    ##    ##     ##  ##     ## ##   ### ##    ##    ########################################
; ##        #######  ##    ##  ######     ##    ####  #######  ##    ##  ######     ########################################
;                                                                                   ########################################
; ##########################################################################################################################
; ##########################################################################################################################
Func _BEMCLI($sbemparameter)
	Local $sRunCommand
	Local $outputBEMCLI
	Local $errorsBEMCLI
	Local $hBEMCLI
	Local $iBEMCLImaxWaitTime = 20000
	Local $iBEMCLImaxWaitTimeSTART
	Local $stdoutReadFEHLER
	; build the Command for run
	$sRunCommand = $bemcli & " ; " & $sbemparameter
	; Start the timer for max wait time
	$iBEMCLImaxWaitTimeSTART = TimerInit()
	; run the Command
	;ConsoleWrite('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"' & @CRLF)
	$hBEMCLI = Run('powershell.exe Set-ExecutionPolicy Bypass ; "' & $sRunCommand & '"', @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
	StdinWrite($hBEMCLI, @CRLF)
	StdinWrite($hBEMCLI)
	;get the output
	Do
		;Sleep(5)
		; get the output
		$outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI)
		; get the errors
		$errorsBEMCLI = $errorsBEMCLI & StderrRead($hBEMCLI)
		; did we have an error while reading?
		$stdoutReadFEHLER = @error
		If $stdoutReadFEHLER <> "" Then
			; No error, go on
			If $outputBEMCLI = "" Then
				; but also no output, let us take a 2. try
				$outputBEMCLI = $outputBEMCLI & StdoutRead($hBEMCLI)
				If $outputBEMCLI = "" Then
					; anymore no output, oh oh
					If $stdoutReadFEHLER <> "" Then
						; but we have an error message
						Return $errorsBEMCLI
					EndIf
				EndIf
			EndIf
		EndIf
	Until $stdoutReadFEHLER Or TimerDiff($iBEMCLImaxWaitTimeSTART) > $iBEMCLImaxWaitTime
	;MsgBox(0,"",$outputBEMCLI)
	Return $outputBEMCLI
EndFunc ;<== End _BEMCLI()

; ##########################################################################################################################
; ##########################################################################################################################
;                                       ####################################################################################
; ##     ##    ###    #### ##    ##     ####################################################################################
; ###   ###   ## ##    ##  ###   ##     ####################################################################################
; #### ####  ##   ##   ##  ####  ##     ####################################################################################
; ## ### ## ##     ##  ##  ## ## ##     ####################################################################################
; ##     ## #########  ##  ##  ####     ####################################################################################
; ##     ## ##     ##  ##  ##   ###     ####################################################################################
; ##     ## ##     ## #### ##    ##     ####################################################################################
;                                       ####################################################################################
; ##########################################################################################################################
; ##########################################################################################################################

If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then
	Dim $s_JSONOutput
	; Get all scheduled and active Jobs
	$stemp = _BEMCLI($aparameter[0])

	$atemp = StringSplit($stemp, @CRLF)

	For $i = 1 To $atemp[0]
		If StringLeft($atemp[$i],StringLen("Id")) = "Id" Then
			$aatemp = StringSplit($atemp[$i],' : ', 1)
			_ArrayAdd($aBackupJobs_byID, $aatemp[$aatemp[0]])
			$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
		EndIf
		If StringLeft($atemp[$i],StringLen("Name")) = "Name" Then
			$aatemp = StringSplit($atemp[$i],' : ', 1)
			_ArrayAdd($aBackupJobs_byName, $aatemp[$aatemp[0]])
			$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
		EndIf
		If StringLeft($atemp[$i],StringLen("SelectionSummary")) = "SelectionSummary" Then
			$aatemp = StringSplit($atemp[$i],' : ', 1)
			_ArrayAdd($aBackupJobs_Selection, $aatemp[$aatemp[0]])
			$aBackupJobs_Selection[0] = $aBackupJobs_Selection[0] + 1
		EndIf
	Next
	$s_JSONOutput = '{"data":['
	For $i = 1 To $aBackupJobs_byName[0]
		$s_JSONOutput = $s_JSONOutput & @CRLF
		$s_JSONOutput = $s_JSONOutput & "     " & '{' & @CRLF
		$s_JSONOutput = $s_JSONOutput & "          " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & @CRLF
		$s_JSONOutput = $s_JSONOutput & "          " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '",' & @CRLF
		;$s_JSONOutput = $s_JSONOutput & "          " & '"{#BACKUPEXECSELECTION}":"' & $aBackupJobs_Selection[$i] & '"' & @CRLF
		$s_JSONOutput = $s_JSONOutput & "          " & '"{#BACKUPEXECSELECTION}":"' & "---" & '"' & @CRLF
		$s_JSONOutput = $s_JSONOutput & "     " & '},'
	Next
	$s_JSONOutput = StringTrimRight($s_JSONOutput, 1) & @CRLF & ']}'
	ConsoleWrite($s_JSONOutput & @CRLF)
EndIf

If $CmdLine[0] = 2 Then
	If $CmdLine[1] = "jobstatus" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("JobStatus")) = "JobStatus" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$sJobStatus = $aatemp[$aatemp[0]]
				ConsoleWrite($sJobStatus & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobhowlongago" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("StartTime")) = "StartTime" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$stemp = $aatemp[$aatemp[0]]
				$aDateTemp = StringSplit($stemp, " .")
				; [1] = Tag
				; [2] = Monat
				; [3] = Jahr
				; [4] = Uhrzeit als hh:mm:ss
				$iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[2] & "/" & $aDateTemp[1] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
				ConsoleWrite($iJobhowlongago & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobbytes" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("TotalDataSizeBytes")) = "TotalDataSizeBytes" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$stemp = $aatemp[$aatemp[0]]
				$iJobBytes = Int($stemp)
				ConsoleWrite($iJobBytes & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobruntime" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("ElapsedTime")) = "ElapsedTime" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$stemp = $aatemp[$aatemp[0]]
				$aRuntimeTemp = StringSplit($stemp,":")
				; [1] = Stunden
				; [2] = Minuten
				; [3] = Sekunden
				$iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600)
				ConsoleWrite($iJobRuntime & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobPercentComplete" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("PercentComplete")) = "PercentComplete" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$iJobPercentComplete = $aatemp[$aatemp[0]]
				If $iJobPercentComplete = -1 Then
					$iJobPercentComplete = 0
				EndIf
				ConsoleWrite($iJobPercentComplete & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobErrorCode" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("ErrorCode")) = "ErrorCode" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$iJobErrorCode = $aatemp[$aatemp[0]]
				ConsoleWrite($iJobErrorCode & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobErrorCategory" Then
		$stemp = _BEMCLI(StringReplace($aparameter[3], '{ID of Job}',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("ErrorCategory")) = "ErrorCategory" Then
				$aatemp = StringSplit($atemp[$i],' : ',1)
				$iJobErrorCode = $aatemp[$aatemp[0]]
				ConsoleWrite($iJobErrorCode & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "Get-BEJob : Cannot find") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

EndIf

Exit 0




10 Kommentare


Christian

53 Monaten zuvor
Punktzahl 0++

Hallo,

Super arbeit hast du da gemacht! Wie schaut es mit der Unterstützung von BackupExec 2014 aus? Ich würde hier gerne Testopfer spielen ;-)

Florian

52 Monaten zuvor
Punktzahl 0++
It keeps saying notsupported if i test it in commandline on the server. the BackupExec2012.exe works, but if i use it try it with the Zabbix agent is says notsupported.

Carlos

48 Monaten zuvor
Punktzahl 0++
Anyone got luck on using this on Backup Exec 12.5? I've tried creating the registry enter for path, recompiling the code on AutoIT, without luck. Anyone tried? And in 2014? Thanks!

Mike

48 Monaten zuvor
Punktzahl 0++
Use the BackupExec 2010 Version by the same author

Sandro

48 Monaten zuvor
Punktzahl 0++

Hi

ich hätte auch sehr grosses Interesse an der 2014 er Version. Ich vermute, mann müsste nur den Registry Suchpfad auf "Symantec Backup Exec 14.1" ändern und neu kompilieren.

BLinz

48 Monaten zuvor
Punktzahl 0++

Hab die geänderte Version mal eben hochgeladen - Template etc. ist alles gleich geblieben, nur die .exe ist neu. Wie du richtig erkannt hast musste nur die Abfrage in der Registry angepasst werden.

In der Firma haben wir die geänderte Version schon seit ein paar Monaten im Einsatz

Bernhard

Sandro

48 Monaten zuvor
Punktzahl 0++

Danke, aber wo kann man die neue Datei herunterladen?

Ich habe inzwischen einen zusätzlichen Registry eintrag gemacht, damit die alte Version läuft (gebastel). Wäre froh um die neue Version.

Sandro

48 Monaten zuvor
Punktzahl 0++
Sorry, kannst meine beiden letzten Einträge löschen. Neben deinem Downloadlink, solltest du evt. noch die Version anpassen, dass es nicht für verwirrung sorgt.

r.janssen@cco-automatisering.nl

47 Monaten zuvor
Punktzahl 0++

Hi,

I have installed the script and restarted Zabbix Proxy (on the proxy server) and Zabbix Agent on the monitored host. In the Zabbix Agent log I get results back:


27208:20150220:082615.597 JSON before sending [{"request":"agent data","data":[{"host":"RPA-SBS-01","key":"znil.BackupExec2012[discoverjobs]","value":"Error, no installed BackupExec 2014 found","clock":1424417170,"ns":707372800}],"clock":1424417175,"ns":702469600}] 27208:20150220:082615.597 JSON back [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000061"}] 27208:20150220:082615.597 In check_response() response:'{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000061"}' 27208:20150220:082615.597 info from server: 'processed: 1; failed: 0; total: 1; seconds spent: 0.000061' 27208:20150220:082615.597 End of check_response():SUCCEED 27208:20150220:082615.597 OK


However Zabbix server reports "Value should be a JSON object.".

What am I missing?

Regards,

Rob

BLinz

47 Monaten zuvor
Punktzahl 0++

The Answer is: Error, no installed BackupExec 2014 found

Was my fault - the Version only works with 2014 - i just Upload a new Version witch realy work with 2012 AND 2014

Ronaldo

40 Monaten zuvor
Punktzahl 0++
its workunh witch backup exec 2015?

BLinz

40 Monaten zuvor
Punktzahl 0++
Yes! It work!

Ronaldo

40 Monaten zuvor
Punktzahl 0++
what link for download Template_BackupExec_2014_Jobs

BLinz

40 Monaten zuvor
Punktzahl 0++

Use the 2012 Template for BackupExec 2012, BackupExec 2015 and BackupExec 15.

I did not write a extra Template for al Versions because all of them works with the same .exe and .xml

Guido42

37 Monaten zuvor
Punktzahl 0++

Hallo,

ich habe einen Small Business Server 2011 mit Backup Exec 2012 und bekomme folgende Meldungen. Zabbix 2.4.7 läuft auf Ubuntu 14LTS wie hier beschrieben und der Zabbix Agent hat die Version 2.4.4 Wenn ich die BackupExec2012.exe von Hand aufrufe zeigt er mir meine 2 Jobs. Das ganze läuft nun schon 2 Tage, ohne dass Daten auf dem Zabbis Server ankommen. Die müßte ich doch im Dashboard sehen können. Oder? Gibt es noch andere Logfiles die weiterhelfen könten?

21164:20151213:145341.540 got [{"response":"success","data":[{"key":"znil.BackupExec2012[discoverjobs]","delay":3600,"lastlogsize":0,"mtime":0}]}] 21164:20151213:145341.541 In parse_list_of_checks() 21164:20151213:145341.541 In disable_all_metrics() 21164:20151213:145341.542 In add_check() key:'znil.BackupExec2012[discoverjobs]' refresh:3600 lastlogsize:0 mtime:0 21164:20151213:145341.542 End of add_check() 21164:20151213:145341.543 End of refresh_active_checks():SUCCEED 18132:20151213:145341.968 In collect_perfstat()

So sieht meine Zabbix.conf aus.

LogFile=C:\Program Files\Zabbix\Zabbix.log EnableRemoteCommands=1 LogRemoteCommands=1 Server=10.100.100.30 ListenPort=10050 Hostname=Server


LogFileSize=1 DebugLevel=4 SourceIP=10.100.100.11

LogRemoteCommands=1 ServerActive=10.100.100.30:10051 RefreshActiveChecks=480 BufferSend=5 BufferSize=100 MaxLinesPerSecond=100

UserParameter=znil.BackupExec2012[*],"C:\Program Files\Zabbix\BackupExec2012.exe" $1 "$2"

Viele Grüße

Guido

BLinz

37 Monaten zuvor
Punktzahl 0++

Teste doch mal bitte den Aufruf von

BackupExec2012.exe discoverjobs

als System-Benutzer (CMD als Benutzer SYSTEM) Und über den Zabbix-Agenten lokal per

zabbix_agentd.exe -c zabbix_agentd.win.conf -t znil.BackupExec2012[discoverjobs]

Kannst mir direkt eine Email schreiben an bernhard@znil.net

klappach@spanka.de

35 Monaten zuvor
Punktzahl 0++

Hallo, hast du die Version schon mit Zabbix 3.o getestet? Bei mir läuft sie nacht dem Update auf 3.0 nicht mehr. Zabbix sagt : "Value should be a JSON object." und ausführen von :

"zabbix_agentd.exe -c zabbix_agentd.win.conf -t znil.BackupExec2012[discoverjobs]" bringt : znil.BackupExec2012[discoverjobs] [t|{"data": ]}]

Grüße

Konrade

BLinz

35 Monaten zuvor
Punktzahl 0++
Mhh haben wir in der Firma auch schon bemerkt - ich setzte mich am Dienstag dran und schau mal warum das nicht mehr geht bzw. was anders ist. Ich werde die Version gleich so umbauen das ich auch nicht dauernd bei jeder neuen BackupExec version wieder die .exe anpassen muss (Knackpunkt ist die Suche der Installation in der Registry)

BLinz

35 Monaten zuvor
Punktzahl 0++

Also, bei uns läuft es auf einen von 20 Servern nicht ... warum untersuche ich noch. Ich habe schon eine neue Version gebaut die ALLE BackupExec Versionen ab 2012 und auch die zukünftigen unterstützt und mit Zabbix Trapper arbeitet (ein Aufruf pro Job und nicht mehr 7).

Kommt morgen.

klappach@spanka.de

34 Monaten zuvor
Punktzahl 0++
Gibt es hier schon was neues?

Hups

15 Monaten zuvor
Punktzahl 0++

Hi BLinz,

hast du schon vor das Tool für Veritas Backup Exec 16.0 anzupassen und zu testen? Wollte nur kurz Nachfragen bevor ich mich selber ans AutoIT mache :)

Danke schon einmal im voraus ...

Beste Grüße

Hups

BLinz

15 Monaten zuvor
Punktzahl 0++
Die Beta Version sollte auch mit 2016 umgehen können - ohne Änderungen

Hups

15 Monaten zuvor
Punktzahl 0++

Hi BLinz,

mir ist zudem Aufgefallen dass das Skript nur mit fest eingetragenen Hostnamen in der Zabbix Konfig funktioniert. Sollte man aber hingegen die Option HostnameItem=system.hostname benutzen läuft das Skript gegen die Wand. Man sollte hier wohl ne Prüfung einbauen und notfalls per "hostname" Befehl den Namen dynamisch einlesen. Alternativ aus dem Logfile auslesen.

Beste Grüße

Hups

BLinz

15 Monaten zuvor
Punktzahl 0++

Das liegt daran das der Zabbix Sender genutzt wird - und dem wird die Konfigurationsdatei des Zabbix-Agent übergeben.

Ansonsten müsste man aus der Konfig nur den Server herausholen und die zabbix_sender.exe stattdessen mit Parametern für Server, Hostname, Port etc. aufrufen.
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.