0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>В наш век всепоглощающих web-интерфейсов очень часто перед системными администраторами встаёт, на первый взгляд, непонятная с точки зрения объёмов задача: как проверять работоспособность сайта?</p>
1
<p>В наш век всепоглощающих web-интерфейсов очень часто перед системными администраторами встаёт, на первый взгляд, непонятная с точки зрения объёмов задача: как проверять работоспособность сайта?</p>
2
<p>Практически все вспомнят про мониторинг<strong>80/TCP</strong>(HTTP-версия) и<strong>443/TCP</strong>(HTTPS-версия) портов web-сервера. Из них процентов 80% наверняка вспомнят, что с той стороны должен при этом трудиться<strong>Apache/NGINX</strong>обеспечивающий первоначальную работоспособность этого комплекса и т.д.</p>
2
<p>Практически все вспомнят про мониторинг<strong>80/TCP</strong>(HTTP-версия) и<strong>443/TCP</strong>(HTTPS-версия) портов web-сервера. Из них процентов 80% наверняка вспомнят, что с той стороны должен при этом трудиться<strong>Apache/NGINX</strong>обеспечивающий первоначальную работоспособность этого комплекса и т.д.</p>
3
<p>Службы (они же демоны) обеспечивающие работоспособность frontend и backend частей сайта обкладывать мониторингом безусловно надо. Но как быть, если в тех. поддержку поступает звонок с воплями "Ваш магазин отображает какую-то фигню, а я всего лишь хочу сделать заказ! Мне надо срочно!!! Почините немедленно!", а web-разработчики разводят руками и говорят "У нас всё нормально, это админы что-то с нашим прекрасным магазином сделали!".</p>
3
<p>Службы (они же демоны) обеспечивающие работоспособность frontend и backend частей сайта обкладывать мониторингом безусловно надо. Но как быть, если в тех. поддержку поступает звонок с воплями "Ваш магазин отображает какую-то фигню, а я всего лишь хочу сделать заказ! Мне надо срочно!!! Почините немедленно!", а web-разработчики разводят руками и говорят "У нас всё нормально, это админы что-то с нашим прекрасным магазином сделали!".</p>
4
<h2>Введение</h2>
4
<h2>Введение</h2>
5
<p><em>Админ, помни - за тобой могут придти</em></p>
5
<p><em>Админ, помни - за тобой могут придти</em></p>
6
<p>Вроде бы понятное предупреждение, но все-таки хочется находится в кабинете в компании коллег, а не разъяренных начальников в компании с соседями из кабинета напротив.</p>
6
<p>Вроде бы понятное предупреждение, но все-таки хочется находится в кабинете в компании коллег, а не разъяренных начальников в компании с соседями из кабинета напротив.</p>
7
<h2>Думаем на будущее</h2>
7
<h2>Думаем на будущее</h2>
8
<p>Прежде чем взять web-сервис на мониторинг, требуйте описание метрик его работоспособности, но при этом думайте шире повторяя как заклинание "Они наверняка что-то недоговаривают. Где-то возможны подводные камни". Паранойя не должна быть абсолютной, но в умеренном количестве жизненно необходима.</p>
8
<p>Прежде чем взять web-сервис на мониторинг, требуйте описание метрик его работоспособности, но при этом думайте шире повторяя как заклинание "Они наверняка что-то недоговаривают. Где-то возможны подводные камни". Паранойя не должна быть абсолютной, но в умеренном количестве жизненно необходима.</p>
9
<p>Рассмотрим пример с общедоступным всем в РФ сайтом поиска от Яндекс (yandex.ru). Чтобы быть уверенным, что он открывается правильно, нужно знать, какие кусочки web-страницы не меняются ни при каких условиях и при этом отображаются только если он работает.</p>
9
<p>Рассмотрим пример с общедоступным всем в РФ сайтом поиска от Яндекс (yandex.ru). Чтобы быть уверенным, что он открывается правильно, нужно знать, какие кусочки web-страницы не меняются ни при каких условиях и при этом отображаются только если он работает.</p>
10
<p>Так как лёгких путей мы не ищем, воспользуемся<strong>curl</strong>-ом с ключом "-v", потому что иначе мы не увидим важную для настройки мониторинга информацию:</p>
10
<p>Так как лёгких путей мы не ищем, воспользуемся<strong>curl</strong>-ом с ключом "-v", потому что иначе мы не увидим важную для настройки мониторинга информацию:</p>
11
$ curl -v yandex.ru * Rebuilt URL to: yandex.ru/ * Trying 5.255.255.80... * TCP_NODELAY set * Connected to yandex.ru (5.255.255.80) port 80 (#0) GET / HTTP/1.1 Host: yandex.ru User-Agent: curl/7.58.0 Accept: */* HTTP/1.1 302 Found Date: Wed, 25 Jul 2018 18:10:54 GMT Cache-Control: no-cache,no-store,max-age=0,must-revalidate Location: https://yandex.ru/ Expires: Wed, 25 Jul 2018 18:10:55 GMT Last-Modified: Wed, 25 Jul 2018 18:10:55 GMT P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI" Set-Cookie: yandexuid=7233814731532542254; Expires=Sat, 22-Jul-2028 18:10:54 GMT; Domain=.yandex.ru; Path=/ X-Content-Type-Options: nosniff Content-Length: 0 * Connection #0 to host yandex.ru left intact<p>Итак, исходя из вывода<strong>curl</strong>-а мы можем вывести первый признак работоспособности. При запросе http://yandex.ru (то, что мы обращались к сайту по HTTP, свидетельствует 80-й порт в выводе) срабатывает переадресация<a>по коду 302</a>на HTTPS-версию сайта.</p>
11
$ curl -v yandex.ru * Rebuilt URL to: yandex.ru/ * Trying 5.255.255.80... * TCP_NODELAY set * Connected to yandex.ru (5.255.255.80) port 80 (#0) GET / HTTP/1.1 Host: yandex.ru User-Agent: curl/7.58.0 Accept: */* HTTP/1.1 302 Found Date: Wed, 25 Jul 2018 18:10:54 GMT Cache-Control: no-cache,no-store,max-age=0,must-revalidate Location: https://yandex.ru/ Expires: Wed, 25 Jul 2018 18:10:55 GMT Last-Modified: Wed, 25 Jul 2018 18:10:55 GMT P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI" Set-Cookie: yandexuid=7233814731532542254; Expires=Sat, 22-Jul-2028 18:10:54 GMT; Domain=.yandex.ru; Path=/ X-Content-Type-Options: nosniff Content-Length: 0 * Connection #0 to host yandex.ru left intact<p>Итак, исходя из вывода<strong>curl</strong>-а мы можем вывести первый признак работоспособности. При запросе http://yandex.ru (то, что мы обращались к сайту по HTTP, свидетельствует 80-й порт в выводе) срабатывает переадресация<a>по коду 302</a>на HTTPS-версию сайта.</p>
12
<h2>Зачем это проверять, если оно и так должно работать?</h2>
12
<h2>Зачем это проверять, если оно и так должно работать?</h2>
13
<p>Дело в том, что когда пользователь вбивает в адресной строке URL, ему фиолетово, через какой протокол он будет работать. Однако web-сервис на пару с его разработчиком могут придерживаться другого мнения на этот счёт.</p>
13
<p>Дело в том, что когда пользователь вбивает в адресной строке URL, ему фиолетово, через какой протокол он будет работать. Однако web-сервис на пару с его разработчиком могут придерживаться другого мнения на этот счёт.</p>
14
<h2>Что-то еще или уже хватит?</h2>
14
<h2>Что-то еще или уже хватит?</h2>
15
<p>Нет, не хватит. Мы же хотим быть уверенными, что переадресация ведет куда надо - раз. И два - при открытии https://yandex.ru напрямую (вдруг кто-то добавил страницу в избранное) сайт тоже должен нормально открываться.</p>
15
<p>Нет, не хватит. Мы же хотим быть уверенными, что переадресация ведет куда надо - раз. И два - при открытии https://yandex.ru напрямую (вдруг кто-то добавил страницу в избранное) сайт тоже должен нормально открываться.</p>
16
<h2>Наконец-то настройка</h2>
16
<h2>Наконец-то настройка</h2>
17
<p>Долго готовились, а теперь пора настроить то ради чего это все затевалось - мониторинг web-страниц Zabbix-ом. Сразу оговорюсь - в этом руководстве я исхожу из того, что у вас уже есть настроенный узел сети (он же host), в который надо просто добавить web-сценарий проверки.</p>
17
<p>Долго готовились, а теперь пора настроить то ради чего это все затевалось - мониторинг web-страниц Zabbix-ом. Сразу оговорюсь - в этом руководстве я исхожу из того, что у вас уже есть настроенный узел сети (он же host), в который надо просто добавить web-сценарий проверки.</p>
18
<p>Дальше будет много скриншотов.</p>
18
<p>Дальше будет много скриншотов.</p>
19
<p>Настраиваем сценарий (задаем имя сценария, частоту проверки и при необходимости иные параметры)</p>
19
<p>Настраиваем сценарий (задаем имя сценария, частоту проверки и при необходимости иные параметры)</p>
20
<p>Создаем шаги: Первый шаг - запрещаем переход по редиректам и проверяем код ответа</p>
20
<p>Создаем шаги: Первый шаг - запрещаем переход по редиректам и проверяем код ответа</p>
21
<p>Второй шаг - тоже что и выше, но теперь разрешаем редиректы и помимо кода ответа проверяем наличие какой-то строки, которая укажет на то, что страница загружается штатно.</p>
21
<p>Второй шаг - тоже что и выше, но теперь разрешаем редиректы и помимо кода ответа проверяем наличие какой-то строки, которая укажет на то, что страница загружается штатно.</p>
22
<p>Третий шаг - запрещаем переходы по редиректам и проверяем HTTPS версию (код ответа и наличие строки указывающей на работоспособность сайта)</p>
22
<p>Третий шаг - запрещаем переходы по редиректам и проверяем HTTPS версию (код ответа и наличие строки указывающей на работоспособность сайта)</p>
23
<p>Теперь создадим триггер, который проверяет, что сценарий отработал успешно. Коротко суть: 1) ITEM.VALUE указатель на первое из двух выражений триггера (если нужно использовать несколько выражений или конкретное по номеру, то нужно использовать порядковые номера. Например - ITEM.VALUE3); 2) Выражения триггера - первое проверяет на что сообщение об ошибке не пустое, а второе что номер проваленного шага не 0 (если 0, значит проверка завершена успешно).</p>
23
<p>Теперь создадим триггер, который проверяет, что сценарий отработал успешно. Коротко суть: 1) ITEM.VALUE указатель на первое из двух выражений триггера (если нужно использовать несколько выражений или конкретное по номеру, то нужно использовать порядковые номера. Например - ITEM.VALUE3); 2) Выражения триггера - первое проверяет на что сообщение об ошибке не пустое, а второе что номер проваленного шага не 0 (если 0, значит проверка завершена успешно).</p>
24
<p>Если вдруг триггер сработает, то выглядеть это будет примерно вот так (для проверки я изменил один из ожидаемых кодов ответа в сценарии на заведомо неверный):</p>
24
<p>Если вдруг триггер сработает, то выглядеть это будет примерно вот так (для проверки я изменил один из ожидаемых кодов ответа в сценарии на заведомо неверный):</p>
25
<p>Вообще это очень гибкий инструмент Zabbix-а. Из сложного вспоминается возможность выполнения WSDL-запросов с авторизацией на целевом сервере по SSL-сертификату, но по понятным причинам типовых сценариев использования таких возможностей нет.</p>
25
<p>Вообще это очень гибкий инструмент Zabbix-а. Из сложного вспоминается возможность выполнения WSDL-запросов с авторизацией на целевом сервере по SSL-сертификату, но по понятным причинам типовых сценариев использования таких возможностей нет.</p>
26
<h2>Напоследок</h2>
26
<h2>Напоследок</h2>
27
<p>Настройка мониторинга - задача в каком-то смысле творческая. Не запирайте себя в шаблонах и всегда ищите новые возможности использования имеющихся инструментов.</p>
27
<p>Настройка мониторинга - задача в каком-то смысле творческая. Не запирайте себя в шаблонах и всегда ищите новые возможности использования имеющихся инструментов.</p>
28
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
28
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
29
29