Este artigo apresenta como utilizar o Application Insights para monitoração de APIs e aplicações Web, conteúdo que apresentei como palestra no Global Azure BootCamp em Curitiba, no dia 21 de Abril de 2018.

Antes de começar, vamos falar sobre monitoração…

Monitorar seu ambiente de produção não é só ter aqueles monitores / TVs cheios de gráficos pra deixar o pessoal de outros setores impressionados quando passam pelo seu setor…

Hoje em dia, alguns segundos de indisponibilidade de sua aplicação já podem causar a perda de bilhões para seu negócio, clientes que vão ter uma experiência ruim naquele momento e podem não voltar mais e retrabalho, para reprocessar transações, recuperar dados e, clientes que deixaram seu negócio.

Apesar do foco do artigo ser em cima de uma ferramenta, o Application Insights, a operação de seu negócio / aplicação é mais do que apenas ferramentas, mas é uma cultura. E todos sabemos como cultura é algo delicado, e muitas vezes difícil de mudar, mas precisa ser feito!

Não são as espécies mais fortes que sobrevivem, nem as mais inteligentes, e sim as mais suscetíveis a mudanças. Charles Darwin

Escolhi a frase acima pois representa nosso mundo hoje, só sobrevivem aqueles que estão dispostos a mudar. Monitorar suas APIs significa estar disposto a agir e mudar conforme identificar problemas, ou melhor, oportunidades de melhoria. Não apenas quanto a parte técnica, mas monitorando métricas de negóçio.

E acima de tudo, mudar seguindo a direção certa, com embasamento em informações reais, coletadas de forma automatizada e simples.

Voltando ao foco do artigo…

Application Insights

Temos muitos serviços sensacionais no Azure, mas um dos que gosto muito é o Application Insights. É um serviço para monitoração de aplicações Web, API’s, Cloud Functions, etc. que apresenta informações coletadas, através de uma técnica conhecida como Telemetria.

Podemos monitorar diversos aspectos de nossas aplicações, como quantidade de acessos, tempo de resposta, tempo de acesso a recursos externos como banco de dados, APIs externas, quantidade de falhas, usuários simultâneos e outras métricas. Inclusive, podemos registrar métricas customizadas, podendo criar monitoração de regras de negócio, como quantos usuários de um tipo específico acessam a aplicação, quantas requisições retornaram com um determinado tipo de informação… Não temos limites do que podemos fazer… e o melhor, de forma extremamente simples.

Iniciar a monitoração de sua aplicação exige um mínimo de codificação, bastando inicializar o componente do Application Insights informando sua chave de instrumentação (Instrumentation Key), que é fornecida ao criar um recurso de Application Insights dentro do Azure.

Vou listar aqui as principais funcionalidades que temos no Application Insights, pelo menos as que utilizo com maior frequência. O artigo está dividido em partes, para que eu possa explicar cada funcionalidade no detalhe, sem ficar algo muito longo e chato para ler. Vamos lá!

Overview

Visão Geral, esta parte do Application Insights apresenta um quadro resumo da saúde de sua aplicação.

Logo no início da tela, temos alguns quadros menores com informações de alertas em andamento, informação sobre o Live Stream (monitoração em tempo real), a quantidade de usuários ativos na aplicação, o Smart Detection (identificação inteligente de problemas), que falaremos mais a frente, disponibilidade e um link para o mapa da aplicação, que também já vamos detalhar melhor.

Temos algumas informações em gráficos referentes ao tempo médio de resposta de sua aplicação, quantidade de requests, quantidade de falhas, como retornos HTTP 4xx, 5xx, etc. que resumem a saúde de sua aplicação, se a mesma está suportando uma determinada carga ou gerando muitos erros.

Overview

Temos ainda uma lista das requisições ao servidor por desempenho da mesma, indicando as menos performáticas, o porcentagem de requisições daquela requisição por tempo de resposta, sendo que cada uma delas pode ser detalhada, bastando clicar no registro desejado.

Lista com o desempenho dos requests, organizada por tempo de resposta

São as informações mais utilizadas em um primeiro diagnóstico a problemas ou mesmo durante a monitoração E estas informações estão disponíveis no Analytics, ferramenta onde podemos criar dashboards e consultas customizadas.

