Назад | Перейти на главную страницу

Мониторинг настольного приложения Windows с помощью URL-адреса пульса

У нас есть настольное приложение для Windows, которое должно работать все время (100% время безотказной работы). Он работает на сервере Windows 2012 и работает, как ожидалось, за исключением неприятной проблемы, которая при возникновении приложения продолжает работать (отображается в диспетчере задач и мониторе ресурсов), но основной поток таймера внутри него остановлен, по существу не в состоянии выполнять свою основную работу. . Виден только пользовательский интерфейс приложения. Удивительно, но это исключение даже не записывается в журналы, генерация журнала просто останавливается. Так что методика мониторинга журналов здесь не работает.

Мы исправляем эту проблему, но, тем не менее, мы хотим контролировать / убедиться, что настольное приложение внутри работает. Я планирую отслеживать его с помощью URL-адреса пульса, который будет использоваться этим настольным приложением при каждом запуске события Timer. Он проинформирует сервер мониторинга (хост URL-адреса пульса), что «Я жив». Если в течение N минут сердцебиение не получено, будут сгенерированы уведомления.

Мои вопросы: правильный ли это подход? Есть ли какие-либо платные / бесплатные инструменты для указанной цели?

Учитывая, что мы не можем контролировать приложение изнутри с помощью внешней службы мониторинга, я имел в виду одно решение.

Это похоже на то, что вы разработали сами, если у вас уже есть добавление внешней службы мониторинга и внешний URL-адрес для публикации / получения будет работать, но звучит как немного дрянное решение.

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

Если вы можете выделить другой поток, а не другой процесс, вы можете создать некоторую общую переменную LastTimeCalled. цикл таймера устанавливает для переменной текущее время, а другой процесс отслеживает эту переменную.

Но основная проблема - это некоторая ошибка, которая заставляет его останавливаться, эту ошибку следует исправить вместо использования пластыря.