Задача: Мне чтобы перед руководством не пожимать плечами на вопрос «Что у нас с Web-порталами» и когда они вдруг перестали работать нужно собственный мониторинг работоспособности. Хочу все знать. А значит пора разобрать, как посредством Zabbix сервиса начать мониторить Webресурсы. Плюс у меня есть наработки, как отправлять уведомление на почту и конечно же Telegram. Пусть наш IT-отдел не заинтересован в мониторинге, но только не я.

Сперва все обкатаю на своем тестовом полигоне под управлением Debian 10 + Proxmox 6, а уже потом перенесу наработки на боевой сервис который работает у меня дома базирующемся на моем HP MicroServer Gen8 (E3-Xeon 1265L v2(4 core, 8 threads + 12Gb)

Мои ресурсы:

  • https://win.ekzorchik.ru
  • https://lin.ekzorchik.ru
  • https://net.ekzorchik.ru
  • https://ekzorchik.ru

Вот параметры, за которыми будем наблюдать:

  • доступность сайта
  • время ответа сайта в миллисекундах
  • скорость доступа к сайту
  • работа авторизации на сайте

Шаг №1: Поднимаю на VM своего тестового полигона операционную систему Ubuntu 18.04 Server amd64, а на нее устанавливаю сервис мониторинга Zabbix 4.4 по заметке

Шаг №2: Первым делом создаю шаблон для мониторинга за Webресурсами:

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - Create template

вкладка Template

  • Template name: Template - Monitoring Web-site
  • Groups: Group_Web
  • Description: Мониторинг доступности Web-порталов

вкладка Macros

  • Macro: {$WIN.EKZORCHIK.RU}
  • Value: win.ekzorchik.ru

и нажимаю Add

  • Macro: {$LIN.EKZORCHIK.RU}
  • Value: lin.ekzorchik.ru

и нажимаю Add

  • Macro: {$NET.EKZORCHIK.RU}
  • Value: net.ekzorchik.ru

и нажимаю Add

  • Macro: {$EKZORCHIK.RU}
  • Value: ekzorchik.ru

и нажимаю Add, в ответ должен получить надпись "Macros updates"

Шаг №3: Теперь нужно получить, к примеру на блоге https://win.ekzorchik.ru какой-нибудь не меняющийся текст на основе которого будет вестись проверка, что ресурс доступен:

ekzorchik@srv-zabbix:~$ sudo apt-get install -y curl

ekzorchik@srv-zabbix:~$ curl -v https://win.ekzorchik.ru | egrep -I "Заметки Windows от Ekzorchik" | head -n1

вот по наличию "Заметки Windows от Ekzorchik" на странице и буду проверять, что ресурс доступен.

Шаг №4: Открываем созданный шаблон и переходим на вкладку создания Webсценария:

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site" - "Web scenarios" и создаем новый сценарий проверки "Create web scanerio"

вкладка Scenario

  • Name: {$WIN.EKZORCHIK.RU}
  • New application: Monitoring Site
  • Update interval: 1m
  • Attemps: 3
  • Agent: Zabbix
  • Enabled: отмечаю галочкой

вкладка Steps (указываю параметры шага)

и нажимаю Add

  • Name: Index
  • URL: https://{$WIN.EKZORCHIK.RU}
  • Follow redirects: отмечаю галочкой
  • Timeout: 15s
  • Required string: Заметки Windows от Ekzorchik
  • Required status code: 200
  • и нажимаю Add окна "Step of web scenario"

Результат добавленного шага:

Результат добавленного шага в сценарий проверки Web-узла

и после снова нажимаем "Add" дабы добавить созданный сценарий для хоста win.ekzorchik.ru

На заметку:

• Name — имя шага. В данном случае проверяться будет главная страница сайта, поэтому называю шаг index. Это не принципиально, но названия рекомендую давать осмысленные, чтобы потом было удобно оперировать названиями, к примеру, в триггерах.

• URL — адрес проверяемой страницы.

• Required string — строка на странице, которую будет искать zabbix. Если заббикс ее найдет на странице, будет считать, что с сайтом все в порядке. Если нет — выдаст ошибку.

• Required status codes — требуемый код ответа. Указываю 200. Если заббикс получит какой-то другой код в ответ от web сервера, будет считать, что проверка закончилась неудачей.

Шаг №5: Теперь прикрепляю созданный шаблон "Template - Monitoring Web-site" к хосту, в роли хоста будет выступать сам "Zabbix Server"

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Hosts - перехожу в "Zabbix server" — вкладка Templates - Select - Group: Group_Web и отмечаю галочкой шаблон "Template - Monitoring Web-site", затем нажимаю Select - Update

Шаг №6: Проверяю, что простейшая выше проверка проводит необходимые результаты мониторинга сайта win.ekzorchik.ru

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Monitoring - Latest data -

  • Hosts: Zabbix server
  • Application: Monitoring Site

и нажимаю Apply. Вот данные по мониторингу:

Данные по мониторингу Web-узла через шаг №1

Значение параметра "Failed step of scenario win.ekzorchik.ru" равное 0 означает, что все шаги проверки сайта выполнены без ошибок.

Раз данные идут, то по аналогии выше проделываю настройки для оставшихся блогов.

Шаг №7: Добавим пару графиков к шаблону "Template - Monitoring Web-site":

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site"

вкладка Graphs - Create graph

(Добавим график скорости загрузки главной страницы сайта)

вкладка Graph

  • Name: Download speed for step "Index" of scenario "{$WIN.EKZORCHIK.RU}"
  • Widht: 600
  • Height: 200
  • Graph type: Normal
  • Show legend: отмечаю галочкой
  • Show working time: отмечаю галочкой
  • Show triggers: отмечаю галочкой
  • Y asix MIN value: Fixed : 0.0000
  • Y asix MAX value: Calculated
  • (Items) Add и отмечаем галочкой элемент данных "Download speed for step "Index" of scenario "win.ekzorchik.ru", затем нажимаю Select
  • Function: min
  • Dray style: Gradient line
  • Y axis site: Left
  • Colour: BF00FF

и после нажимаю Add

Добавим график скорости загрузки главной страницы сайта

(Добавить график времени отклика сайта)

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site"

вкладка GraphsCreate graph вкладка Graph

  • Name: Response time for step "Index" of scenario "win.ekzorchik.ru"

Добавим график времени отклика сайта

Шаг №8: Также хотелось бы мониторить тот факт, что форма авторизации работает и насколько быстро или медленно, а для этого нужно получить строку авторизации.

настроить в zabbix мониторинг сайта с авторизацией, надо правильно сформировать post запрос для этой самой авторизации.

Т.к. у меня на основной системе стоит Ubuntu 18.04 Desktop amd64 + браузер Google Chrome, то открываю еще одну вкладку и указываю в URL-адресе страницу авторизации на своем портале: https://win.ekzorchik.ru/wp-login.php, затем открываю настройки "Настройка и управление Google Chrome" - Дополнительные инструменты - Инструменты разработчика — вкладка Network

Дабы отловить передаваемые данные для запроса, указываю на доступ неактуальные данные на вход, т.е.

  • Имя пользователя или email: alektest
  • Пароль: alektest

и нажимаю «Войти«, конечно же авторизация не проходит. Теперь смотрю на вкладке Network заголовки: Headers - Form Data - view source и вижу строку аутентификации:

log=alektest&pwd=alektest&wp-submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&redirect_to=https%3A%2F%2Fwin.ekzorchik.ru%2Fwp-admin%2F&testcookie=1

Анализируем форму на Web-портале дабы определить строку POST-запроса

Шаг №9: Создаю шаг авторизации для своего портала:

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site" - "Web scenarios" - {$WIN.EKZORCHIK.RU} — вкладка Steps - Add

  • Name: Auth
  • URL: https://{$WIN.EKZORCHIK.RU}/wp-login.php
  • Post type: Raw data
  • Raw post: log=<username>&pwd=<password>&wp-admin.php
  • Follow redirects: отмечаю галочкой
  • Required status code: 200

и нажимаю Add окна "Step of web scenario", а после "Update"

Шаг №10: Проверяю, что проверка авторизации приносит необходимые результаты мониторинга сайта win.ekzorchik.ru

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Monitoring - Latest data -

  • Hosts: Zabbix server
  • Application: Monitoring Site

и нажимаю Apply. Вот данные по мониторингу:

Данные по мониторингу авторизации

Отлично. Также для этого шага можно настроить построение графика, в частности для элемент данных "Response time for step "Auth" of scenario "win.ekzorchik.ru"."

График времени ответа после авторизации

На заметку: Правильным будет создание на портале отдельного пользователя под которым и будет проходить проверка авторизации.

Шаг №11: Не лишим будем мониторить содержимое после авторизации на ресурсе, к примеру созданный пост помеченный как "Личное: ZabbixMonitoring"

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site" - "Web scenarios" - {$WIN.EKZORCHIK.RU} — вкладка Steps - Add

  • Name: Auth Index
  • URL: https://{$WIN.EKZORCHIK.RU}/2020/04/24/zabbixmonitoring/
  • Timeout: 15s
  • Required string: Личное: ZabbixMonitoring
  • Required status code: 200

и нажимаю Add окна "Step of web scenario", а после "Update"

Шаги сценария идут по порядку

На заметку: Шаги выполняются последовательно. На первом шаге мы только авторизовываемся, на втором проверяем страницу, доступную уже после авторизации

Шаг №12: Проверяю, время ответа и получение запроса страницы после авторизации:

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Monitoring - Latest data -

  • Hosts: Zabbix server
  • Application: Monitoring Site

и нажимаю Apply. Вот данные по мониторингу:

Мониторинг содержимого после авторизации

Очень кстати хорошо.

По аналогии выше также создаем график для "Response time for step "Auth Index" of scenario "win.ekzorchik.ru"." & "Download speed for step "Auth Index" of scenario "win.ekzorchik.ru"."

Шаг №13: А вот теперь самый ответственный момент это получение оповещения в случае если ресурс не доступен:

Мне кажется, что сперва разберу, как:

1. О низкой скорости доступа к сайту.

2. О недоступности сайта вообще (Если среднее значение 3-х последних проверок больше, либо равно единице, то срабатывает оповещение о недоступности сайта.) Триггер сработает только если все 3 последних проверки не равны нулю

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site" - Triggers - Create trigger

Name: Site win.ekzorchik.ru is down

Severity: High

Expression: Add -

Item: Select - выбираю "Template - Monitoring Web-site: Failed step of scenario "win.ekzorchik.ru"

Function: avg() - Average value of a period T

Last of (T): 3 Count

Result: >=1

и нажимаю Insert

после чего выражение Expression примет вид: "{Template - Monitoring Web-site:web.test.fail[{$WIN.EKZORCHIK.RU}].avg(#3)}>=1"

OK event generation: Recovery expression

Recovery expression: {Template - Monitoring Web-site:web.test.fail[{$WIN.EKZORCHIK.RU}].last()}=0

PROBLEM event generation mode: Single

OK event closes: All problems

Enabled: отмечаю галочкой

и нажимаю Add

Скриншот настроек выше для наглядности

Триггер доступности Web-узла

Шаг №14: Настраиваем проверку времени ответа сервера:

Пробую реализовать такую схему:

Беру среднее время отклика сайта и умножаю его на 3. Далее смотрю последние 7 проверок. Если в 5 проверках среди этих семи были значения выше, чем утроенное среднее время отклика, то считаю, что сайт тормозит и надо слать уведомление.

http://IP&DNS/zabbix (http://172.33.33.17/zabbix) - user&pass - Configuration - Templates - "Template - Monitoring Web-site" - Triggers - Create trigger

  • Name: Response time to win.ekzorchik.ru is too low
  • Severity: Warning
  • Problem expression: {Template - Monitoring Web-site:web.test.time[{$WIN.EKZORCHIK.RU},Index,resp].count(#7,1.5,"ge")}>4
  • OK event generation: Recovery expression
  • Recovery expression: {Template - Monitoring Web-site:web.test.time[{$WIN.EKZORCHIK.RU},Index,resp].count(#3,1.5,"lt")}>1
  • PROBLEM event generation mode: Single
  • OK event closes: All Problems
  • Enabled: отмечаю галочкой

и нажимаю Add.

На заметку: В выражениях выше 1.5 это время отклика в секундах.

Отлично это заметка познакомила меня со многим чего я вроде как ранее не использовал, но сейчас на основе чужого опыта и собственных наработок я могу дополнять данный шаблон и использовать в своих целях. Круто!!!

Шаг №15: Экраны нужных Вам графиков создадим если нужно сами.

Шаг №16: Так, а что на счет оповещения на почту и Telegram, а все это у меня уже разобрано в заметках:

Мой шаблон: Template_Monitoring_Web_site

На этом данная заметка завершена. По мере решению проблем она будет либо дописываться, либо создаться новой, но со ссылкой на эту, как исходную. С уважением автор блога Олло Александр aka ekzorchik.