Conceito e mecanismo
Uma query deve responder a uma pergunta definida, com tabela, período e campos adequados. Confirma o schema disponível em vez de copiar nomes de tabelas de outro produto. where filtra linhas; project seleciona colunas; summarize agrega segundo chaves; bin cria intervalos explícitos para agrupamento. A ordem importa: depois de remover TimeGenerated, não consegues usá-lo num filtro posterior sem o preservar ou reorganizar a query. Agregar altera a unidade do resultado. Uma linha por conta não é uma linha por tentativa. Explica essa unidade nos relatórios e nas regras que usam o resultado para decidir thresholds ou prioridades.
Aplicação guiada
Num exercício fictício, agrupa falhas por AccountId e intervalos de dez minutos para observar concentração temporal. Ao juntar tabelas, declara o tipo de join pretendido: o default innerunique não é igual a inner em todos os casos. Num inner com duas linhas à esquerda e três à direita para a mesma chave, podem surgir seis pares. Essa multiplicidade não prova seis eventos originais. Para procurar dispositivos do inventário sem telemetria recente, leftanti responde à ausência de correspondência, mas não prova que os dispositivos estejam desligados. Podem existir filtros, falhas de recolha ou identificadores diferentes. Testa relações com pequenos conjuntos conhecidos antes de aplicar conclusões a milhares de linhas.
AuthEvents | summarize count() by AccountId, bin(TimeGenerated, 10m) usa uma tabela fictícia e requer filtro prévio das falhas.
Armadilhas comuns
Nome de tabela copiado sem schema; campos removidos cedo; join como soma; ausência de correspondência como indisponibilidade.
Tópicos relacionados: Hunting, cobertura e continuidade · Plataforma SOC: dados e proteção
Confirma o que cada linha representa antes de contar ou agir.
Referência: Advanced hunting KQL · SC-200 objectives effective 2026-07-28; Microsoft product documentation reviewed 2026-10-01; 2026-10-21 English update compared separately