Задача: Мне чтобы перед руководством не пожимать плечами на вопрос «Что у нас с 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"
Результат добавленного шага:
и после снова нажимаем "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
. Вот данные по мониторингу:
Значение параметра "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"
вкладка Graphs
— Create 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
Шаг №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
Скриншот настроек выше для наглядности
Шаг №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
, а все это у меня уже разобрано в заметках:
- Настройка Telegram для уведомления в Zabbix Server 4.4
- Настройка оповещения через Email в Zabbix Server 4.4
- Проблемы с отправкой уведомления на почту из Zabbix Server 4.4
Мой шаблон: Template_Monitoring_Web_site
На этом данная заметка завершена. По мере решению проблем она будет либо дописываться, либо создаться новой, но со ссылкой на эту, как исходную. С уважением автор блога Олло Александр aka ekzorchik.