Azure Log Analytics - extract()
Ola PessoALL,
Esses dias me deparei com o seguinte tweet:
Todo software precisa ter log/monitoramento. Hj temos inúmeros serviços/libs que nos ajudam com isso. Não há motivo para a sua aplicação ficar no escuro.
— angelobelchior (@angelobelchior) November 10, 2019
Eu sou um grande defensor de logs em aplicações e um defensor maior ainda de termos uma ou mais pessoas responsáveis por lidar com esses logs.
Quem me conhece sabe que sou um grande entusiasta do Application Insights/Azure Log Monitor
Queria compartilhar hoje uma função que me ajuda muito na análise de logs, a função extract
No meu caso costumo ter uma estrutura de logs bem simples nas minhas actions/controllers
logger.LogInformation($"Order {order.Id}: Payment called, response: {response.StatusCode}");
Quando alguma Ordem apresenta problema a primeira coisa que fazemos é olhar os logs tudo o que aconteceu em uma determinada ordem. Para isso podemos analisar a tabela traces do Application Insights.
traces
| where message contains "orderId"
| order by timestamp asc

Observem que eu tenho uma linha que retorna um BadRequest do envio de email, com isso eu quero saber todos os order ids que retornaram BadRequest.
traces
| where message endswith "Mail Result - BadRequest"

O próximo passo é extrair todos os order ids.
traces
| where message endswith "Mail Result - BadRequest"
| project orderId = extract("([0-9.]+)", 1, message), message
| distinct orderId

Pronto! agora temos somente os order ids das mensagens que queremos.
Para mais informações, segue links da documentação:
- https://docs.microsoft.com/en-us/azure/kusto/query/extractfunction
- https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/parse-text
- https://docs.microsoft.com/pt-br/azure/azure-monitor/log-query/string-operations
É isso ai pessoALL,
até a próxima!