Запрос KQL, показывающий предыдущие журналы из определенного журнала

#azure #logging #analytics #kql #azure-sentinel

Вопрос:

Я работаю над запросом, в котором мне нужен журнал, в котором есть сообщение «Скомпрометировано», затем я хочу, чтобы он вернул предыдущие 5 журналов «запретить». Новичок в KQL и просто не знаю оператора, поэтому я ценю помощь!

Текущий запрос:

 | sort by TimeGenerated | where SourceIP == "555.555.555.555" | where TimeGenerated between (datetime(10/20/2021, 16:25:41.750).. datetime(10/20/2021, 16:35:41.750)) | where AdditionalExtensions has "Compromised" or DeviceAction == "deny"  

В идеале в моей голове это было бы что-то вроде:

Необходимый запрос:

 | sort by TimeGenerated | where SourceIP == "555.555.555.555" | where AdditionalExtensions has "Compromised"  | \show preceding 5 logs that have DeviceAction = "deny"  

Спасибо!

Ответ №1:

Вы можете использовать функцию prev()

Ответ №2:

Вот как вы это делаете:

 let N = 5; // Number of records before/after records for which Cond is true YourTable | extend Cond = (SourceIP == "555.555.555.555") and (AdditionalExtensions has "Compromised") and (DeviceAction == "deny") // The predicate to "identify" relevant records | sort by TimeGenerated asc | extend rn = row_number(0, Cond) | extend nxt = next(rn, N), prv = prev(rn, N) | where nxt lt; N or (rn lt;= N and isnotnull(prv)) or Cond | project-away rn, nxt, prv, Cond  

Обратите внимание , что сортировка выполняется после extend , а не до — это более оптимально (всегда лучше опускать сортировку как можно ниже).

(Любезно предоставлено @RoyO)