Мы используем установку Nagios для наблюдения за нашей инфраструктурой и множеством веб-сайтов. Мониторинг веб-сайтов осуществляется с помощью check_http
с URL, переданным в качестве параметра. Мы используем это, потому что несколько веб-сайтов размещены в одних и тех же системах, и URL-адреса могут меняться в разумных пределах, поскольку может изменяться URL-ключ продуктов.
Итак, проверки HTTP в основном выглядят так:
define service {
host_name ourhostname
service_description Typo 3
check_command check_http!www.ourdomain.com!/
max_check_attempts 3
check_interval 1
retry_interval 1
check_period 24x7
notification_interval 30
notification_period 24x7
contact_groups developers
}
И вот в чем проблема. Когда возникает проблема, достойная уведомления, sendxmpp вызывается следующим образом:
define command {
command_name notify-service-by-xmpp
command_line echo "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $ARG1$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/sendxmpp -j <server-ip> -u nagios -p <password> $CONTACTPAGER$
}
Где мы пытались использовать $ARG1$
, нам понадобится проверенный URL. Кажется, что в уведомлении есть доступ к стандартным переменным для проблемного объекта (например $HOSTADDRESS$
), но нам нужен URL.
Проблема также может заключаться в том, что я неправильно проверяю URL-адреса. Обычно у вас есть только HOSTADDRESS
запись, но казалось неправильным документировать URL-адреса в определении хоста, а затем добавлять несколько команд для проверки $HOSTADDRESS1$
через $HOSTADDRESS15$
.
Есть ли у кого-нибудь решение о том, как получить доступ к аргументу командной строки, переданному тесту, или лучшую идею о том, как проверить целое количество URL-адресов для одного и того же хоста под разными vhosts, не открывая ни несколько разных команд, ни разные хосты?
Я не знаю, есть ли лучшее решение, но, похоже, это вариант использования пользовательских переменных (ссылка: http://nagios.sourceforge.net/docs/3_0/customobjectvars.html)
Просто добавьте что-то вроде этого в определение вашей службы:
_domain www.ourdomain.com
Затем вы можете использовать его в команде уведомления как $ _DOMAIN $