Diagnósticos detalhados para aplicativos Web e serviços com o Application Insights

Este artigo explica como o Application Insights se encaixa no ciclo de DevOps.

Por que eu preciso do Application Insights?

O Application Insights monitora seu aplicativo Web em execução. Ele informa sobre problemas de desempenho e falhas e ajuda você a analisar como os clientes usam o aplicativo. Ele funciona para aplicativos em execução em plataformas como ASP.NET, Java EE e Node.js. Ele é hospedado na nuvem ou no local.

Imagem que mostra aspectos da complexidade do fornecimento de aplicativos Web.

É essencial monitorar um aplicativo moderno enquanto ele está em execução. Você deseja detectar falhas antes que os clientes o façam. Você também deseja descobrir e corrigir problemas de desempenho que deixam as coisas mais lentas ou causam inconveniências para os usuários. Quando o sistema apresenta um desempenho satisfatório, você também quer saber o que os usuários estão fazendo com ele. Por exemplo, eles estão usando o recurso mais recente? Eles estão tendo êxito com ele?

Aplicativos Web modernos são desenvolvidos em um ciclo de entrega contínua:

  • Lançar um novo recurso ou aprimoramento.
  • Observe como ele funciona para os usuários.
  • Planejar o próximo incremento de desenvolvimento com base nesse conhecimento.

Uma parte importante deste ciclo é a fase de observação. O Application Insights fornece as ferramentas para monitorar o desempenho e uso de um aplicativo Web.

O aspecto mais importante deste processo é o diagnóstico e a detecção. Se o aplicativo falhar, negócios serão perdidos. A função principal de uma estrutura de monitoramento é:

  • Detectar falhas de maneira confiável.
  • Notificar você imediatamente.
  • Apresentar a você as informações necessárias para diagnosticar o problema.

O Application Insights executa essas tarefas.

De onde vêm os bugs?

Falhas em sistemas da web geralmente surgem de problemas de configuração ou interações ruins entre seus vários componentes. A primeira tarefa ao lidar com um incidente em um site ativo é identificar a localização do problema. Qual componente ou relação é a causa?

Em uma época mais simples, um programa de computador era executado em um computador. Os desenvolvedores os testavam completamente antes de enviá-lo e, após o envio, raramente o viam ou pensavam nele novamente. Os usuários tinham que lidar com eventuais bugs residuais por muitos anos.

O processo é muito diferente agora. Seu aplicativo é executado em uma infinidade de dispositivos diferentes e é impossível garantir exatamente o mesmo comportamento em todos eles. Hospedar aplicativos na nuvem significa que bugs podem ser corrigidos rapidamente. Mas também significa que há uma competição contínua e a expectativa de novos recursos em intervalos frequentes.

Nessas condições, a única maneira de manter um controle firme sobre a contagem de bugs é a realização de testes de unidade automatizados. É impossível testar tudo novamente de modo manual a cada entrega. O teste de unidade agora é uma parte comum do processo de build. Ferramentas como o Xamarin Test Cloud ajudam oferecendo o teste de interface do usuário automatizado a várias versões de navegador. Esses regimes de teste nos permitem esperar que a taxa de bugs encontrados dentro de um aplicativo possa ser mantida no mínimo.

Os aplicativos Web típicos têm muitos componentes em tempo real. Além do cliente (em um aplicativo de navegador ou de dispositivo) e do servidor Web, é provável que haja processamento substancial no back-end. Talvez o back-end seja um pipeline de componentes ou uma coleção menos rígida de partes em colaboração. Muitos deles não estarão sob seu controle. Eles são serviços externos dos quais você depende.

Em configurações como essas, pode ser difícil e antieconômico realizar o teste para, ou prever, todos os modos de falha que não o próprio sistema ativo.

Perguntas

Estas são algumas perguntas a serem feitas quando você está desenvolvendo um sistema Web:

  • O aplicativo está falhando?
  • O que aconteceu exatamente? Se ocorreu uma falha em uma solicitação, você quer saber como isso aconteceu. Você precisa de um rastreamento de eventos.
  • Seu aplicativo é rápido o suficiente? Quanto tempo ele demora para responder a solicitações típicas?
  • O servidor pode lidar com a carga? Ao aumentar a taxa de solicitações, o tempo de resposta se mantém constante?
  • Qual a capacidade de resposta de suas dependências, como as APIs REST, os bancos de dados e outros componentes que o aplicativo chama? Especificamente, se o sistema está lento, isso se deve ao seu componente ou você está recebendo respostas lentas de alguém?
  • Seu aplicativo está ativo ou inativo? Ele pode ser visto em todo o mundo? Você precisa saber se ele para.
  • Qual é a causa raiz? A falha ocorreu em seu componente ou em uma dependência? É um problema de comunicação?
  • Quantos usuários são afetados? Se você tem mais de um problema para resolver, qual é o mais importante?

