Partilhar via


Inicie as consultas de log nos Logs do Azure Monitor

Este artigo explica os fundamentos do uso de consultas de log no Azure Monitor Logs. Quando aplicável, fornece exemplos de consulta de dados usando o modo KQL e o modo simples do Log Analytics:

  • O modo KQL permite que você escreva e personalize consultas avançadas usando Kusto Query Language (KQL).

    A captura de tela mostra a faixa de opções do modo KQL.

  • O modo simples fornece uma interface amigável onde você seleciona uma tabela e aplica filtros para criar consultas.

    A captura de tela mostra a faixa de opções Modo simples.

Para obter uma comparação mais detalhada entre o modo KQL e o modo Simples, consulte Visão geral do Log Analytics no Azure Monitor.

Se você estiver coletando dados de pelo menos uma máquina virtual, poderá executar este exercício em seu próprio ambiente. Para outros cenários, use nosso ambiente de demonstração, que inclui muitos dados de exemplo.

Vídeo tutorial

Nota

Este vídeo mostra uma versão anterior da interface do usuário, mas as capturas de tela ao longo deste artigo estão atualizadas e refletem a interface do usuário atual.


Permissões necessárias

Você deve ter permissões Microsoft.OperationalInsights/workspaces/query/*/read nos espaços de trabalho do Log Analytics que consulta, conforme fornecido pela função interna Log Analytics Reader, por exemplo.

Estruturar uma consulta

As consultas podem começar com um nome de tabela ou com o search comando. É uma boa ideia começar com um nome de tabela porque ele define um escopo claro para a consulta. Também melhora o desempenho da consulta e a relevância dos resultados.

Nota

O KQL, que é usado pelo Azure Monitor, diferencia maiúsculas de minúsculas. As palavras-chave linguísticas são geralmente escritas em minúsculas. Ao usar nomes de tabelas ou colunas em uma consulta, certifique-se de usar as maiúsculas e minúsculas corretas, conforme mostrado no painel de esquema.

Sugestão

Saiba mais sobre as práticas recomendadas para consultas KQL.

Consultas baseadas em tabelas

O Azure Monitor organiza os dados de registo em tabelas, cada uma composta por várias colunas. Todas as tabelas e colunas são mostradas no painel de esquema no Log Analytics no portal do Azure.

Identifique uma tabela na qual você está interessado e dê uma olhada em alguns dados:

SecurityEvent
| take 10

A consulta anterior retorna 10 resultados da SecurityEvent tabela, sem ordem específica. Esta forma comum de dar uma vista de olhos a uma tabela ajuda-o a compreender a sua estrutura e conteúdo. Vamos examinar como ele é construído:

  • A consulta começa com o nome SecurityEventda tabela , que define o escopo da consulta.
  • O caractere pipe (|) separa comandos, de modo que a saída do primeiro comando é a entrada do próximo. Você pode adicionar qualquer número de elementos canalizados.
  • Após o pipe, está o operador take. Poderíamos executar a consulta mesmo sem adicionar | take 10. O comando ainda seria válido, mas poderia retornar até 30.000 resultados.

Consultas de pesquisa

As consultas de pesquisa são menos estruturadas. Eles são mais adequados para localizar registros que incluem um valor específico em qualquer uma das colunas de uma determinada tabela.

Esta consulta procura na SecurityEvent tabela registos que contenham a frase "Criptográfico". Desses registros, 10 registros são retornados e exibidos:

search in (SecurityEvent) "Cryptographic"
| take 10

Se você omitir a in (SecurityEvent) parte e executar apenas search "Cryptographic", a pesquisa passa por todas as tabelas. O processo demoraria mais tempo e seria menos eficiente.

Importante

As consultas de pesquisa são normalmente mais lentas do que as consultas baseadas em tabelas porque têm de processar mais dados.

Limitar resultados

Use o take operador para exibir uma pequena amostra de registros retornando até o número especificado de registros. Por exemplo:

SecurityEvent
| take 10

Os resultados selecionados são arbitrários e exibidos em nenhuma ordem específica. Caso necessites de retornar resultados por uma ordem específica, utiliza os operadores sort e top.

Ordenar os resultados

Esta seção descreve os operadores sort e top e seus argumentos desc e asc. Embora take seja útil para obter alguns registros, você não pode selecionar ou classificar os resultados em qualquer ordem específica. Para obter uma vista ordenada, utilize sort e top.

Ordenar

Você pode usar o sort operador para classificar os resultados da consulta pela coluna especificada. No entanto, sort não limita o número de registros retornados pela consulta.

Por exemplo, a consulta a seguir retorna todos os registros disponíveis para a SecurityEvent tabela, que é de até um máximo de 30.000 registros, e os classifica pela coluna TimeGerated.

SecurityEvent	
| sort by TimeGenerated

A consulta anterior pode retornar muitos resultados. Além disso, também pode levar algum tempo para retornar os resultados. A consulta classifica toda a tabela SecurityEvent pela coluna TimeGenerated. Em seguida, o portal do Google Analytics limita a exibição a apenas 30.000 registros. Esta abordagem não é a ideal. A melhor maneira de obter apenas os registros mais recentes é usar o top operador.

Desc e asc

Use o desc argumento para classificar os registros em ordem decrescente. Decrescente é a ordem de classificação padrão para sort e top, portanto, você geralmente pode omitir o desc argumento.

Por exemplo, os dados retornados por ambas as consultas a seguir são classificados pela coluna TimeGerated, em ordem decrescente:

  • SecurityEvent	
    | sort by TimeGenerated desc
    
  • SecurityEvent	
    | sort by TimeGenerated
    

Para classificar em ordem crescente, especifique asc.

Parte Superior

Use o top operador para classificar toda a tabela no lado do servidor e, em seguida, retorne apenas os registros superiores.

Por exemplo, a consulta a seguir retorna os 10 registros mais recentes:

SecurityEvent
| top 10 by TimeGenerated

O resultado tem o aspeto do seguinte exemplo:

Captura de tela que mostra os 10 principais registros classificados em ordem decrescente.

Filtrar resultados

A filtragem é a forma mais comum de limitar os resultados da consulta a informações relevantes.

Para adicionar um filtro a uma consulta, use o where operador seguido por uma ou mais condições. Por exemplo, a consulta a seguir retorna apenas SecurityEvent registros em que Level equals _8:

SecurityEvent
| where Level == 8

Ao escrever condições de filtro, você pode usar as seguintes expressões:

Expressão Descrição Exemplo
== Verificar a igualdade
distingue entre maiúsculas e minúsculas
Level == 8
=~ Verificar a igualdade
(sem distinção entre maiúsculas e minúsculas)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> Verificar a desigualdade
(ambas as expressões são idênticas)
Level != 4
and, or Obrigatório entre condições Level == 16 or CommandLine != ""

Filtrar por várias condições

Para filtrar por várias condições, você pode usar uma das seguintes abordagens:

Use and, como mostrado aqui:

SecurityEvent
| where Level == 8 and EventID == 4672

Canalize vários where elementos, um após o outro, como mostrado aqui:

SecurityEvent
| where Level == 8 
| where EventID == 4672

Nota

Os valores podem ter tipos diferentes, portanto, talvez seja necessário lançá-los para realizar comparações no tipo correto. Por exemplo, a SecurityEvent Level coluna é do tipo String, portanto, você deve convertê-la em um tipo numérico, como int ou long, antes de poder usar operadores numéricos nela, conforme mostrado aqui: SecurityEvent | where toint(Level) >= 10


Especificar um intervalo de tempo

Você pode especificar um intervalo de tempo usando o seletor de tempo ou um filtro de tempo.

Nota

Se você incluir um intervalo de tempo na consulta, o seletor de tempo mudará automaticamente para Definir na consulta. Se você alterar manualmente o seletor de tempo para um valor diferente, o Log Analytics aplicará o menor dos dois intervalos de tempo.

Use o seletor de tempo

O seletor de tempo é exibido ao lado do botão Executar e indica que você está consultando registros das últimas 24 horas. Esse intervalo de tempo padrão é aplicado a todas as consultas. Para obter registros apenas da última hora, selecione Última hora e execute a consulta novamente.

Captura de tela que mostra o seletor de tempo e sua lista de comandos de intervalo de tempo no modo KQL.

Adicionar um filtro de tempo à consulta

Você também pode definir seu próprio intervalo de tempo adicionando um filtro de tempo à consulta.

É melhor colocar o filtro de tempo imediatamente após o nome da tabela:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

No filtro de tempo anterior, ago(30m) significa "30 minutos atrás". Essa consulta retorna registros apenas dos últimos 30 minutos, que é expressa como, por exemplo, 30m. Outras unidades de tempo incluem dias (por exemplo, 2d) e segundos (por exemplo, 10s).

Incluir ou excluir colunas nos resultados da consulta

Use project para selecionar colunas específicas para incluir nos resultados:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

O exemplo anterior gera a seguinte saída:

Captura de ecrã que mostra a lista de resultados da consulta 'projeto'.

Você também pode usar project para renomear colunas e definir novas. O próximo exemplo usa project para fazer o seguinte:

  • Selecione apenas as colunas originais Computer e TimeGenerated.
  • Exiba a Activity coluna como EventDetails.
  • Crie uma nova coluna chamada EventCode. A substring() função é usada para obter apenas os quatro primeiros caracteres do Activity campo.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Definir e usar campos personalizados

Você pode usar extend para manter todas as colunas originais no conjunto de resultados e definir outras. A consulta a seguir usa extend para adicionar a EventCode coluna. Esta coluna pode não ser exibida no final dos resultados da tabela. Você precisaria expandir os detalhes de um registro para visualizá-lo.

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

Nota

Use o extend operador para cálculos ad hoc em consultas. Use transformações em ingestão de dados ou regras de sumarização para transformar ou agregar dados no momento da ingestão para consultas mais eficientes.

Resultados agregados e agrupados

Agregar grupos de linhas

Use summarize para identificar grupos de registros de acordo com uma ou mais colunas e aplicar agregações a eles. O uso mais comum é summarizecount, que retorna o número de resultados em cada grupo.

A consulta a seguir analisa todos os Perf registros da última hora, agrupa-os por ObjectNamee conta os registros em cada grupo:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

Agrupar combinações exclusivas de valores em várias colunas

Às vezes, faz sentido definir grupos por múltiplas dimensões. Cada combinação exclusiva desses valores define um grupo separado:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

Realizar cálculos matemáticos ou estatísticos

Outro uso comum é realizar cálculos matemáticos ou estatísticos em cada grupo. O exemplo a seguir calcula a média CounterValue de cada computador:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

Infelizmente, os resultados desta consulta não fazem sentido porque misturamos diferentes contadores de desempenho. Para tornar os resultados mais significativos, calcule a média separadamente para cada combinação de CounterName e Computer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

Resumir por uma coluna de tempo

Os resultados do agrupamento também podem ser baseados em uma coluna de tempo ou outro valor contínuo. Ao simplesmente resumir by TimeGenerated, no entanto, criaria grupos para cada milissegundo ao longo do intervalo de tempo, porque esses valores são únicos.

Para criar grupos com base em valores contínuos, é melhor dividir o intervalo em unidades gerenciáveis usando bin. A consulta a seguir analisa registros Perf que medem memória livre (Available MBytes) em um computador específico. Calcula o valor médio de cada período de 1 hora nos últimos 7 dias:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "DC01.na.contosohotels.com" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

Para tornar a saída mais clara, você pode optar por exibi-la como um gráfico de tempo, que mostra a memória disponível ao longo do tempo. Para fazer isso, alterne para a vista Gráfico, abra a barra lateral de formatação do gráfico à direita e selecione Linha como Tipo de Gráfico:

Captura de tela que mostra os valores de uma memória de consulta ao longo do tempo no modo KQL.

Perguntas mais frequentes

Esta secção fornece respostas a perguntas comuns.

Por que motivo estou a ver registos em duplicado nos Registos do Azure Monitor?

Ocasionalmente, você pode notar registros duplicados nos Logs do Azure Monitor. Essa duplicação é tipicamente de uma das duas condições a seguir:

  • Os componentes no pipeline têm repetidas tentativas para garantir uma entrega confiável no destino. Ocasionalmente, esse recurso pode resultar em duplicatas para uma pequena porcentagem de itens de telemetria.
  • Se os registros duplicados vierem de uma máquina virtual, você pode ter o agente do Log Analytics e o Agente do Azure Monitor instalados. Se você ainda precisar do agente do Log Analytics instalado, configure o espaço de trabalho do Log Analytics para não coletar mais dados que também estão sendo coletados pela regra de coleta de dados usada pelo Azure Monitor Agent.

Próximos passos