Visão Geral do Analytics no Application Insights

 

Equipes de TI, muitas vezes responsáveis por dezenas ou centenas de sistemas e aplicativos, lutam para manter o controle sobre um conjunto de tecnologias em constante evolução, e volta e meia são surpreendidas com baixo desempenho ou mesmo indisponibilidade não previstos.

Monitorar o comportamento da infraestrutura de TI e dos aplicativos, antecipar-se às falhas e diagnosticar rapidamente os incidentes, são desafios que requerem métodos e ferramentas apropriados, capacidade de consultar fluxos de dados em tempo real e geração de informações com valor operacional.

Visual Studio Application Insights

 

O Visual Studio Application Insights é um serviço de monitoramento de aplicativos desktop e web em tempo real. Ele coleta e envia dados de telemetria continuamente do aplicativo monitorado para o portal do Microsoft Azure. O aplicativo monitorado pode estar hospedado localmente ou na nuvem, havendo suporte para uma ampla variedade de plataformas, inclusive .NET e J2EE.

Alguns dados, como requisições e exceções, são coletados automaticamente, sem mudança nem implantação do aplicativo. Para coletar dados adicionais, como visualizações de página e dados do usuário, é necessário incluir no aplicativo um pacote de instrumentação e realizar uma nova implantação. O impacto da instrumentação no desempenho do aplicativo é pequeno, pois a comunicação é realizada em lote e de forma assíncrona, usando threads dedicadas.

Padrões de utilização do aplicativo, anomalias de desempenho e exceções não tratadas, bem como outros dados coletados, podem ser pesquisados e analisados por meio de ferramentas visuais e gráficos, no próprio portal. Alertas podem ser criados para enviar e-mail em caso de indisponibilidade, lentidão ou se alguma métrica exceder um valor limite durante determinado período.

As ferramentas básicas, como o explorador de métricas, a pesquisa e o mapa de aplicativo, são simples de usar e adequadas para analisar questões relacionadas a desempenho e disponibilidade. Investigações complexas, envolvendo a análise detalhada e o cruzamento de grandes volumes de dados, necessitam de uma ferramenta mais poderosa.

Application Insights Analytics

O Application Insights Analytics é uma plataforma de análise de logs em tempo real, capaz de realizar consultas complexas e gerar visualizações gráficas dos resultados, acessando um grande volume de dados rapidamente.

Conhecida internamente na Microsoft por Kusto, esta é uma ferramenta de big data, capaz de lidar com petabytes de informação e consultar terabytes de dados em segundos. Diversos serviços da Microsoft, entre eles o SQL Azure e o Visual Studio Team Services, confiam no Application Insights Analytics para sua operação.

Todo este poder de processamento permite que os usuários se aproveitem de sua experiência e criatividade para explorar grandes volumes de dados, fazendo rapidamente refinamentos sucessivos e testes com diferentes hipóteses, em busca de respostas para a situação que está sendo analisada.

Com uma DSL (domain-specific language) própria, as consultas são escritas de forma estruturada, com filtros, junções, agrupamentos, ordenações e outros operadores relacionais similares aos encontrados no SQL.

Os próximos parágrafos apresentam algumas consultas simples, considerando os seguintes termos:

  • exceptions é a tabela com os eventos de exceção;
  • requestsé a tabela com os eventos de requisição;
  • timestamp é o horário de coleta do evento;
  • now(-24h) é o horário atual menos 24 horas;
  • duration é a duração da requisição;
  • sumarize declara que os resultados devem ser agrupados, de forma similar ao GROUP BY do SQL;
  • order by declara que os resultados devem ser ordenados, de forma similar ao ORDER BY do SQL;

Lista as exceções ocorridas nas últimas 24 horas.

exceptions | where timestamp > now(-24h) | order by timestamp desc

Lista a duração média das requisições ocorridas nas últimas 24 horas, agrupadas por hora.

requests | where timestamp > now(-24h) | where duration > 0 | summarize avg(duration) by floor(timestamp, 1h) | order by timestamp asc

