使用 KQL 剖析 syslog 資料
Syslog 收集器會將記錄資料寫入 Syslog 資料表。 和 CEF 收集器的差異之一是,訊息資料會儲存在名為 SyslogMessage 的字串欄位中。 常見事件格式 (CEF) 連接器會將已剖析的欄位寫入 CommonSecurityLog。 若為 Syslog,您會需要在每個使用 Syslog 資料表的查詢上剖析欄位,或寫入剖析器。 剖析器是一種 KQL 函式,將查詢以函式的形式儲存,接著會參考函式名稱。 參考函式名稱就像存取任何其他資料表一樣。 藉由建立剖析,您只需要寫入一次 SyslogMessage 剖析。
在 [記錄] 視窗中,建立查詢、選取 [儲存] 按鈕,然後從下拉式功能表中選取 [函式]。 接著指定函式名稱和別名。 在此情況下,如果我們建立名為 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