我想直接从 Nagios 服务文件调用命令,而不是笨拙地将参数传递给 command.cfg。例如,我想这样做:
define service {
service_description footest
check_command $USER1$/check_http example.com -u http://example.com/index.html
use generic-service
host_name example
}
但我得到了:
Error: Service check command '/usr/share/nagios/libexec/check_http example.com -u http://example.com/index.html' specified in service 'footest' for host 'example' not defined anywhere!
答案1
如果你坚持要这么做,这是一个非常非常糟糕的想法,这个片段应该工作:
define command {
command_name check_by_arbitrary_path
check_command /bin/sh -c "$ARG1$"
}
define service {
use remote-service
host_name example
service_description This is a bad idea, seriously
check_command check_by_arbitrary_path!$USER1$/check_http example.com -u http://example.com/index.html
}
但说实话,请不要这么做。
答案2
我已经成功使用commands.cfg中的check_any命令定义
define command {
command_name check_any
command_line $USER1$/check_$ARG1$
}
我使用它的定义如下:
define service {
service_description Forest is not on fire
check_command check_any!forest --on-fire=false
use generic-service
host_name example
}
答案3
您需要将其分成两部分,第一部分是 check_command,第二部分是检查本身。
创建模板来检查 URL:
define command {
command_name check_http_url
command_line $USER1$/check_http -I'$HOSTADDRESS$' -u '$ARG1$'
}
使用模板检查特定的 URL(本例中为 www.example.com):
define service {
host_name example
service_description Check www.example.com URL
check_command check_http_url!www.example.com
use generic-service
}
答案4
Nagios 的最佳实践是将检查拆分为命令和检查,check_command 定义为如下命令
define command {
command_name footest
command_line $USER1$/footest -a some-fixed-option -b $ARG1$ -c $ARG2$
}
然后才可以将其用于服务检查。