Monitore o aplicativo de área de trabalho do Windows usando um URL de heartbeat

1

Temos um aplicativo de área de trabalho do Windows que precisa estar em execução o tempo todo (100% de tempo de atividade). Ele está sendo executado no Windows Server 2012 e é executado como esperado, exceto por um problema desagradável que, quando ocorre, o aplicativo continua em execução (visível no Gerenciador de Tarefas e no Monitor de Recursos), mas o principal segmento Timer dentro dele parou, essencialmente não conseguindo fazer o núcleo trabalhos. Apenas a interface do aplicativo está visível. Surpreendentemente, essa exceção nem é capturada em logs, a geração de logs simplesmente é interrompida. Então, a técnica de monitoramento de log não funciona aqui.

Estamos corrigindo esse problema, mas queremos monitorar / garantir que internamente o aplicativo para desktop esteja funcionando. Estou planejando monitorá-lo usando uma URL de pulsação que será consumida por este aplicativo da área de trabalho em cada evento do Disparador disparado. Ele informará ao servidor de monitoramento (host de pulsação do URL) que "estou vivo". Se durante N minutos não for recebida uma pulsação, serão geradas notificações.

Minhas perguntas são: É este o caminho certo? Existem ferramentas prontas / pagas para o referido propósito?

Como não podemos monitorar um aplicativo internamente usando um serviço de monitoramento externo, eu tive essa solução em mente.

    
por Abdullah Shoaib 04.10.2017 / 13:03

1 resposta

3

Isso soa como algo que você mesmo desenvolveu, se você já tem um serviço externo de monitoramento, e uma URL externa para postar / get funcionaria, mas parece uma solução meio inadequada.

Você também pode desativar outro processo no mesmo servidor e fazer algo semelhante. Como a geração de logs é interrompida e se grava em um log em um determinado período, peça a um processo que observe esse arquivo de log e veja se ele não foi gravado no período. Se não foi escrito, mate o processo e reinicie o programa.

Se você conseguir desmembrar outro thread, em oposição a outro processo, poderá criar uma variável LastTimeCalled compartilhada. O loop de temporizador define a variável para a hora atual e o outro processo monitora essa variável.

Mas, o problema subjacente é algum bug que faz com que ele pare, esse bug deve ser corrigido em vez de usar um band-aid.

    
por 04.10.2017 / 15:01