Eu tenho dado um pouco de pensamento recentemente e cheguei à conclusão de que alguma forma de pesquisa é o único método confiável de determinar se um sistema está em execução. Ao pensar nisso, achei útil considerar como você acompanharia o bem-estar de um parente idoso que mora sozinho, a alguma distância.
Eu posso pensar em três opções:
- Peça ao seu parente para ligar para você quando precisar de ajuda. Por exemplo, se eles caírem e não puderem se levantar.
- Peça ao seu parente para ligar para você todos os dias em um determinado horário, digamos, às 19h. Se você não ouvir falar deles até as 19h30, poderá escalar as coisas tentando ligar para eles ou pedir a alguém próximo para parar e verificá-los.
- Telefone para eles regularmente, digamos uma vez por dia, e verifique se eles estão bem.
As opções 2 e 3 são variações de pesquisa. A única diferença é quem inicia o pedido; mas qualquer uma das opções funcionaria. Opção 1 é uma notificação orientada por eventos. Esse é o tipo mais eficiente de notificação porque o parente receberá ajuda imediata. Mas, se eles tiveram uma queda ruim e se machucaram, não serão capazes de disparar o alarme e pode levar dias até que alguém perceba.
Com base nisso, acredito que a melhor opção é usar notificação acionada por eventos sempre que possível, mas usar alguma forma de pesquisa como um fallback confiável . Qualquer que seja o método de polling usado, deve ser óbvio quando o próprio mecanismo de pesquisa falhar. Não seria bom se o sistema que você usa para pesquisar o serviço da web tiver diminuído e você não tiver percebido.
No sistema pelo qual sou responsável, que compreende várias páginas da Web e serviços da web, usamos uma mistura de notificação e pesquisa orientada por eventos. Sempre que um erro ou outro evento digno de nota ocorre no sistema, um email é enviado para minha caixa de entrada. Mas não confiamos nisto para nos informar de todos os problemas. Se o fizéssemos e houvesse um problema com o processo de relatório de erros, ou um problema de conectividade de rede, nunca ouviríamos a respeito. Para cobrir esses tipos de problema, usamos o polling.
Decidimos criar nossa própria solução de monitoramento, que pesquisa todos os serviços críticos a cada poucos segundos. Se nenhuma resposta for recebida dentro do período de tempo limite esperado, ou se a resposta chegar, mas não for o esperado, o sistema alertará uma de nossas equipes. O sistema enviará e-mails para o pessoal-chave e também comunicará o status atual de todos os sistemas por meio de seu " radiador de informações " / "< href="http://xprogramming.com/articles/bigvisiblecharts/"> grande gráfico visível "tipo de exibição.
Aqui está um dos radiadores de informação que temos em nosso escritório, que fornece um indicador sempre presente da disponibilidade e do desempenho de nossos serviços críticos:
Atelaestáemumlocaldedestaqueemnossoescritórioparagarantirquesaberíamossenãoestavamonitorando.
Nomêspassadonóslançamososistema,chamado
O ServiceMon é configurado usando um script muito simples. Veja um exemplo de como você monitora uma página da web:
http-get "http://www.google.com" must-contain "<title>Google</title>"
Você também pode usar essa abordagem para monitorar serviços sem estado e baseados em REST. Há um exemplo aqui
Se você precisar monitorar um serviço da Web baseado em SOAP, será necessário criar um plug-in simples. Este artigo que escrevi para CodeProject tem uma seção no final que explica o que está envolvido.
Idealmente, o seu sistema será projetado desde o início, tendo em mente o monitoramento, e esperamos que exponha o status e as informações de diagnóstico por meio de métodos controlados por segurança (que podem precisar ser restritos para uso interno).
Espero que isso ajude sua situação e estou realmente interessado em saber qual opção você usa.
Para obter mais informações sobre a ServiceMon, visite a página inicial do projeto