APIs e Microsserviços

6 jun, 2018

Monitorando APIs com Application Insights – Parte 01

Publicidade

Este artigo mostra 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 deste ano.

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 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 uma ferramenta, é 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 à parte técnica, mas monitorando métricas de negócio.

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 apresentam 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 de 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.

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

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.

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.

Smart Detection

A 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 baseado 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.

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.

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.

Alerts

Regras de alerta, onde podemos definir alertas, seja por e-mail 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 e-mail, por exemplo, ou disparar um webhook, alertando a equipe que algo está errado.

Finalizando a parte conceitual

Listei aqui as funcionalidades que mais utilizo no Application Insights com um breve resumo de cada uma. Na parte 02 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 essa demonstração, onde também abordaremos a coleta de eventos customizados, onde podemos registrar métricas de negócio.

Espero que tenham gostado do artigo! Feedbacks são sempre bem vindos, e nos vemos na parte 02.

Um abraço!