A capacidade de transformar facilmente os resultados das consultas em gráficos facilita o reconhecimento de padrões e de relacionamentos nos dados analisados. A seguir, a mesma consulta de duração média de requisições apresentada anteriormente, alterada com a declaração render, para gerar o resultado na forma de gráfico de barras.

// Duração média das requisições ocorridas nas // últimas 24 horas, agrupadas por hora, na // forma de um gráfico de barras. requests | where timestamp > now(-24h) | where duration > 0 | summarize avg(duration) by floor(timestamp, 1h) | order by timestamp asc | render barchart

 

O modo de exibição dos dados pode ser trocado diretamente na janela de visualização, sem necessidade de nova execução da consulta. Os ícones apontados na figura a seguir, localizados acima do cabeçalho da janela de visualização do resultado, alternam entre os modos de exibição de tabela e de gráfico.

O formato do gráfico também pode ser facilmente alterado, através do menu suspenso destacado na figura a seguir.

Resumo da Linguagem de Consulta

A linguagem de consulta do Application Insights Analytics é simples e poderosa, e sua similaridade conceitual com o SQL facilita o aprendizado. A tabela a seguir lista as principais funcionalidades e operações disponíveis na linguagem.

Atribuições

let, set.

Consultas

count, evaluate, extend, join, limit, mvexpand, parse, project, project-away, range, reduce, render directive, restrict clause, sort, summarize, take, top, top-nested, union, where, where-in.

Agregações

any, argmax, argmin, avg, buildschema, count, countif, dcount, dcountif, makelist, makeset, max, min, percentile, percentiles, percentilesw, percentilew, stdev, sum, variance.

Escalarers

Literais lógicos, Operadores lógicos, Conversões, Comparações escalares, gettype, hash, iff, isnotnull, isnull, notnull, toscalar.

Literais numérios, Operadores aritméticos, abs, bin, exp, floor, gamma, log, rand, sqrt, todouble, toint, tolong.

Literais de data e hora, Expressões de data e hora, ago, datepart, dayofmonth, dayofweek, dayofyear, endofday, endofmonth, endofweek, endofyear, getmonth, getyear, now, startofday, startofmonth, startofweek, startofyear, todatetime, totimespan, weekofyear.

Literais de texto, Literais de texto oculto, Comparações de texto, GUIDs, countof, extract, isempty, isnotempty, notempty, replace, split, strcat, strlen, substring, tolower, toupper.

Literais de matriz e objetos, Funções de objeto dinâmico, Objetos dinâmicos em cláusulas let, Expressões de caminho JSON, Nomes, arraylength, extractjson, parsejson, range, todynamic, treepath.

Outros Exemplos

Lista a quantidade de requisições recebidas nas últimas 48 horas, agrupadas pelo país ou região. Os resultados são classificados em ordem descendente de quantidade.

requests | where timestamp > ago(48h) | summarize count() by client_CountryOrRegion | order by count_ desc

A consulta a seguir é a mesma do exemplo anterior, mas foi alterada para exibir um gráfico de pizza.

requests | where timestamp > ago(48h) | summarize count() by client_CountryOrRegion | order by count_ desc | render piechart

 

O próximo exemplo ilustra a junção entre dados de tabelas diferentes, que é uma operação similar ao JOIN do SQL. No caso, a consulta junta requisições e exceções ocorridas nos últimos dois dias, usando um critério equivalente ao LEFT OUTER JOIN, do SQL, para contar a quantidade de exceções por tipo de requisição.

requests | where timestamp > ago(2d) | where success == “False” | join kind=leftouter ( exceptions | where timestamp > ago(2d) ) on operation_Id | summarize exceptionCount=count() by operation_Name | order by exceptionCount desc

 

Conclusão

O Application Insights Analytics é uma ferramenta impressionante, fácil de usar, poderosa e com benefícios claros para os modernos departamentos de TI, onde a inteligência operacional é essencial no esforço administrar TI como negócio, priorizando a qualidade, a produtividade e os níveis de serviço.

JRAMOS

CTO de pragmatismo.io e escreve na Venha Pra Nuvem