Анализ данных системного журнала с помощью KQL (Parse syslog data with KQL)

Завершено

Сборщик syslog записывает данные журнала в таблицу syslog. Одно отличие от сборщика CEF заключается в том, что данные сообщения хранятся в строковом поле с именем SyslogMessage. Соединитель Common Event Format (CEF) записывает данные в CommonSecurityLog с уже проанализированными полями. Для системного журнала необходимо выполнить синтаксический анализ полей в каждом запросе, использующем таблицу системного журнала, или написать средство синтаксического анализа. Средство синтаксического анализа (Parser) — это функция KQL, которая представляет собой запрос, сохраненный в виде функции, а затем ссылающийся на имя функции. Ссылка на имя функции аналогична доступу к любой другой таблице. Создавая синтаксические анализы, достаточно просто один раз написать синтаксический анализ SyslogMessage.

В окне "Журналы" (Logs) создайте запрос, нажмите кнопку Save и выберите функцию из раскрывающегося списка. Затем укажите имя функции и ее псевдоним. В этом случае, если мы создаем функцию с именем MyParser, то затем я могу получить доступ к этой таблице, используя имя MyParser.

Syslog
| where ProcessName contains "squid"
| extend URL = extract("(([A-Z]+ [a-z]{4,5}:\\/\\/)|[A-Z]+ )([^ :]*)",3,SyslogMessage), 
         SourceIP = extract("([0-9]+ )(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}))",2,SyslogMessage), 
         Status = extract("(TCP_(([A-Z]+)(_[A-Z]+)*)|UDP_(([A-Z]+)(_[A-Z]+)*))",1,SyslogMessage), 
         HTTP_Status_Code = extract("(TCP_(([A-Z]+)(_[A-Z]+)*)|UDP_(([A-Z]+)(_[A-Z]+)*))/([0-9]{3})",8,SyslogMessage),
         User = extract("(CONNECT |GET )([^ ]* )([^ ]+)",3,SyslogMessage),
         RemotePort = extract("(CONNECT |GET )([^ ]*)(:)([0-9]*)",4,SyslogMessage),
         Domain = extract("(([A-Z]+ [a-z]{4,5}:\\/\\/)|[A-Z]+ )([^ :\\/]*)",3,SyslogMessage)
| extend TLD = extract("\\.[a-z]*$",0,Domain)

MyParser