Hi @benjamingntll , can you check in “Configuration > Pollers > Resources” menu that $USER1$ have the correct value (/usr/lib64/nagios/plugins).
Can you also check that NRPECLIENT custom macro (in you host definition) have correct value: check_centreon_nrpe3
Then try to execute plugin (your command line) with ‘centreon-engine’ user instead of ‘root’.
Hi @benjamingntll,
There is an issue with the powershell script used by the plugin to monitor jobs executed with the Veeam Agent. Hopefully, we’ll deliver a fix in the October Connector release.
In the meantime, can you try the following powershell script on your Windows host and tell us if it is working for you?
$ProgressPreference = "SilentlyContinue"
$WarningPreference = "SilentlyContinue"
$culture = new-object "System.Globalization.CultureInfo" "en-us"
function Escape-JSONString($str) {
if ($str -eq $null) {return ""}
$str = $str.ToString().Replace('\','\\').Replace('"','\"').Replace("`n",'\n').Replace("`r",'\r').Replace("`t",'\t')
return $str;
}
function ConvertTo-JSON-20($maxDepth = 4,$forceArray = $false) {
begin {
$data = @()
}
process{
$data += $_
}
end{
if ($data.length -eq 1 -and $forceArray -eq $false) {
$value = $data 0]
} else {
$value = $data
}
if ($value -eq $null) {
return "null"
}
$dataType = $value.GetType().Name
switch -regex ($dataType) {
'String' {
return "`"{0}`"" -f (Escape-JSONString $value )
}
'(System\.)?DateTime' {return "`"{0:yyyy-MM-dd}T{0:HH:mm:ss}`"" -f $value}
'Int16|Int32|Double' {return "$value"}
'Boolean' {return "$value".ToLower()}
'(System\.)?Object\b\]' { # array
if ($maxDepth -le 0){return "`"$value`""}
$jsonResult = ''
foreach($elem in $value){
#if ($elem -eq $null) {continue}
if ($jsonResult.Length -gt 0) {$jsonResult +=','}
$jsonResult += ($elem | ConvertTo-JSON-20 -maxDepth ($maxDepth -1))
}
return "t" + $jsonResult + "]"
}
'(System\.)?Hashtable' { # hashtable
$jsonResult = ''
foreach($key in $value.Keys){
if ($jsonResult.Length -gt 0) {$jsonResult +=','}
$jsonResult +=
@"
"{0}":{1}
"@ -f $key , ($value$$key] | ConvertTo-JSON-20 -maxDepth ($maxDepth -1) )
}
return "{" + $jsonResult + "}"
}
default { #object
if ($maxDepth -le 0){return "`"{0}`"" -f (Escape-JSONString $value)}
return "{" +
(($value | Get-Member -MemberType *property | % {
@"
"{0}":{1}
"@ -f $_.Name , ($value.($_.Name) | ConvertTo-JSON-20 -maxDepth ($maxDepth -1) )
}) -join ',') + "}"
}
}
}
}
$register_snaps=Get-PSSnapin -Registered
$all_snaps=Get-PSSnapin
$load_snaps=@("VeeamPSSnapin")
$registered=0
foreach ($snap_name in $load_snaps) {
if (@($register_snaps | Where-Object {$_.Name -Match $snap_name} ).count -gt 0) {
if (@($all_snaps | Where-Object {$_.Name -Match $snap_name} ).count -eq 0) {
Try {
$register_snaps | Where-Object {$_.Name -Match $snap_name} | Add-PSSnapin -ErrorAction STOP
$registered=1
} Catch {
Write-Host $Error$0].Exception
exit 1
}
}
}
}
if ($registered -eq 0) {
if (@(Get-Module | Where-Object {$_.Name -Match "Veeam.Backup.PowerShell"} ).count -eq 0) {
Try {
Import-Module -DisableNameChecking -Name "Veeam.Backup.PowerShell"
} Catch {
Write-Host $Error$0].Exception
exit 1
}
}
}
Try {
$ErrorActionPreference = "Stop"
$items = New-Object System.Collections.Generic.ListcHashtable];
$isVeeamAgent=$false
$vbrjob=Get-VBRJob
if (($vbrjob | Select-Object -first 1).JobType -like "*Agent*") {
$isVeeamAgent=$true
} else {
$isVeeamAgent=$false
}
$sessions = @{}
if ($isVeeamAgent) {
Get-VBRComputerBackupJobSession | Sort-Object CreationTime -Descending | ForEach-Object {
$jobId = $_.JobId.toString()
if (-not $sessions.ContainsKey($jobId)) {
$sessionss$jobId] = New-Object System.Collections.Generic.ListcHashtable];
$session = @{}
$session.result = $_.Result.value__
$session.creationTimeUTC = (get-date -date $_.CreationTime.ToUniversalTime() -Uformat '%s')
$session.endTimeUTC = (get-date -date $_.EndTime.ToUniversalTime() -Uformat '%s')
$sessionss$jobId].Add($session)
} elseif ($sessionss$jobId].Length -lt 2) {
$session = @{}
$session.result = $_.Result.value__
$session.creationTimeUTC = (get-date -date $_.CreationTime.ToUniversalTime() -Uformat '%s')
$session.endTimeUTC = (get-date -date $_.EndTime.ToUniversalTime() -Uformat '%s')
$sessionss$jobId].Add($session)
}
}
Get-VBRComputerBackupJob | ForEach-Object {
$item = @{}
$item.name = $_.Name
$item.type = $_.Type.value__
$item.isRunning = $false
$item.scheduled = $_.ScheduleEnabled
$item.isContinuous = 0
if ($_.isContinuous -eq $true) {
$item.isContinuous = 1
}
$Id = $_.Id.toString()
if ($sessions.ContainsKey($Id)) {
$item.sessions = $sessionss$Id]
if ($sessionss$_.Id].State -eq "Running") {
$item.isRunning = $true
}
} else {
$item.sessions = New-Object System.Collections.Generic.ListcHashtable];
$session = @{}
$session.result = -10
$session.creationTimeUTC = ""
$session.endTimeUTC = ""
$item.sessions.Add($session)
}
$items.Add($item)
}
} else {
Get-VBRBackupSession | Sort-Object CreationTimeUTC -Descending | ForEach-Object {
$jobId = $_.jobId.toString()
if (-not $sessions.ContainsKey($jobId)) {
$sessionss$jobId] = New-Object System.Collections.Generic.ListcHashtable];
$session = @{}
$session.result = $_.Result.value__
$session.creationTimeUTC = (get-date -date $_.CreationTimeUTC.ToUniversalTime() -Uformat '%s')
$session.endTimeUTC = (get-date -date $_.EndTimeUTC.ToUniversalTime() -Uformat '%s')
$sessionss$jobId].Add($session)
} elseif ($sessionss$jobId].Length -lt 2) {
$session = @{}
$session.result = $_.Result.value__
$session.creationTimeUTC = (get-date -date $_.CreationTimeUTC.ToUniversalTime() -Uformat '%s')
$session.endTimeUTC = (get-date -date $_.EndTimeUTC.ToUniversalTime() -Uformat '%s')
$sessionss$jobId].Add($session)
}
}
$vbrjob | ForEach-Object {
$item = @{}
$item.name = $_.Name
$item.type = $_.JobType.value__
$item.isRunning = $_.isRunning
$item.scheduled = $_.IsScheduleEnabled
$item.isContinuous = 0
if ($_.isContinuous -eq $true) {
$item.isContinuous = 1
}
$guid = $_.Id.Guid.toString()
if ($sessions.ContainsKey($guid)) {
$item.sessions = $sessionss$guid]
} else {
$item.sessions = New-Object System.Collections.Generic.ListcHashtable];
$session = @{}
$session.result = -10
$session.creationTimeUTC = ""
$session.endTimeUTC = ""
$item.sessions.Add($session)
}
$items.Add($item)
}
}
$jsonString = $items | ConvertTo-JSON-20 -forceArray $true
Write-Host $jsonString
} Catch {
Write-Host $Error$0].Exception
exit 1
}
exit 0
With this script, you should have:
-{"type":12003,"name":"JobName","sessions":s{"endTimeUTC":"1755801490,913","result":0,"creationTimeUTC":"1755800104,643"},{"endTimeUTC":"1755714867,28","result":0,"creationTimeUTC":"1755713720,657"},{"endTimeUTC":"1755628557,9
23","result":0,"creationTimeUTC":"1755627321,87"}], "isContinuous":0 ,"isRunning":false ,"scheduled":true }, ...]
Instead of:
e{"type":12003 ,"name":"JobName" ,"sessions":{"endTimeUTC":"" ,"result":-10 ,"creationTimeUTC":"" } ,"isContinuous":0 ,"isRun
ning":false ,"scheduled":true },{"type":12003 ,"name":"JobName" ,"sessions":{"endTimeUTC":"" ,"result":-10 ,"creationTimeUTC"
:"" } ,"isContinuous":0 ,"isRunning":false ,"scheduled":true }, ...]