避免使用 Nagios 命令.cfg

避免使用 Nagios 命令.cfg

我想直接从 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$
}

然后才可以将其用于服务检查。

相关内容