check_nrpe 将返回码 1 视为 OK
Posted
技术标签:
【中文标题】check_nrpe 将返回码 1 视为 OK【英文标题】:check_nrpe treats return code 1 as OK 【发布时间】:2018-08-01 10:16:43 【问题描述】:我有一个通过 check_nrpe 调用的 powershell 脚本。当我进行被动检查时,我看到退出代码/返回值为 1,但它仍被视为状态 OK 而不是 CRITICAL。
基本上这个脚本只是检查目标文件夹 ..\bar 是否为空。如果它为空,则脚本返回“0”,触发 Nagios 中的 OK 状态。如果它的文件在等待 25 秒后仍不移动,则返回“1”,这会在 Nagios 中触发 CRITICAL 状态。
我在文件夹中保留了几个文件,可以看到返回值为 '1'。但是 nagios 仍然将其视为状态 OK。
使用以下命令进行被动检查。
$ /usr/lib64/nagios/plugins/check_nrpe -H 10.XX.X.XXX -c check_kpis -t 30
输出
1
脚本如下。
$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"
$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
$contents.Name | Out-File -FilePath $flagged1
Start-Sleep -s 25
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents.Name | Out-File -FilePath $flagged2
if ( $contents.count -gt 0 )
$diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual
If ($diff.SideIndicator -eq "==")
return 1
exit
else
return 0
exit
else
return 0
exit
else
return 0
exit
谁能建议这里有什么问题?
【问题讨论】:
【参考方案1】:决定状态的是 EXIT 代码,您使用的 return 甚至不在函数中。这样的东西会更好
$path = "D:\foo\bar"
$flagged1 = "D:\temp\flag1.txt"
$flagged2 = "D:\temp\flag2.txt"
$contents = Get-ChildItem -Path $path -Force -Recurse
if ( $contents.count -gt 0 )
$contents.Name | Out-File -FilePath $flagged1
Start-Sleep -s 25
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents.Name | Out-File -FilePath $flagged2
if ( $contents.count -gt 0 )
$diff = Compare-Object -ReferenceObject $(Get-Content $flagged1) -DifferenceObject $(Get-Content $flagged2) -IncludeEqual
If ($diff.SideIndicator -eq "==")
echo 1
exit 1
else
echo 0
exit 0
else
echo 0
exit 0
else
echo 0
exit 0
【讨论】:
【参考方案2】:当你在 Nsclint.ini 文件中定义你的 powershell 命令时,你必须像这样定义你的脚本:
check_esomething=cmd /c echo scripts\check_something.ps1; exit($lastexitcode) | powershell.exe -command -
因此您必须在定义中添加“exit($lastexitcode)”语句。
享受吧!
【讨论】:
以上是关于check_nrpe 将返回码 1 视为 OK的主要内容,如果未能解决你的问题,请参考以下文章
G-WAN - 如果请求 URL = 541+ 个字符,如何返回状态码:200 OK?