Как стать автором
Обновить

Внедряем Health Monitoring System в любое ASP.NET приложение за минуту

Время на прочтение3 мин
Количество просмотров5.2K
Сегодня мы рассмотрим очень интересную и полезную штуку, которую можно внедрить всего за минуту в любое ASP.NET приложение, изменив один файл.
Для начала попытаюсь дать определение Health Monitoring System(далее HMS).
HMS — это модуль, который будет следить за вашим сайтом и реагировать на определенные события. В этой статье мы займемся реализацией конкретного случая: нам на почту будут приходить письма с различной информацией при возникновении критических ошибок.

Зачем это надо? Приведу конкретный пример. В данный момент проект, которым я занимаюсь на работе, будет переноситься на сервера заказчика и так как в договоре предусмотрен период поддержки сайта, мне потребовалось средство для отслеживания ошибок, которые обязательно возникнут во время использования сайта пользователями. Так вот, HMS идеально для этого подходит: с моей стороны практически не требуется усилий по внедрению и, в то же время, я получаю идеально-подходящий результат. При желании можно придумать еще много примеров, но думаю суть вы поняли и моя ситуация близка многим.
Итак, приступим. Как я уже сказал, нам потребуется изменить всего один файл. Все уже наверно без меня догадались, что это будет web.config.
Открываем его, ищем секцию <system.web> и добавляем в нее следующее:
<healthMonitoring enabled=«true»>
</healthMonitoring>

Ну вот, собственно, HMS мы уже и включили. Осталось ее настроить. Весь последующий код следует вписывать между тегов healthMonitoring.
Последуем правилам хорошего тона и дадим событию человеческое имя:
<eventMappings>
  <add
  name=«MyEvent»
  type=«System.Web.Management.WebErrorEvent»
  startEventCode=«0»
  endEventCode=«10000»/>
</eventMappings>

Теперь мы можем использовать имя MyEvent для представления всех событий типа System.Web.Management.WebErrorEvent, которое представляет ошибки. ASP.NET присваивает каждому событию уникальный номер, поэтому указываем диапазон этих номеров (когда дойдет до 10000 начнет опять с 0). Теперь настроим буфер, чтобы наша система нас не зафлудила:
<bufferModes>
  <add
  name=«MyBuffer»
  maxBufferSize=«100»
  maxFlushSize=«50»
  maxBufferThreads=«1»
  regularFlushInterval=«00:10:00»
  urgentFlushInterval=«00:01:00»
  urgentFlushThreshold=«10» />
</bufferModes>

Суть всего этого можно свести к следующему: HMS будет писать нам письма каждые десять минут, если накопилось хотябы одно событие, либо сразу же после накопления 50ти событий. Можно настроить по вкусу. Еще один важный шаг — выбор и настройка провайдера. Нам потребуется System.Web.Management.SimpleMailWebEventProvider:
<providers>
   <add name=«MyProvider»
   type=«System.Web.Management.SimpleMailWebEventProvider»
   from=«sender@site.com»
   to=«reciever@site.com»
   bodyHeader=«Warning!»
   bodyFooter=«Please investigate ASAP.»
   subjectPrefix=«Action required.»
   buffer=«true»
   bufferMode=«MyBuffer»
   maxEventLength=«4096»
   maxMessagesPerNotification=«1» />
</providers>

Настроек у него много и полностью их можно посмотреть вот здесь, я привел сокращенный вариант. Последний шаг — добавление правила, чтобы связать все вместе:
<rules>
  <add
  name=«MyRule»
  eventName=«MyEvent»
  provider=«MyProvider»/>
</rules>

Вот и все. Наша система уже работает (если не работает можно попробовать перезапустить приложение в IIS). Как только ваш сайт выкинет исключение, вы получите на почту письмо с кучей информации: о приложении, запросе, исключении, пользователе и его IP-адресе и даже полную трассировку стеков. Что еще нужно для определения причины возникновения ошибки и ее устранения?
P.S. Естественно для использования SimpleMailWebEventProvider необходимо правильное smtp-определение в web.config. О нем можно прочесть здесь. Существует великое множество типов событий и провайдеров, которые можно использовать в HMS, обо всем написано тут.
Теги:
Хабы:
Всего голосов 33: ↑31 и ↓2+29
Комментарии28

Публикации

Истории

Работа

.NET разработчик
48 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
22 апреля
VK Видео Meetup 2025
МоскваОнлайн
23 апреля
Meetup DevOps 43Tech
Санкт-ПетербургОнлайн
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область