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

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

Время на прочтение 3 мин
Количество просмотров 5.1K
Сегодня мы рассмотрим очень интересную и полезную штуку, которую можно внедрить всего за минуту в любое 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, обо всем написано тут.
Теги:
Хабы:
+29
Комментарии 28
Комментарии Комментарии 28

Публикации

Истории

Работа

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

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

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн