当我的一个日志文件中的错误计数超过一定限制时,我使用命令抛出特定的退出状态。命令如下:
cd /home/serveradmin/logs/ | ls -trc | grep gateway | tail -1 | xargs cat | grep error | wc -l | awk '{if($1 >= "35000"){print "Critical: ",$1;exit 2} else if ($1 >= "25000") {print "Warning: ",$1;exit 1} else {exit 0} }'
执行命令后,我使用以下命令验证了退出状态(我的命令返回退出代码 1,因为我的文件中的错误计数大于 25000):
echo $?
上述命令返回 1 作为输出。
在我的 nrpe.cfg 文件中,我定义了相同的命令,如下所示:
command[Error_Count]=cd /home/serveradmin/logs/ | ls -trc | grep gateway | tail -1 | xargs cat | grep error | wc -l | awk '{if($1 >= "35000"){exit 2} else if ($1 >= "25000") {exit 1} else {exit 0} }'
我在nagios core中定义了服务如下:
define service {
host_name test_vm
service_description Error_Count
check_command check_nrpe!Error_Count
use generic-service
check_interval 1
}
定义服务后,nagios core 无法从客户端的 nrpe.cfg 文件中定义的命令读取退出状态。
答案1
作为NRPE » 故障排除 » 常见问题 - 无法读取输出说:
此错误意味着 NRPE 未返回任何字符输出。
您的命令退出时带有各种状态代码(2、1 或 0),但它不会发出任何实际输出。
从https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/pluginapi.html,“插件输出规范”说:
插件至少应返回至少一种文本输出。
看到那里红色突出显示,表示所需的“文本输出”。
调整您的awk
代码以在各种条件下发出某种输出:
awk '{
if($1 >= "35000")
{ print "Greater than or equal to 35000"; exit 2}
else if ($1 >= "25000")
{ print "Greater than or equal to 25000"; exit 1}
else
{ print "Less than 25000"; exit 0}
}'