Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Baixar o Microsoft Edge Mais informações sobre o Internet Explorer e o Microsoft Edge
Sumário
Sair do modo de foco
Ler em inglês
Salvar
Sumário
Ler em inglês
Salvar
Imprimir
Twitter LinkedIn Facebook Email
Sumário
Introdução às consultas de log no Azure Monitor
Artigo
12/05/2022
8 minutos para o fim da leitura
5 colaboradores
Comentários
Neste artigo
Observação
Se estiver coletando dados de pelo menos uma máquina virtual, você poderá trabalhar com este exercício em seu próprio ambiente. Para outros cenários, use nosso ambiente de demonstração, que inclui muitos dados de exemplo.
Se você já sabe como consultar na Linguagem de Consulta Kusto, mas precisa criar rapidamente consultas úteis com base em tipos de recurso, confira o painel consultas de exemplo salvas no artigo Usar consultas no Log Analytics do Azure Monitor.
Neste tutorial, você aprenderá a escrever consultas de log no Azure Monitor. O artigo mostra como:
Entender a estrutura de consulta.
Classificar os resultados da consulta.
Filtrar resultados da consulta.
Especificar um intervalo de tempo.
Selecionar quais campos serão incluídos nos resultados.
Definir e usar campos personalizados.
Agregar e agrupar resultados.
Para obter um tutorial sobre como usar o Log Analytics no portal do Azure, confira Introdução ao Log Analytics do Azure Monitor.
Para obter mais informações sobre consultas de log no Azure Monitor, confira Visão geral de consultas de log no Azure Monitor.
Veja uma versão em vídeo deste tutorial:
Escrever uma nova consulta
As consultas podem começar com um nome de tabela ou com o comando pesquisa. É uma boa ideia começar com um nome de tabela, porque ele define um escopo claro para a consulta e melhora o desempenho da consulta e a relevância dos resultados.
Observação
A linguagem de consulta Kusto que é usada pelo Azure Monitor diferencia maiúsculas de minúsculas. Palavras-chave de linguagem geralmente são escritas em letras minúsculas. Quando você usa nomes de tabelas ou colunas em uma consulta, use as maiúsculas e as minúsculas corretas, conforme mostrado no painel de esquema.
Consultas baseadas em tabela
O Azure Monitor organiza os dados de log 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 Analytics. Identifique uma tabela que você está interessado e, em seguida, vamos ver alguns dados:
SecurityEvent
| take 10
A consulta acima retorna 10 resultados da tabela SecurityEvent, sem nenhuma ordem específica. Isso é um jeito comum de olhar rapidamente uma tabela e entender sua estrutura e conteúdo. Vamos examinar como ele é criado:
A consulta é iniciada com o nome da tabela SecurityEvent, que define o escopo da consulta.
O caractere de barra vertical (|) separa os comandos, portanto, a saída do primeiro comando é a entrada do próximo. Você pode adicionar qualquer número de elementos conectados.
Seguindo o pipe está o comando take, que retorna um número específico de registros arbitrários da tabela.
Na verdade, poderíamos executar a consulta mesmo sem adicionar | take 10. O comando ainda seria válido, mas ele poderia retornar até 10 mil resultados.
Consultas de pesquisa
Consultas de pesquisa são menos estruturadas e elas são geralmente mais adequadas para localizar registros que incluem um valor específico em qualquer uma de suas colunas:
search in (SecurityEvent) "Cryptographic"
| take 10
Essa consulta pesquisa a tabela SecurityEvent em busca de registros que contenham a frase "Criptografia". Desses registros, 10 registros serão retornados e exibidos. Se você omitir a parte in (SecurityEvent) e executar apenas a search "Cryptographic", a pesquisa passará por in (SecurityEvent) as tabelas, o que levará mais tempo e será menos eficiente.
Importante
As consultas de pesquisa são normalmente mais lentas do que as consultas baseadas em tabela, pois têm que processar mais dados.
Classificar e superior
Embora take é útil para obter alguns registros, os resultados são selecionados e exibidos sem nenhuma ordem específica. Para obter uma exibição ordenada, você poderia classificação pela coluna preferencial:
SecurityEvent	
| sort by TimeGenerated desc
Entretanto, a consulta anterior poderia retornar um número excessivo de resultados e também poderia levar algum tempo. A consulta classifica toda a tabela SecurityEvent pela coluna TimeGenerated. O portal do Analytics limita a exibição a apenas 10 mil registros. Essa abordagem, obviamente, não é a ideal.
A melhor maneira de obter os registros mais recentes 10 é usar superior, que classifica a tabela inteira no lado do servidor e, em seguida, retorna os primeiros registros:
SecurityEvent
| top 10 by TimeGenerated
A ordem decrescente é a ordem de classificação padrão, portanto, normalmente omitiríamos o argumento desc. A saída tem esta aparência:
O operador where: filtragem de acordo com uma condição
Filtros, conforme indicado pelo seu nome, filtram os dados por uma condição específica. Essa é a maneira mais comum de limitar os resultados da consulta a informações relevantes.
Para adicionar um filtro a uma consulta, use o operador onde seguido por uma ou mais condições. Por exemplo, a consulta a seguir retorna apenas SecurityEvent registros em que nível é igual a 8:
SecurityEvent
| where Level == 8
Ao escrever condições de filtro, você pode usar as seguintes expressões:
Expression
Descrição
Exemplo
== Verificação de igualdade
(diferencia maiusculas de minúsculas) Level == 8
=~ Verificação de igualdade
(diferencia maiusculas de minúsculas) EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> Verifique a desigualdade
(as duas expressões são idênticas) Level != 4
e, ou Necessário entre condições Level == 16 or CommandLine != ""
Para filtrar por várias condições, você pode usar uma das seguintes abordagens:
Usar and, conforme mostrado aqui:
SecurityEvent
| where Level == 8 and EventID == 4672
Redirecionar vários elementos where, um após o outro, conforme mostrado aqui:
SecurityEvent
| where Level == 8 
| where EventID == 4672
Observação
Os valores podem ter tipos diferentes, portanto, talvez seja necessário convertê-los para realizar comparações no tipo correto. Por exemplo, a coluna SecurityEvent Level é do tipo Cadeia de caracteres, então você deve convertê-la em um tipo numérico como int ou long, para usar operadores numéricos nela, conforme mostrado aqui:
Especifique um intervalo de tempo
Usar o seletor de tempo
O seletor de tempo é mostrado próximo ao botão Executar e indica que você está consultando registros somente das últimas 24 horas. Isso é o intervalo de tempo padrão aplicado a todas as consultas. Para obter registros somente da última hora, selecione Última hora e execute a consulta novamente.
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) corresponde a "30 minutos atrás", o que significa que essa consulta retorna registros apenas dos últimos 30 minutos (expressos como, por exemplo, 30 m). Outras unidades de tempo incluem dias (por exemplo, 2d) e segundos (por exemplo, 10s).
Usar project e extend para selecionar e computar colunas
Use projeto para selecionar colunas específicas a serem incluídas nos resultados:
SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity
O exemplo anterior gera a seguinte saída:
Você também pode usar projeto para renomear colunas e definir novos. O próximo exemplo usa project para fazer o seguinte:
Selecione apenas o computador e TimeGenerated colunas originais.
Exibir a coluna Activity como EventDetails.
Criar uma nova coluna chamada EventCode. A função substring () é usada para obter apenas os quatro primeiros caracteres do campo Activity.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)
Use extend para manter todas as colunas originais no conjunto de resultados e definir outras colunas. A consulta a seguir usa estender para adicionar a coluna EventCode. Essa coluna poderá não ser exibida no final da tabela de resultados. Nesse caso, você precisaria expandir os detalhes de um registro para exibi-lo.
SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)
Usar summarize para agregar grupos de linhas
Use summarize para identificar grupos de registros de acordo com uma ou mais colunas e para aplicar agregações a eles. O uso mais comum de resumir é a contagem, que retorna o número de resultados em cada grupo.
A consulta a seguir examina todos os Perf registros de última hora, agrupa-os por ObjectNamee conta os registros em cada grupo:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName
Às vezes, faz sentido para definir grupos por várias dimensões. Cada combinação exclusiva desses valores define um grupo separado:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName
Outro uso comum é realizar cálculos matemáticos ou estatísticos em cada grupo. O exemplo a seguir calcula o CounterValue médio para cada computador:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer
Infelizmente os resultados dessa consulta não têm sentido, porque nós combinamos diferentes contadores de desempenho. Para tornar os resultados mais significativos, calcule a média separadamente para cada combinação de CounterName e Computador:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName
Resumir por uma coluna de hora
Agrupar os resultados também pode ser baseado em uma coluna de hora ou outro valor contínuo. O simples resumo de by TimeGenerated, criaria grupos para cada milissegundo ao longo do intervalo de tempo, pois esses são valores exclusivos.
Para criar grupos que sejam baseados em valores contínuos, é melhor dividir o intervalo em unidades gerenciáveis usando bin. A consulta a seguir analisa Perf registros que medem a memória livre (MBytes disponíveis) em um computador específico. Ela calcula o valor médio de cada período de uma hora nos últimos sete dias:
Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)
Para deixa a saída mais clara, você pode selecioná-la para ser exibida como um gráfico de tempo, que mostra a memória disponível ao longo do tempo:
Próximas etapas
Para saber mais sobre como usar dados de cadeia de caracteres em uma consulta de log, confira Trabalhar com cadeias de caracteres nas consultas de log no Azure Monitor.
Para saber mais sobre como agregar dados em uma consulta de log, confira Agregações avançadas nas consultas de log no Azure Monitor.