KQL – Guia Básico – Instrução Let
Nível: Iniciante | Tempo de leitura: 5 minutos
Se você já teve algum contato com alguma linguagem de programação deve conhecer um pouco sobre declaração de variáveis. As instruções let são usadas para atribuir um valor à uma variável como vemos no exemplo abaixo usando datas:
let today = endofday(now());
let yesterday = startofday(now(-1d));
Por associar nomes à expressões, o let te ajuda a reutilizar um valor futuramente e também permite que você divida uma expressão complexa em várias partes. Você pode associar cada parte à um nome por meio da instrução let para compor uma pesquisa mais completa.
As expressões associadas por instruções let podem ser dos seguintes tipo:
- Tipos escalares
- Tipos tabulares
- Funções definidas pelo usuário
Nós veremos um pouco de cada um deles em artigos futuros, não se preocupe com esses nomes agora.
É importante dizer que os nomes associados por instruções let precisam ser nomes de entidade válidos, como vemos no exemplo abaixo retirado da documentação Microsoft.
Sintaxe: let
Name =
ScalarExpression | TabularExpression | FunctionDefinitionExpression
Campo | Definição | Exemplo |
---|---|---|
Nome | O nome a ser associado. O nome precisa ser um nome de entidade válido. | O escape de nome de entidade, como ["Name with spaces"] , é permitido. |
ScalarExpression | Uma expressão com um resultado escalar cujo valor está associado ao nome. | let one=1; |
TabularExpression | Uma expressão com um resultado tabular cujo valor está associado ao nome. | Logs | where Timestamp > ago(1h) |
FunctionDefinitionExpression | Uma expressão que suspende um lambda, uma declaração da função anônima que deve ser associada ao nome. | let f=(a:int, b:string) { strcat(b, ":", a) } |
Também podemos usar o let mais de uma vez em nossa pesquisa usando o delimitador ponto e vírgula (;
) entre elas, como no exemplo a seguir.
let start = ago(5h);
let period = 2h;
T | where Time > start and Time < start + period | …
No exemplo abaixo, timeOffSet e discardEventId são criados e usados como parte da instrução “where” SecurityEvent.
let timeOffset = 7d;
let discardEventId = 4688;
SecurityEvent
| where TimeGenerated > ago(timeOffset*2) and TimeGenerated < ago(timeOffset)
| where EventID != discardEventId
Podemos usar a instrução let também para tabelas ou listas dinâmicas:
let suspiciousAccounts = datatable(account: string) [
@"\administrator",
@"NT AUTHORITY\SYSTEM"
];
SecurityEvent | where Account in (suspiciousAccounts)
Outro exemplo:
let LowActivityAccounts =
SecurityEvent
| summarize cnt = count() by Account
| where cnt < 10;
LowActivityAccounts | where Account contains "Mal"
Extraí uma parte do material de vídeo e apresentação do Program Manager de Azure Sentinel, Ofer Shezaf, que recomendo fortemente.
Vídeo – Azure Sentinel Webinar KQL parte 1.
Você também poder ver uma série de exemplos no GitHub do Azure Sentinel – GitHub – Azure/Azure-Sentinel: Cloud-native SIEM for intelligent security analytics for your entire enterprise. Também recomendo acessar o diretório GitHub – rod-trent/SentinelKQL: Azure Sentinel KQL.
Conclusão
Nesse artigo vimos como usar a instrução let para criar e usar variáveis e tabelas dinâmicas.
Referências:
Instrução Let – Azure Data Explorer | Microsoft Docs
Usar a instrução let – Learn | Microsoft Docs
Obrigado e deixe seu comentário, feedback, crítica ou sugestão!