Diagnósticos avançados de aplicações Web e serviços com o Application Insights
Este artigo explica como o Application Insights se enquadra no ciclo de DevOps.
Por que motivo preciso do Application Insights?
O Application Insights monitoriza a sua aplicação Web em execução. Informa-o sobre falhas e problemas de desempenho e ajuda-o a analisar a forma como os clientes utilizam a sua aplicação. Funciona para aplicações em execução em plataformas como ASP.NET, Java EE e Node.js. Está alojada na cloud ou no local.
É essencial monitorizar uma aplicação moderna enquanto está em execução. Quer detetar falhas antes de os seus clientes o fazerem. Também quer detetar e corrigir problemas de desempenho que atrasem os problemas ou causem incómodos aos seus utilizadores. Quando o sistema está a funcionar a seu gosto, também quer saber o que os utilizadores estão a fazer com o mesmo. Por exemplo, estão a utilizar a funcionalidade mais recente? Estão a ter sucesso com isto?
As aplicações Web modernas são desenvolvidas num ciclo de entrega contínua:
- Solte uma nova funcionalidade ou melhoramento.
- Observe como funciona bem para os utilizadores.
- Planeie o próximo incremento de desenvolvimento com base nesse conhecimento.
Uma parte fundamental deste ciclo é a fase de observação. O Application Insights fornece as ferramentas para monitorizar uma aplicação Web para desempenho e utilização.
O aspeto mais importante deste processo é o diagnóstico e o diagnóstico. Se a aplicação falhar, a empresa será perdida. A função principal de uma arquitetura de monitorização é:
- Detetar falhas de forma fiável.
- Notifique-o imediatamente.
- Apresente-lhe as informações necessárias para diagnosticar o problema.
O Application Insights executa estas tarefas.
De onde vêm os erros?
Normalmente, as falhas nos sistemas Web surgem de problemas de configuração ou de interações incorretas entre os vários componentes. A primeira tarefa quando aborda um incidente de site em direto é identificar o locus do problema. Que componente ou relação é a causa?
Numa era mais simples, um programa de computador foi executado num computador. Os programadores testaram-no cuidadosamente antes de o enviarem e, após o envio, raramente viram ou pensaram nisso novamente. Os utilizadores tiveram de aturar erros residuais durante muitos anos.
O processo é muito diferente agora. A sua aplicação tem vários dispositivos diferentes para executar e pode ser difícil garantir exatamente o mesmo comportamento em cada um deles. Alojar aplicações na cloud significa que os erros podem ser corrigidos rapidamente. Mas também significa que há concorrência contínua e a expectativa de novas funcionalidades em intervalos frequentes.
Nestas condições, a única forma de manter o controlo firme na contagem de erros é o teste de unidades automatizado. É impossível voltar a atestar manualmente tudo em cada entrega. O teste de unidades é agora uma parte comum do processo de compilação. Ferramentas como a Xamarin Test Cloud ajudam ao fornecer testes automatizados de IU em várias versões do browser. Estes regimes de teste permitem-nos esperar que a taxa de erros encontrados dentro de uma aplicação possa ser mantida no mínimo.
As aplicações Web típicas têm muitos componentes dinâmicos. Juntamente com o cliente (num browser ou aplicação de dispositivo) e o servidor Web, é provável que haja um processamento de back-end substancial. Talvez o back-end seja um pipeline de componentes ou uma coleção solta de peças de colaboração. Muitos deles não estarão no seu controlo. São serviços externos dos quais depende.
Em configurações como estas, pode ser difícil e pouco económico testar, ou prever, todos os modos de falha possíveis, exceto no próprio sistema dinâmico.
Perguntas
Eis algumas perguntas a fazer quando estiver a desenvolver um sistema Web:
- A sua aplicação está a falhar?
- O que aconteceu exactamente? Se falhou um pedido, quer saber como chegou lá. Precisa de um rastreio de eventos.
- A sua aplicação é suficientemente rápida? Quanto tempo demora a responder a pedidos típicos?
- O servidor consegue processar a carga? Quando a taxa de pedidos aumenta, o tempo de resposta mantém-se estável?
- Quão reativas são as suas dependências, como as APIs REST, bases de dados e outros componentes a que a sua aplicação chama? Em particular, se o sistema for lento, será o seu componente ou está a receber respostas lentas de outra pessoa?
- A sua aplicação está para cima ou para baixo? Pode ser visto de todo o mundo? Precisa saber se para.
- Qual é a causa principal? A falha foi no componente ou numa dependência? É um problema de comunicação?
- Quantos utilizadores são afetados? Se tiver mais do que um problema a resolver, qual é o mais importante?
O que é o Application Insights?
- O Application Insights instrumenta a sua aplicação e envia telemetria sobre a mesma enquanto a aplicação está em execução. Pode criar o SDK do Application Insights na aplicação ou pode aplicar instrumentação no runtime. O método anterior é mais flexível porque pode adicionar a sua própria telemetria aos módulos normais.
- A telemetria é enviada para o portal do Application Insights, onde é armazenada e processada. Embora o Application Insights esteja alojado no Azure, pode monitorizar quaisquer aplicações Web e não apenas aplicações do Azure.
- A telemetria é-lhe apresentada na forma de gráficos e tabelas de eventos.
Existem dois tipos principais de telemetria: instâncias agregadas e não processadas.
- Os dados de instância podem incluir um relatório de um pedido que foi recebido pela sua aplicação Web. Pode encontrar e inspecionar os detalhes de um pedido através da ferramenta de Pesquisa no portal do Application Insights. A instância pode incluir dados como o tempo que a sua aplicação demorou a responder ao pedido e ao URL pedido e à localização aproximada do cliente.
- Os dados agregados incluem contagens de eventos por unidade de tempo para que possa comparar a taxa de pedidos com os tempos de resposta. Também inclui médias de métricas, como tempos de resposta de pedidos.
As principais categorias de dados são:
- Pedidos para a sua aplicação (geralmente pedidos HTTP) com dados sobre URL, tempo de resposta e êxito ou falha.
- Dependências como chamadas REST e SQL efetuadas pela sua aplicação, também com URI, tempos de resposta e êxito.
- Exceções, incluindo rastreios de pilha.
- Dados de vista de página, provenientes dos browsers dos utilizadores.
- Métricas como contadores de desempenho e métricas que escreve sozinho.
- Eventos personalizados que pode utilizar para controlar eventos empresariais.
- Rastreios de registo utilizados para depuração.
Caso prático: Real Madrid F.C.
O serviço Web do Real Madrid Football Club serve cerca de 450 milhões de adeptos em todo o mundo. Os fãs acedem através de browsers e aplicações móveis do clube. Os fãs podem reservar bilhetes e também aceder a informações e clips de vídeo em resultados, jogadores e jogos futuros. Podem procurar com filtros como números de golos marcados. Há também ligações para as redes sociais. A experiência de utilizador é altamente personalizada e foi concebida como uma comunicação bidirecional para envolver os fãs.
A solução é um sistema de serviços e aplicações no Azure. A escalabilidade é um requisito fundamental. O tráfego é variável e pode atingir volumes elevados durante e à volta das correspondências.
Para o Real Madrid, é vital monitorizar o desempenho do sistema. O Application Insights fornece uma vista abrangente em todo o sistema para garantir um nível de serviço fiável e elevado.
O clube também tem uma compreensão aprofundada dos seus adeptos como onde estão (apenas 3% estão em Espanha), que interesse têm em jogadores, resultados históricos e jogos futuros, e como respondem aos resultados dos jogos.
A maioria destes dados telemétricos é recolhida automaticamente sem código adicionado, o que simplifica a solução e reduz a complexidade operacional. Para o Real Madrid, o Application Insights lida com 3,8 mil milhões de pontos de telemetria por mês.
O Real Madrid utiliza o módulo do Power BI para ver a sua telemetria.
Deteção inteligente
O diagnóstico proativo é uma funcionalidade recente. Sem qualquer configuração especial por si, o Application Insights deteta e alerta automaticamente sobre aumentos invulgares das taxas de falhas na sua aplicação. É inteligente o suficiente para ignorar um fundo de falhas ocasionais e também aumentos que são simplesmente proporcionais a um aumento de pedidos.
Por exemplo, pode haver uma falha num dos serviços de que depende. Ou talvez a nova compilação que implementou não esteja a funcionar bem. Saberá disso assim que observar o seu e-mail. Também existem webhooks para que possa acionar outras aplicações.
Outro aspeto desta funcionalidade efetua uma análise detalhada diária da sua telemetria, procurando padrões invulgares de desempenho difíceis de detetar. Por exemplo, pode encontrar um desempenho lento associado a uma área geográfica específica ou a uma versão específica do browser.
Em ambos os casos, o alerta indica-lhe os sintomas que foi detetado. Também lhe fornece os dados necessários para ajudar a diagnosticar o problema, como relatórios de exceção relevantes.
O cliente Samtec afirmou: "Durante uma transferência de funcionalidades recente, encontrámos uma base de dados em escala inferior que estava a atingir os seus limites de recursos e a causar tempos limite. Os alertas de deteção proativa surgiram literalmente à medida que estávamos a triatar o problema, muito perto do tempo real, como anunciado. Este alerta associado aos alertas da plataforma do Azure ajudou-nos quase instantaneamente a corrigir o problema. Tempo total de inatividade <de 10 minutos."
Live Metrics Stream
Implementar a compilação mais recente pode ser uma experiência ansiosa. Se houver algum problema, quer saber imediatamente sobre eles para que possa recuar, se necessário. O Live Metrics Stream dá-lhe as principais métricas com uma latência de cerca de um segundo.
Permite-lhe inspecionar imediatamente uma amostra de quaisquer falhas ou exceções.
Mapeamento de Aplicações
O Mapa da Aplicação deteta automaticamente a topologia da aplicação. Coloca as informações de desempenho na parte superior do mapa para que possa identificar facilmente estrangulamentos de desempenho e fluxos problemáticos no seu ambiente distribuído. Com o Mapa da Aplicação, pode detetar dependências de aplicações nos serviços do Azure.
Pode fazer a triagem de um problema ao compreender se está relacionado com o código ou a dependência. A partir de um único local, pode explorar a experiência de diagnóstico relacionada. Por exemplo, a sua aplicação pode estar a falhar devido à degradação do desempenho numa camada SQL. Com o Mapa da Aplicação, pode vê-lo imediatamente e explorar a experiência do Assistente de Índice do SQL ou do Query Insights.
Application Insights Log Analytics
Com o Log Analytics, pode escrever consultas arbitrárias numa linguagem avançada semelhante a SQL. O diagnóstico em toda a pilha de aplicações torna-se fácil à medida que várias perspetivas se ligam. Em seguida, pode fazer as perguntas certas para correlacionar o desempenho do serviço com as métricas empresariais e a experiência do cliente.
Pode consultar todas as instâncias de telemetria e dados não processados armazenados no portal. O idioma inclui filtro, associação, agregação e outras operações. Pode calcular campos e efetuar análises estatísticas. Estão disponíveis visualizações tabulares e gráficas.
Por exemplo, é fácil:
- Segmente os dados de desempenho dos pedidos da sua aplicação por escalões de cliente para compreender a sua experiência.
- Procure códigos de erro específicos ou nomes de eventos personalizados durante as investigações do site em direto.
- Desagregue a utilização da aplicação de clientes específicos para compreender como as funcionalidades são adquiridas e adotadas.
- Controle as sessões e os tempos de resposta de utilizadores específicos para permitir que as equipas de suporte e operações forneçam suporte imediato ao cliente.
- Determine as funcionalidades da aplicação utilizadas frequentemente para responder a perguntas de atribuição de prioridades de funcionalidades.
O DNN do cliente disse: "O Application Insights forneceu-nos a parte em falta da equação para poder combinar, ordenar, consultar e filtrar dados conforme necessário. Permitir que a nossa equipa utilize o seu próprio engenho e experiência para encontrar dados com uma linguagem de consulta avançada permitiu-nos encontrar informações e resolver problemas que nem sabíamos que tínhamos. Muitas respostas interessantes vêm das perguntas começando com 'Pergunto-me se...'.
Integração de ferramentas de desenvolvimento
O Application Insights integra-se com ferramentas de desenvolvimento.
Configurar o Application Insights
O Visual Studio e o Eclipse têm ferramentas para configurar os pacotes SDK corretos para o projeto que está a desenvolver. Existe um comando de menu para adicionar o Application Insights.
Se estiver a utilizar uma arquitetura de registo de rastreio, como Log4N, NLog ou System.Diagnostics.Trace, obtém a opção de enviar os registos para o Application Insights juntamente com a outra telemetria para que possa correlacionar facilmente os rastreios com pedidos, chamadas de dependência e exceções.
Procurar telemetria no Visual Studio
À medida que desenvolve e depura uma funcionalidade, pode ver e procurar a telemetria diretamente no Visual Studio. Pode utilizar as mesmas instalações de pesquisa que no portal Web.
Quando o Application Insights regista uma exceção, pode ver o ponto de dados no Visual Studio e ir diretamente para o código relevante.
Durante a depuração, pode manter a telemetria no seu computador de desenvolvimento. Pode vê-lo no Visual Studio sem o enviar para o portal. Esta opção local evita misturar a depuração com a telemetria de produção.
Itens de trabalho
Quando um alerta é gerado, o Application Insights pode criar automaticamente um item de trabalho no seu sistema de controlo de trabalho.