Мониторинг веб-серверов (постановка)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| (не показаны 8 промежуточных версий 1 участника) | |||
| Строка 8: | Строка 8: | ||
===Как это работает=== | ===Как это работает=== | ||
| − | # Решение устанавливается на | + | # Решение устанавливается на компьютер, где имеется исходящий доступ в интернет и постоянно запущен [[gedemin.exe]] в режиме веб-сервера. |
# В базе данных прописывается список предприятий. Для каждого указывается список веб-серверов с адресами и используемыми решениями. | # В базе данных прописывается список предприятий. Для каждого указывается список веб-серверов с адресами и используемыми решениями. | ||
| − | # По расписанию (с использованием [[Автозадача|автозадач]]) запускается скрипт-функция, которая поочередно опрашивает все сервера. Полученные ответы или коды ошибок, если сервер не доступен, записываются в таблицу лога. | + | # По расписанию (с использованием [[Автозадача|автозадач]]) запускается скрипт-функция, которая поочередно опрашивает все сервера. Полученные ответы или коды ошибок, если сервер не доступен, записываются в таблицу лога. Для каждого сервера мы храним два url. Один -- это быстрая проверка доступности сервера. Ее можно вызывать часто без угрозы снижения производительности сервера. Второй -- получение статистики. У нему будем обращаться не чаще одного раза в сутки. |
# При обнаружении ошибки, системный администратор оповещается через email. | # При обнаружении ошибки, системный администратор оповещается через email. | ||
# Через веб-интерфейс можно получить доступ к панели мониторинга, где выводится список серверов их текущее состояние и накопленная статистика. Веб-интерфейс защищен логином и паролем. | # Через веб-интерфейс можно получить доступ к панели мониторинга, где выводится список серверов их текущее состояние и накопленная статистика. Веб-интерфейс защищен логином и паролем. | ||
| Строка 20: | Строка 20: | ||
Список серверов '''USR$WEBM_SERVER''': | Список серверов '''USR$WEBM_SERVER''': | ||
| − | id | + | id dintkey, |
| − | usr$name | + | usr$name dname, |
| − | usr$ip | + | usr$ip gd_dipaddress, |
| − | usr$ | + | usr$checkurl dtext255 NOT NULL, |
| − | usr$companykey | + | usr$staturl dtext255 NOT NULL, |
| − | usr$email | + | usr$login dtext40, |
| − | disabled | + | usr$password dtext40, |
| + | usr$companykey dintkey, | ||
| + | usr$email dtext255, | ||
| + | usr$note_text dtext4096, -- текст письма сисадминам. Если не указан, применяется дефолтный | ||
| + | disabled ddisabled | ||
Лог '''USR$WEBM_LOG''': | Лог '''USR$WEBM_LOG''': | ||
| − | id | + | id dintkey, |
| − | usr$timestamp | + | usr$timestamp dtimestamp_notnull, |
| − | usr$serverkey | + | usr$serverkey dintkey, |
| − | usr$ | + | usr$url dtext255 NOT NULL, -- полный УРЛ, по которому обращались |
| − | usr$code | + | usr$code dinteger_notnull, -- HTTP код |
| − | usr$ | + | usr$response_time dinteger_notnull -- в миллисекундах, время обработки запроса |
| + | Данные '''USR$WEBM_LOGDATA''': | ||
| + | |||
| + | id dintkey, | ||
| + | usr$logkey dintkey, | ||
| + | usr$field dname, | ||
| + | usr$intvalue INTEGER, | ||
| + | usr$dblvalue DOUBLE PRECISION, | ||
| + | usr$tsvalue TIMESTAMP, | ||
| + | usr$varcharvalue VARCHAR(1024) | ||
| + | |||
| + | Схема организации данных в таблицах USR$WEBM_LOG и USR$WEBM_LOGDATA подобна применяемой в таблицах [[GD_WEBLOG]] и [[GD_WEBLOGDATA]]. | ||
| + | |||
| + | ===Организация интерфейса пользователя=== | ||
| + | |||
| + | Указанные выше таблицы, являются таблицами соответствующих бизнес-классов, для которых интерфейс пользователя (форма просмотра и диалоговок окно) строится стандартным образом. | ||
| + | |||
| + | ===Пример обмена данными=== | ||
| + | |||
| + | Запрос: | ||
| + | |||
| + | GET http://some.ip/get_stat_url_v1 | ||
| + | |||
| + | Со временем может появиться другая процедура статистики или другая версия этой процедуры. Для того, чтобы несколько могли уживаться на одной базе, у каждой будет свой URL. Запрос может быть без параметров. В этом случае процедура сама знает за какой период посчитать и вернуть статистику. | ||
| + | |||
| + | Ответ сервера: | ||
| + | |||
| + | { | ||
| + | version: 1; | ||
| + | date_begin: '01.04.2017'; | ||
| + | date_end: '01.05.2017'; | ||
| + | active_clients: 567; | ||
| + | request_server: 2418; | ||
| + | } | ||
| + | |||
| + | Поле с номером версии обязательно и всегда присутствует. По нему мы определяем что находится в нашей структуре. | ||
| + | |||
| + | Как указананная выше информация будет записана в базу данных: | ||
| + | |||
| + | USR$WEBM_SERVER | ||
| + | |||
| + | id = 1 | ||
| + | name = Сервер предприятия | ||
| + | ... | ||
| + | |||
| + | USR$WEBM_LOG | ||
| + | |||
| + | id = 365 | ||
| + | usr$serverkey = 1 | ||
| + | usr$timestamp = 12.12.2017 13:00 | ||
| + | ... | ||
| + | |||
| + | USR$WEBM_LOGDATA | ||
| + | |||
| + | id = 3645 | ||
| + | usr$logkey = 365 | ||
| + | usr$field = 'version' | ||
| + | usr$intvalue = 1 | ||
| + | ... | ||
| + | id = 36457 | ||
| + | usr$logkey = 365 | ||
| + | usr$field = 'date_begin' | ||
| + | usr$tsvalue = '01.01.2017' | ||
| + | ... | ||
===Веб-интерфейс=== | ===Веб-интерфейс=== | ||
| + | |||
| + | Пример организации веб-интерфейса. Цветовое выделение сразу позволяет обратить внимание на недоступные и проблемные сервера. | ||
http://gsbelarus.com/gs/images/gs/2017/webm_1.png | http://gsbelarus.com/gs/images/gs/2017/webm_1.png | ||
Текущая версия на 18:07, 5 июня 2017
Мониторинг реализуется ввиде прикладного решения на платформе Гедымин со следующей функциональностью:
- Ведение базы данных предприятий, где Гедымин используется как веб-сервер.
- Мониторинг и логирование состояния веб-серверов по установленному расписанию.
- Автоматическое оповещение системного администратора о выявленных проблемах.
- Предоставление разработчику или администратору веб-интерфейса для контроля за состоянием серверов.
[править] Как это работает
- Решение устанавливается на компьютер, где имеется исходящий доступ в интернет и постоянно запущен gedemin.exe в режиме веб-сервера.
- В базе данных прописывается список предприятий. Для каждого указывается список веб-серверов с адресами и используемыми решениями.
- По расписанию (с использованием автозадач) запускается скрипт-функция, которая поочередно опрашивает все сервера. Полученные ответы или коды ошибок, если сервер не доступен, записываются в таблицу лога. Для каждого сервера мы храним два url. Один -- это быстрая проверка доступности сервера. Ее можно вызывать часто без угрозы снижения производительности сервера. Второй -- получение статистики. У нему будем обращаться не чаще одного раза в сутки.
- При обнаружении ошибки, системный администратор оповещается через email.
- Через веб-интерфейс можно получить доступ к панели мониторинга, где выводится список серверов их текущее состояние и накопленная статистика. Веб-интерфейс защищен логином и паролем.
[править] Структуры данных
Данные предприятия хранятся в стандартном справочнике клиентов. Таблицы GD_CONTACT, GD_COMPANY.
Список серверов USR$WEBM_SERVER:
id dintkey, usr$name dname, usr$ip gd_dipaddress, usr$checkurl dtext255 NOT NULL, usr$staturl dtext255 NOT NULL, usr$login dtext40, usr$password dtext40, usr$companykey dintkey, usr$email dtext255, usr$note_text dtext4096, -- текст письма сисадминам. Если не указан, применяется дефолтный disabled ddisabled
Лог USR$WEBM_LOG:
id dintkey, usr$timestamp dtimestamp_notnull, usr$serverkey dintkey, usr$url dtext255 NOT NULL, -- полный УРЛ, по которому обращались usr$code dinteger_notnull, -- HTTP код usr$response_time dinteger_notnull -- в миллисекундах, время обработки запроса
Данные USR$WEBM_LOGDATA:
id dintkey, usr$logkey dintkey, usr$field dname, usr$intvalue INTEGER, usr$dblvalue DOUBLE PRECISION, usr$tsvalue TIMESTAMP, usr$varcharvalue VARCHAR(1024)
Схема организации данных в таблицах USR$WEBM_LOG и USR$WEBM_LOGDATA подобна применяемой в таблицах GD_WEBLOG и GD_WEBLOGDATA.
[править] Организация интерфейса пользователя
Указанные выше таблицы, являются таблицами соответствующих бизнес-классов, для которых интерфейс пользователя (форма просмотра и диалоговок окно) строится стандартным образом.
[править] Пример обмена данными
Запрос:
GET http://some.ip/get_stat_url_v1
Со временем может появиться другая процедура статистики или другая версия этой процедуры. Для того, чтобы несколько могли уживаться на одной базе, у каждой будет свой URL. Запрос может быть без параметров. В этом случае процедура сама знает за какой период посчитать и вернуть статистику.
Ответ сервера:
{
version: 1;
date_begin: '01.04.2017';
date_end: '01.05.2017';
active_clients: 567;
request_server: 2418;
}
Поле с номером версии обязательно и всегда присутствует. По нему мы определяем что находится в нашей структуре.
Как указананная выше информация будет записана в базу данных:
USR$WEBM_SERVER id = 1 name = Сервер предприятия ... USR$WEBM_LOG id = 365 usr$serverkey = 1 usr$timestamp = 12.12.2017 13:00 ... USR$WEBM_LOGDATA id = 3645 usr$logkey = 365 usr$field = 'version' usr$intvalue = 1 ... id = 36457 usr$logkey = 365 usr$field = 'date_begin' usr$tsvalue = '01.01.2017' ...
[править] Веб-интерфейс
Пример организации веб-интерфейса. Цветовое выделение сразу позволяет обратить внимание на недоступные и проблемные сервера.