Мониторинг веб-серверов (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
(не показаны 8 промежуточных версий 1 участника)
Строка 8: Строка 8:
 
===Как это работает===
 
===Как это работает===
  
# Решение устанавливается на сервер, где имеется исходящий доступ в интернет и постоянно запущен gedemin.exe в режиме веб-сервера.
+
# Решение устанавливается на компьютер, где имеется исходящий доступ в интернет и постоянно запущен [[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$url
+
   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$address
+
   usr$url          dtext255 NOT NULL,    -- полный УРЛ, по которому обращались
   usr$code
+
   usr$code         dinteger_notnull,    -- HTTP код
   usr$responce
+
   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

Мониторинг реализуется ввиде прикладного решения на платформе Гедымин со следующей функциональностью:

  1. Ведение базы данных предприятий, где Гедымин используется как веб-сервер.
  2. Мониторинг и логирование состояния веб-серверов по установленному расписанию.
  3. Автоматическое оповещение системного администратора о выявленных проблемах.
  4. Предоставление разработчику или администратору веб-интерфейса для контроля за состоянием серверов.

[править] Как это работает

  1. Решение устанавливается на компьютер, где имеется исходящий доступ в интернет и постоянно запущен gedemin.exe в режиме веб-сервера.
  2. В базе данных прописывается список предприятий. Для каждого указывается список веб-серверов с адресами и используемыми решениями.
  3. По расписанию (с использованием автозадач) запускается скрипт-функция, которая поочередно опрашивает все сервера. Полученные ответы или коды ошибок, если сервер не доступен, записываются в таблицу лога. Для каждого сервера мы храним два url. Один -- это быстрая проверка доступности сервера. Ее можно вызывать часто без угрозы снижения производительности сервера. Второй -- получение статистики. У нему будем обращаться не чаще одного раза в сутки.
  4. При обнаружении ошибки, системный администратор оповещается через email.
  5. Через веб-интерфейс можно получить доступ к панели мониторинга, где выводится список серверов их текущее состояние и накопленная статистика. Веб-интерфейс защищен логином и паролем.

[править] Структуры данных

Данные предприятия хранятся в стандартном справочнике клиентов. Таблицы 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'
 ...

[править] Веб-интерфейс

Пример организации веб-интерфейса. Цветовое выделение сразу позволяет обратить внимание на недоступные и проблемные сервера.

webm_1.png

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты