Zidium

Исходные коды примеров находятся в архиве API

В данной статье предполагается, что веб-приложение доступно в сети Интернет. Если приложение работает в закрытой сети, то агент системы мониторинга Zidium не сможет загрузить страницу самопроверки и проверить ее.

Описание проблемы

Есть ошибки, появление которых можно вычислить заблаговременно. Например, ваше приложение в некоторых случях отправляет пользователю email-письмо. Если в приложении не заданы настройки SMTP шлюза, то очевидно, что письма не отправятся. Поэтому хорошей практикой будет, если приложение периодически будет проверять, всё ли у него есть для корректной работы.

Решение

Необходимо сделать специальную страницу самопроверки, которая будет проверять:
- что все обязательные настройки заданы;
- все сторонние сервисы доступны.

Результатом страницы будет обычный текст с результатом проверок. Агент системы мониторинга Zidium будет загружать страницу самопроверки раз в 10 минут и проверять, что все проверки успешно пройдены. Если будет обнаружена ошибка, компонент WebSite в системе мониторинга станет красным (статус Alarm), и будет отправлено уведомление.

Реализация

Будем считать, что компонент WebSite уже создан в дереве компонентов Вашего аккаунта. Создание компонента WebSite выполнится автоматически, если Вы настроили zidium.xml и выполнили запуск приложения.

Реализуем логику самопроверки в контролере 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 = ZidiumHelper.GetClient();
		var response = client.ApiService.GetEcho("test");
		if (!response.Success)
		{
			throw new Exception(response.ErrorMessage);
		}
	}

	/// <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 ######.

Выполните действия:

  1. Откройте в личном кабинете страницу "Компоненты"
  2. В дереве компонентов кликните компонент Root/Sysytem/WebSite
  3. На странице компонента нажмите кнопку "Добавить проверку HTTP"
  4. Укажите название проверки = "Страница самопроверки"
  5. Нажмите кнопку "Добавить http-запрос"
  6. Укажите параметры:
    - Название: selftest,
    - Url запроса: http://вашсайт/selftest
    - Ожидаемый фрагмент HTML: ###### SUCCESS ######
  7. Нажмите кнопку "Сохранить"

Мы только что создали для компонента WebSite системную проверку HTTP, которая будет выполнять проверку страницы самопроверки. Агент системы мониторинга Zidium поставил данную задачу в очередь на выполнение, и в ближайщее время она будет обработана.

В дереве компонентов у компонента WebSite теперь есть проверка "Страница самопроверки":

Итого:

Теперь каждые 10 минут агент системы мониторинга Zidium будет выполнять проверку страницы самопроверки. В дальнейшем логику страницы самопроверки можно будет совершенствовать, добавлять новые правила проверки, но системную проверку менять не потребуется. Если самопроверка приложения найдет сбой, то компонент WebSite получит статус Alarm, а вам будет отправлено уведомение.