[Caso Real] Automatizando consulta no Application Insights
Ola pessoALL,
Esse último final de semana aconteceu uma situação complicada, eu sou um dos responsáveis por um sistema nos EUA que roda 24x7 e processa pagamentos, era sábado por volta das 18:00 aqui no BR e começaram a chegar alguns alertas da api de pagamentos, temos uma regra simples no nosso application insights, a cada 5 minutos se a quantidade de exceptions for maior que 5 nós disparamos um alerta.
Faz algum tempo que não temos problemas nessa API, graças a Deus, e nas últimas vezes foi um problema do gateway que usamos. Pois bem, estava na rua com minha família e por algum motivo esqueci de levar meu notebook e não tinha nenhum jeito fácil de executar as queries que costumo usar para poder dar uma resposta para o time de suporte para saber se era um erro do nosso lado ou do lado do gateway.
O que vou descrever aqui é um jeito simples de executar queries do Azure Monitor ou do Application Insights e enviar os resultados por email (pode ser teams, slack ou qualquer outra integração). Vamos lá
Criando o Azure Logic Apps
Se você ainda não conhece sobre o Logic Apps, recomendo que de uma lida na documentação https://azure.microsoft.com/pt-br/services/logic-apps/#overview
Os Aplicativos Lógicos do Azure são um iPaaS (plataforma de integração como serviço) líder no setor, criado com base em um runtime conteinerizado. Implante e execute os Aplicativos Lógicos em qualquer lugar para aumentar a escala e portabilidade ao automatizar fluxos de trabalho comercialmente críticos em qualquer lugar.
Basicamente o Logic Apps nos permite fazer orquestrações e controle de fluxo para automatizar tarefas do dia a dia com nenhum ou pouco código.

A automação em si é bem simples:
- Toda vez que um POST for recebido na URL fornecida
- Rodamos uma query no application insights
- Transformamos o resultado da query em uma tabela html
- Enviamos um email
As conexões com os servicços como o GMail (ou office 365) são bem intuitivas e feitas via interface.
Pontos importantes
Temos apenas dois pontos importantes aqui, o primeiro é a query do application insights.
requests
| where resultCode == "500" and timestamp > ago(10m)
| order by timestamp desc
| project name, duration, performanceBucket, operation_Id
| join kind=leftouter (exceptions
| project operation_Id, problemId, outerMessage, innermostMessage
) on operation_Id
| project-away operation_Id, operation_Id1
Faço um join com a tabela de expcetions para saber a origem dos erros e ter algumas informações extras sobre o erro. A última função project-away serve para excluir algumas colunas do resultset.
O "pulo do gato" aqui para facilitar a visualização dos resultados é transformar os resultados em uma tabela html, para mais informações, consulte a documentação

No final temos um email com os resultados e conseguimos avaliar o que esta acontecendo

Executando a automação
No meu caso coloquei dois modos de iniciar a automação
- No próprio alerta do Azure eu criei um grupo que dispara a trigger do logic app
- Criei um comando no slack do meu time que executa um post para a URL fornecida do logic app e faz o mesmo processo.
Por hoje é só pessoALL, espero que tenham gostado e podem comentar a vontade sobre outras utilizações do Azure Logic App