Application Map

Mapa do Aplicativo, esta é uma funcionalidade bem interessante do Application Insights, pois nos mostra através de um diagrama, a aplicação e suas dependências, sejam outras API’s, serviços de cache, bancos de dados, etc., e a saúde de cada um deles, como porcentagem de falhas, tempo de resposta, entre outras informações.

Mapa da aplicação e suas dependências, como bancos de dados, APIs de terceiros, etc.
Acessando detalhes da dependência no mapa, para obter mais informações.

Conseguimos através deste diagrama, identificar possíveis gargalos na integração dos diversos serviços que compõem nossa aplicação, principalmente quando trabalhamos com microsserviços.

Live Metrics Stream

A funcionalidade Live Metrics Stream que citei no resumo geral, permite o monitoramento de aplicações Web em tempo real, apresentando informações sobre requisições recebidas, falhas e o uso de recursos.

Podemos ver abaixo um exemplo da tela com informações recebidas em tempo real para uma API, com informações de requests de entrada, saída, saúde geral da aplicação, servidores online que estão sendo utilizados naquele momento, assim como um log da telemetria enviada ao Application Insights.

Monitor de métricas online, onde analisamos nossa aplicação em tempo real

Smart Detection

Detecção Inteligente, realiza a análise de problemas de performance ou aumento repentino na taxa de falhas e envio de e-mails automáticos informando tais ocorrências, basedo no comportamento de sua aplicação, como por exemplo, se na maior parte do tempo ela não possui mais que 5 mil requests por minuto, um aumento nesta quantidade por um determinado intervalo de tempo pode identificar um comportamento inesperado, como aumento de usuários, ou mesmo alguma tentativa de ataque, gerando um alerta para que o time possa atuar no problema.

Smart Detection, onde alertas são gerados com base em uma análise de comportamento da aplicação, baseado em seu histórico de uso.

Failures

Falhas, registra métricas e um log de falhas ocorridas em sua aplicação. Podemos obter detalhes de requisições como método HTTP, URL, parâmetros, etc., que nos auxiliam na identificação de problemas. Visto que temos o tracking de dependências no Application Insights, como falei no item Application Map, conseguimos navegar detalhe por detalhe, da requisição HTTP até uma query no banco de dados ou chamadas a outros serviços.

Monitor de falhas / erros que nossa aplicação está gerando

Availability

Disponibilidade, é um serviço de monitoração de disponibilidade de nossas aplicações em diversas regiões do mundo. Podemos configurar regras de testes, como realizar uma requisição HTTP para nossa aplicação, com um intervalo pré-definido e com critérios de aceitação, sendo um status HTTP, tempo de resposta, conteúdo da resposta, etc.

Com isso podemos monitorar se uma determinada região está com problemas para acessar nossa aplicação e tomar ações, como escalar nossa aplicação para outras regiões mais próximas, diminuindo a latência de rede, entre N possibilidades.

Availability, onde monitoramos a disponibilidade de nossa aplicação de diferentes regiões através de vários métodos, sendo o ping o mais comum.

Alerts

Regras de alerta, onde podemos definir alertas, sejam por email ou webhooks para aplicações específicas baseados em métricas do Application Insights.

Definimos critérios de aceitação para análise destas métricas, e quando estas condições não forem atendidas, o serviço irá enviar um email, por exemplo, ou disparar um webhook, alertando a equipe que algo está errado.

Exemplo de um alerta gerado pelo Application Insights, baseado em regras sobre as métricas coletadas

Finalizando a parte conceitual

Listei aqui as funcionalidades que mais utilizo no Application Insights com um breve resumo de cada uma.

Na parte 2 deste artigo, iremos para uma abordagem mais prática, com uma demonstração através de uma aplicação ASP.NET Core, sendo esta uma API Rest.

Iremos revisar as funcionalidades deste artigos com dados gerados por esta demonstração, onde também abordaremos a coleta de eventos customizados, onde podemos registrar métricas de negócio.

Espero quem tenham gostado do artigo, feedbacks são sempre bem vindos, e nos vemos na parte 2.

Um abraço!