O que é o Application Insights?

Imagem que mostra um fluxo de trabalho básico do Application Insights.

  1. O Application Insights instrumentaliza seu aplicativo e envia a telemetria sobre ele enquanto o aplicativo está em execução. Você pode compilar o SDK do Application Insights no aplicativo ou pode aplicar a instrumentação no runtime. O primeiro método é mais flexível porque você pode adicionar sua telemetria aos módulos regulares.
  2. A telemetria é enviada para o portal do Application Insights, onde é armazenada e processada. Embora o Application Insights seja hospedado no Azure, ele pode monitorar qualquer aplicativo Web, não apenas aplicativos do Azure.
  3. A telemetria é apresentada na forma de gráficos e tabelas de eventos.

Há dois tipos principais de telemetria: instâncias agregadas e brutas.

  • Os dados da instância incluem, por exemplo, um relatório de uma solicitação que foi recebida pelo aplicativo Web. Você pode localizar e inspecionar os detalhes de uma solicitação usando a ferramenta Pesquisar no portal do Application Insights. A instância pode incluir dados como quanto tempo o aplicativo levou para responder à solicitação, bem como a URL solicitada e a localização aproximada do cliente.
  • Os dados agregados incluem o número de eventos por unidade de tempo, para que você possa comparar a taxa de solicitações com os tempos de resposta. Eles também incluem as médias de métricas como os tempos de resposta de solicitação.

As principais categorias de dados são:

  • Solicitações para o aplicativo (normalmente, solicitações HTTP) com os dados na URL, o tempo de resposta e o êxito ou falha.
  • Dependências, como chamadas REST e SQL feitas por seu aplicativo, também com o URI, tempos de resposta e êxito.
  • Exceções, incluindo os rastreamentos de pilha.
  • Dados de exibição de página, que vêm dos navegadores dos usuários.
  • Métricas como contadores de desempenho e métricas que você mesmo escreve.
  • Eventos personalizados que você pode usar para controlar eventos de negócios.
  • Rastreamentos de log usados para depuração.

Estudo de caso: Real Madrid F.C.

O serviço Web do Clube de Futebol Real Madrid atende a aproximadamente 450 milhões de fãs em todo o mundo. Os fãs o acessam por meio de navegadores da Web e dos aplicativos móveis do clube. Os fãs podem reservar ingressos e também acessam informações e videoclipes sobre resultados, jogadores e próximos jogos. Eles podem pesquisar usando filtros como os números de gols marcados. Também há links para mídia social. A experiência do usuário é altamente personalizada e projetada como uma comunicação bidirecional para envolver os fãs.

A solução é um sistema de serviços e aplicativos no Azure. A escalabilidade é um requisito fundamental. O tráfego é variável e pode atingir volumes grandes durante e próximo das partidas.

Para o Real Madrid, é vital monitorar o desempenho do sistema. O Application Insights fornece uma exibição abrangente de todo o sistema para garantir um nível de serviço elevado e confiável.

O clube obtém ainda uma compreensão detalhada dos fãs, por exemplo, onde estão (apenas 3% estão na Espanha), que interesse têm nos jogadores, resultados históricos e jogos futuros e como eles respondem aos resultados das partidas.

A maioria desses dados telemétricos é coletada automaticamente sem nenhum 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 bilhões de pontos de telemetria por mês.

O Real Madrid usa o módulo do Power BI para exibir sua telemetria.

Captura de tela que mostra uma exibição do Power BI da telemetria do Application Insights.

Detecção inteligente

O diagnóstico proativo é um recurso recente. Sem qualquer configuração especial determinada por você, o Application Insights detecta e o alerta automaticamente sobre aumentos incomuns nas taxas de falhas do aplicativo. Ele é inteligente o suficiente para ignorar um histórico de falhas eventuais e também aumentos que são proporcionais a um aumento das solicitações.

Por exemplo, pode haver uma falha em um dos serviços de que você depende. Ou talvez o novo build implantado não esteja funcionando bem. Você saberá disso assim que examinar seu email. Também há webhooks para que você possa disparar outros aplicativos.

Outro aspecto desse recurso executa uma análise aprofundada diária da sua telemetria, procurando padrões incomuns de desempenho que são difíceis de descobrir. Por exemplo, ele pode localizar lentidão no desempenho associada a uma área geográfica específica ou com a versão de navegador específico.

Em ambos os casos, o alerta informa os sintomas descobertos. Ele também fornece a você os dados necessários para diagnosticar o problema, como relatórios de exceção relevantes.

Captura de tela que mostra o email do diagnóstico proativo.

