Я пытаюсь отслеживать статус HTTP со страницей 404 или 403. Как вы все знаете, Monit воспринимает эти страницы как неудачное соединение, но как я могу это изменить. Я просто хочу следить за тем, чтобы отображалась страница 404 или 403.
Мне нужно проверить это с помощью этой конфигурации, если это возможно.
Это моя контрольная конфигурация:
check process httpd with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host hostname port 80
protocol HTTP request "/"
then exec "/bin/bash -c '/bin/echo -e "hostname\thttpd\t3\tFAILED" | /usr/sbin/send_nsca -H nagiosserver -c /etc/send_nsca.cfg; /usr/bin/monit restart nginx;'"
Начиная с версии 5.8, в Monit есть status
вариант:
ПОЛОЖЕНИЕ ДЕЛ Параметр может использоваться для явной проверки кода состояния HTTP, возвращаемого сервером HTTP. Если не используется, проверка протокола http завершится ошибкой, если возвращенный код состояния больше или равен 400. Это поведение можно переопределить, используя квалификатор состояния.
Например, чтобы проверить, что страница не существует (в этом случае должен быть возвращен 404):
if failed port 80 protocol http request "/non/existent.php" status = 404 then alert
В status
у меня не получилось (monit 5.6). Думаю, от 5.8 поддерживается?
В итоге я получил скрипт, который использует curl:
#!/bin/bash
# source: /etc/monit/bin/http-check.sh
url="http://user:password@domain.com/test_link/index.php"
response=$(curl -sL -w "%{http_code}\\n" $url | grep 404)
if [ "$response" = "404" ]
then
exit 0
else
exit 1
fi
Затем я добавил следующую конфигурацию монитора
check program http-check with path "/etc/monit/bin/http-check.sh"
if status != 0
then alert