Назад | Перейти на главную страницу

Избегайте Nagios commands.cfg

Я хочу вызвать команду непосредственно из служебного файла Nagios, вместо того, чтобы неуклюже передавать аргументы в commands.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!

Если вы абсолютно настаиваете на этом, а это действительно ужасная идея, этот фрагмент должен работай:

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
}

Если серьезно, пожалуйста, не надо.

Я добился успеха с определением команды check_any в commands.cfg

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
}

Вам нужно разбить его на две части: первая - это 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
    } 

Лучшая практика Nagios - разделить вашу проверку на команду и проверить, check_command определяется как команда типа

define command {
    command_name footest
    command_line $USER1$/footest -a some-fixed-option -b $ARG1$ -c $ARG2$
}

прежде, чем его следует использовать при сервисной проверке.