Análise de log e consultas KQL
À medida que começamos a prestar atenção à confiabilidade de nossos serviços, precisamos de uma maneira de rastrear o quão bem (ou não) eles estão se saindo. Muitas vezes, podemos encontrar essas informações nos logs de um serviço, então vamos precisar de uma ferramenta para trabalhar com esses logs. O Log Analytics é a ferramenta que utilizaremos no Azure para este fim. Ele nos permite consultar esses dados e exibi-los de maneiras que são úteis para o nosso trabalho de confiabilidade.
O processo de consulta de análise de log envolve a elaboração de consultas na linguagem de consulta Kusto (KQL). Se você já trabalhou com qualquer outra linguagem de consulta (por exemplo, Structured Query Language, que a maioria das pessoas conhece por sua sigla, SQL), você não terá problemas para pegar KQL. Mesmo que você não tenha, depois de ver como funciona, as consultas básicas do KQL provavelmente serão muito fáceis para você.
Como funciona o Log Analytics
Então, vamos ver como tudo isso vai funcionar. Aqui está um diagrama sobre como o Log mAnalytics funciona:
Os dados do Log Analytics vêm de várias fontes, incluindo:
- Logs de eventos do Windows
-
syslog
em máquinas Linux - Agentes em execução em VMs
- Logs personalizados que as pessoas optam por enviar
- Métricas dos recursos do Azure
- Informações de telemetria do Application Insights
Todas essas informações entram no que o Log Analytics chama de tabelas . Você pode pensar em cada tabela como um banco de dados separado. Você estará escrevendo consultas para extrair as informações das tabelas. Para os exemplos que mostraremos mais adiante neste módulo, trabalharemos principalmente com uma tabela chamada "solicitações".
Interface do Log Analytics
O gráfico a seguir mostra as diferentes partes da interface do Log Analytics.
À esquerda, há uma seção da tela que garante que você nunca se perca ao usar o Log Analytics. Ele mostra as tabelas com as quais você está potencialmente trabalhando e, se você expandir uma seção, verá uma lista dos campos nessa tabela que estão disponíveis para consulta. Se você selecionar qualquer um dos campos ou o nome da tabela, ele será copiado para a área de construção da consulta.
A área de construção da consulta está na parte superior. É aqui que você especifica uma consulta e a executa. Você pode fornecer um período de tempo para os dados se ele ainda não estiver especificado como parte da consulta. Você pode salvar consultas ou abrir guias adicionais se quiser trabalhar em várias consultas ao mesmo tempo.
Na parte inferior da página há mais informações úteis. Aqui, o Log Analytics mostra consultas anteriores que você executou, o que pode ser útil se você precisar retornar a algo que já especificou anteriormente; Por exemplo, se você estava trabalhando em uma consulta, tentou algo e teve que voltar atrás.
Escrevendo consultas KQL
KQL é uma linguagem de consulta poderosa. Vamos apenas arranhar a superfície com algumas consultas básicas para que você possa ver como é fácil de usar. Mais tarde, se você quiser se aprofundar para usar alguns dos recursos mais avançados (incluindo algumas funcionalidades de aprendizado de máquina), não deixe de conferir o tutorial do Log Analytics.
Vamos começar escrevendo uma simples consulta KQL. Quase todas as consultas KQL começam com a fonte de dados; A tabela que você está consultando. Então, se você estivesse consultando dados de uma tabela de "solicitações", começaria com isso na área de consulta:
Requests
A próxima parte de uma consulta KQL é conectar a tabela com a operação que você deseja executar. Use um caractere pipe (a barra horizontal no teclado mais comumente encontrada acima da tecla de barra) entre o nome da tabela e o comando.
Aqui está uma consulta simples para classificar a tabela retornar os 10 principais registros encontrados:
Requests
|top 10
Aqui estão alguns exemplos de outros comandos comuns que você pode usar em vez de "top 10:"
Se você quiser ver quaisquer 10 registros aleatórios em vez dos 10 principais (por exemplo, para ver a estrutura da tabela), você pode usar o seguinte comando:
requests |take 10
Para ver os registos que entraram durante a última meia hora, pode utilizar a seguinte consulta:
requests |where timestamp > ago(30m)
Outra tarefa comum é especificar a ordem em que os dados devem ser retornados. Eis um exemplo de uma consulta que ordena por um campo específico (carimbo de data/hora) por ordem decrescente (por exemplo, primeiro os dados mais recentes):
requests |sort by timestamp desc
Assim como no SQL, você pode definir várias condições para especificar quais registros deseja retornar. Use caracteres de barra vertical e cláusulas adicionais para adicioná-los. O caractere pipe separa os comandos, de modo que a saída do primeiro será a entrada do próximo comando. Uma única consulta pode ter qualquer número de comandos.
Aqui está um exemplo de uma consulta que retorna todos os 404 registros de código de resposta (por exemplo, todos os registros de "página não encontrada" de um serviço Web) nos últimos 30 minutos:
requests
|where timestamp > ago(30m)
|where toint(resultCode) == 404
Esta consulta é escrita para maximizar a eficiência. Ao selecionar primeiro apenas os registros dos últimos 30 minutos, você reduz drasticamente o número de registros que a segunda cláusula precisa examinar. Se você escrevesse esta consulta na ordem oposta, primeiro encontraria todos os 404s desde o início dos tempos nos dados e, em seguida, descartaria a grande maioria para dar-lhe apenas a informação da última meia hora. Sempre considere a ordem de processamento ao escrever consultas com várias condições.
Um último exemplo de consulta antes de voltarmos ao poder do Log Analytics mais adiante neste módulo para ajudar a melhorar nossa confiabilidade. Aqui está uma consulta que mostra um cálculo com base nos dados:
requests
|where timestamp > ago(30m)
|summarize count() by name, URL
Esta consulta devolve um resumo dos pedidos que recebemos na última meia hora. Então, em um serviço web, ele pode nos dizer que houve uma solicitação de GET index.html
para o URL http://tailwindtraders.com
2.875 vezes. Estamos a fazer uma pausa no nosso estudo de KQL com esta consulta, porque se conecta bem às consultas KQL que vamos utilizar na próxima unidade.