Описание проблемы
Есть ошибки, появление которых можно вычислить заблаговременно. Например, ваше приложение в некоторых случях отправляет пользователю email-письмо. Если в приложении не заданы настройки SMTP шлюза, то очевидно, что письма не отправятся. Поэтому хорошей практикой будет, если приложение периодически будет проверять, всё ли у него есть для корректной работы.
Решение
Необходимо сделать специальную страницу самопроверки, которая будет проверять:
- что все обязательные настройки заданы;
- все сторонние сервисы доступны.
Результатом страницы будет обычный текст с результатом проверок.
Агент системы мониторинга Zidium будет загружать страницу самопроверки раз в 10 минут и проверять,
что все проверки успешно пройдены. Если будет обнаружена ошибка,
компонент WebSite в системе мониторинга станет красным (статус Alarm), и будет отправлено уведомление.
Реализация
Будем считать, что компонент WebSite уже создан в дереве компонентов Вашего аккаунта. Создание компонента WebSite выполнится автоматически, если Вы настроили Zidium.config и выполнили запуск приложения.
Реализуем логику самопроверки в контролере SelfTestController:
/// <summary> /// Контроллер содержит страницу selftest - страница самопроверки /// </summary> public class SelfTestController : Controller { /// <summary> /// Проверяет, что web.config содержит все обязательные настройки /// </summary> private void ConfigTest() { ConfigHelper.ValidateAppSettings("SmtpHost"); ConfigHelper.ValidateAppSettings("SmtpPort"); } /// <summary> /// Проверяет, что есть соединение с БД /// </summary> private void SqlTest() { // реализуйте проверку самостоятельно } /// <summary> /// Проверяет, что есть соединение с системой мониторинга Zidium /// </summary> private void ZidiumTest() { var client = Client.Instance; client.ApiService.GetEcho(Guid.NewGuid().ToString()).Check(); } /// <summary> /// Проверяет, что есть соединение с WCF-сервисом /// </summary> private void WcfServiceTest() { // реализуйте проверку самостоятельно } /// <summary> /// Страница самопроверки проверяет: /// - web.config содержит все обязательные настройки /// - есть соединение с базой данных /// - есть соединение с Zidium /// - есть соединение с WCF сервисом /// </summary> public ActionResult Index() { // Здесь можно реализовать какие угодно проверки, чем проверок больше, тем лучше. var tests = new Dictionary<string, Action>(); tests.Add("ConfigTest", ConfigTest); tests.Add("SqlTest", SqlTest); tests.Add("ZidiumTest", ZidiumTest); tests.Add("WcfServiceTest", WcfServiceTest); bool success = true; var log = new StringBuilder(); foreach(var testPair in tests) { var testAction = testPair.Value; var testName = testPair.Key; log.AppendLine("----------------------------------"); try { testAction(); log.AppendLine(testName + ": success"); } catch (Exception exception) { success = false; log.AppendLine(testName + ": error : " + exception.Message); } } var response = success ? "###### SUCCESS ######" : "###### ERROR ######"; response = response + Environment.NewLine + log.ToString(); return Content(response, "text/plain"); } }
Если в приложении всё настроено верно и все внешние сервисы доступны, то страница самопроверки вернет следующий результат:
###### SUCCESS ###### ---------------------------------- ConfigTest: success ---------------------------------- SqlTest: success ---------------------------------- ZidiumTest: success ---------------------------------- WcfServiceTest: success
Обратите внимание, что страница самопроверки вернет строку ###### SUCCESS ###### только, если все проверки успешно пройдены.
Теперь создадим системную проверку HTTP для компонента WebSite в системе мониторинга, которая будет выполнятся раз в 10 минут и проверять, что страница самопроверки содержит строку ###### SUCCESS ######.
Выполните действия:
Мы только что создали для компонента WebSite системную проверку HTTP, которая будет выполнять проверку страницы самопроверки. Агент системы мониторинга Zidium поставил данную задачу в очередь на выполнение, и в ближайщее время она будет обработана.
В дереве компонентов у компонента WebSite теперь есть проверка "Страница самопроверки":
Итого:
Теперь каждые 10 минут агент системы мониторинга Zidium будет выполнять проверку страницы самопроверки. В дальнейшем логику страницы самопроверки можно будет совершенствовать, добавлять новые правила проверки, но системную проверку менять не потребуется. Если самопроверка приложения найдет сбой, то компонент WebSite получит статус Alarm, а вам будет отправлено уведомение.