O cliente Samtec disse, "Durante uma migração de recurso recente, encontramos um banco de dados subdimensionado que estava atingindo seus limites de recursos e causando tempos limite. Os alertas de detecção proativos foram emitidos enquanto realizávamos a triagem do problema, quase em tempo real, conforme anunciado. Esse alerta juntamente com os alertas da plataforma Azure nos ajudou a corrigir o problema quase instantaneamente. Tempo de inatividade total < 10 minutos."

Live Metrics Stream

A implantação do build mais recente pode causar certa ansiedade. Se houver problemas, você desejará saber sobre eles imediatamente para que possa recuar se necessário. O Live Metrics Stream fornece métricas importantes com uma latência de aproximadamente um segundo.

Captura de tela que mostra métricas em tempo real.

Ele permite que você inspecione imediatamente uma amostra de quaisquer falhas ou exceções.

Captura de tela que mostra eventos de falha em atividade.

Mapa de aplicativo

O Mapa do Aplicativo descobre automaticamente a topologia do aplicativo. Ele coloca as informações de desempenho sobre ela para permitir que você identifique facilmente gargalos de desempenho e fluxos problemáticos no ambiente distribuído. Com o Mapa do Aplicativo, você pode descobrir dependências de aplicativos nos serviços do Azure.

Você pode fazer a triagem de um problema entendendo se ele está relacionado ao código ou a uma dependência. Em um só lugar, você pode analisar detalhadamente a experiência de diagnóstico relacionada. Por exemplo, seu aplicativo pode estar falhando devido à degradação do desempenho em uma camada SQL. Com o Mapa de Aplicativo, você pode vê-lo imediatamente e detalhar a experiência do SQL Index Advisor ou dos Insights de Consulta.

Captura de tela que mostra um mapa do aplicativo.

Análise de Logs do Application Insights

Com a Análise de Logs, você pode escrever consultas arbitrárias em uma poderosa linguagem semelhante ao SQL. Diagnosticar em toda a pilha de aplicativos fica fácil à medida que várias perspectivas são conectadas. Em seguida, você pode fazer as perguntas certas para correlacionar o desempenho do serviço com as métricas de negócios e a experiência do cliente.

Você pode consultar todos os dados brutos de métrica e instância de telemetria armazenados no portal. A linguagem inclui as operações de filtragem, adição, agregação e outras. Você pode calcular campos e realizar a análise estatística. Visualizações de tabela e gráficas estão disponíveis.

Captura de tela que mostra um gráfico de consulta de análise e os resultados.

Por exemplo, é fácil:

  • Segmente os dados de desempenho de solicitação do aplicativo por camadas de clientes para entender a experiência deles.
  • Pesquisar códigos de erro específicos ou nomes de evento personalizados durante investigações do site ativo.
  • Analisar o uso do aplicativo de clientes específicos para entender como os recursos são adquiridos e adotados.
  • Controlar as sessões e os tempos de resposta para usuários específicos para permitir que as equipes de operações e suporte forneçam suporte ao cliente instantâneo.
  • Determinar os recursos de aplicativo usados com frequência para responder a perguntas de priorização de recurso.

O cliente DNN afirmou, "O Application Insights nos forneceu a parte que faltava para que pudéssemos combinar, classificar, consultar e filtrar os dados, conforme necessário. Permitindo que a nossa equipe usasse sua própria experiência e criatividade para localizar dados, com uma linguagem de consulta eficiente, nos permitiu ter insights e resolver problemas que nem mesmo sabíamos que tínhamos. Muitas respostas interessantes surgem das perguntas começando com 'Eu me pergunto se...'."

Integração de ferramentas de desenvolvimento

O Application Insights se integra às ferramentas de desenvolvimento.

Configurar o Application Insights

O Visual Studio e o Eclipse têm ferramentas para configurar os pacotes de SDK corretos para o projeto que você está desenvolvendo. Há um comando de menu adicionar Application Insights.

Caso você esteja usando uma estrutura de registros de rastreamento, como Log4N, NLog ou System.Diagnostics.Trace, terá a opção de enviar os logs para o Application Insights juntamente com outra telemetria, para que você possa correlacionar facilmente os rastreamentos com solicitações, chamadas de dependência e exceções.

Pesquisar telemetria no Visual Studio

Ao desenvolver e depurar um recurso, você pode exibir e pesquisar a telemetria diretamente no Visual Studio. Você pode usar os mesmos recursos de pesquisa que no portal da Web.

Quando o Application Insights registra uma exceção, você pode exibir o ponto de dados no Visual Studio e ir diretamente para o código relevante.

Captura de tela que mostra uma pesquisa do Visual Studio.

Durante a depuração, você pode manter a telemetria em seu computador de desenvolvimento. Você pode exibi-la no Visual Studio sem enviá-la para o portal. Essa opção local evita a mistura da telemetria de produção com a de depuração.

Itens de trabalho

Quando um alerta é gerado, o Application Insights pode criar automaticamente um item de trabalho no seu sistema de controle de trabalho.