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

Вложить check_by_ssh в Nagios?

Я пытаюсь контролировать удаленный кластер серверов с одним сервером с общедоступным IP-адресом. Я пытаюсь гнездиться check_by_ssh чтобы проверить такие вещи, как загрузка и т. д. Но независимо от того, какие цитаты и экранирование я делаю, я не могу заставить его работать.

Вот моя последняя попытка:

command_line $USER1$/check_by_ssh -H [gatewayhost] -C '$USER1$/check_by_ssh -H $HOSTADDRESS$ -C "$USER1$/check_load -w $ARG1$ -c $ARG2$"'

Но Nagios жалуется на "не может открыть трубу". Другие комбинации кавычек и обратной косой черты приводят либо к той же ошибке, либо к жалобе на check_by_ssh параметры во внешнем или внутреннем вызове. Как мне заставить это работать?

Я мог бы использовать NRPE Полагаю, но я предпочитаю check_by_ssh.

NRPE - это один из вариантов, который должен работать. Но вы также можете использовать NSCA для настройки распределенный мониторинг где вы запускаете Nagios с демоном NSCA и без веб-интерфейса, на машине с общедоступным IP-адресом на удаленном сайте. Дополнительным преимуществом NSCA является то, что связь по крайней мере зашифрована.

Другой вариант - настроить VPN-туннель между сайтами, после чего вы сможете напрямую контролировать компьютеры в кластере.

Ага, наконец-то разобрался! Спасибо всем за предложения. В конце концов, я решил вместо того, чтобы пытаться использовать кавычки для внутреннего check_by_ssh команда, чтобы вместо этого избежать пробелов. Двойные черные косые черты работали, поэтому последняя рабочая строка nagios.cfg выглядит так:

command_line $USER1$/check_by_ssh -H [gatewayhost] -C "$USER1$/check_by_ssh -H $HOSTADDRESS$ -C $USER1$/check_load\\ -w\\ $ARG1$\\ -c\\ $ARG2$"

Чтобы упростить попытки во всем разобраться, я закончил тем, что написал расширение параметров в сценарий Bash и настраивал его, пока он, наконец, не сработал.

Вы можете настроить простой сценарий проверки на общедоступном сервере, который принимает IP-адрес и команду вторичной проверки. Тогда nagios мог бы вызвать, например: check.sh 192.168.1.12 check_load.

Затем Check.sh отправит ssh на переданный вами IP-адрес, выполнит переданную команду и вернет результат в nagios.

Проверьте правильность настройки ключа для пользователя Nagios:
Я использую check_by_ssh для всех видов проверок, и он отлично работает. Сначала убедитесь, что у вас правильно настроены ключи ssh. Переключитесь на пользователя nagios с точным следующим синтаксисом (я думаю, вам нужны переменные env):

su - nagios

Затем перейдите по ssh в другой ящик, чтобы убедиться, что нет проблем с аутентификацией на основе ключа.

Вопросы цитирования:
Цитирование / расширения иногда бывает немного сложно понять. Ключ к тому, чтобы обойти это, - включить полную отладку, чтобы вы могли видеть, что расширяется. Для этого установите следующие три вещи в вашем nagios.cfg, а затем tail -f ваш файл отладки:

debug_level=-1
# DEBUG VERBOSITY
# This option determines how verbose the debug log out will be.
# Values: 0 = Brief output
#         1 = More detailed
#         2 = Very detailed
debug_verbosity=2
# DEBUG FILE
# This option determines where Nagios should write debugging information.   
debug_file=/usr/local/nagios/var/nagios.debug

Вам может потребоваться фильтрация с помощью grep, потому что в итоге вы получите изрядный объем вывода.

Ссылка для проверки по SSH:
Также для справки и пример рабочей команды check_by_ssh:

command_line $USER1$/check_by_ssh -t 300 -H $HOSTADDRESS$ -C "$USER1$/checkBandwidth.pl -w $_HOSTPARAM_BAND_W$  -c $_HOSTPARAM_BAND_C$ -s 8 -d"

Изменить, возможно, использовать IPTables для обхода вложенности:
О, я пропустил всю часть гнездования ... вздох. В любом случае, проверка ключей с обеих частей, а также журнала отладки. Однако, поскольку вложенный check_by_ssh запускает команду, вы можете не получить нужные вам переменные среды. Вы можете рассмотреть возможность использования iptables на среднем хосте для перенаправления порта, чтобы обойти всю проблему вложенности.

Возможно указание ключевого файла во вложенной проверке по справке. Думаю, может помочь следующий вариант check_by_ssh:

 identity of an authorized key [optional]
 -O, --output=FILE 

Цитирование

check_by_ssh -H $HOSTADDRESS$ -C '$USER1$/check_load -w $ARG1$ -c $ARG2$'"