Parsa syslog-data med KQL

Slutförd

Syslog-insamlaren skriver loggdata till Syslog-tabellen. En skillnad från CEF-insamlaren är att meddelandets data lagras i ett strängfält med namnet SyslogMessage. Common Event Format (CEF) Anslut eller skriver till CommonSecurityLog med fälten redan parsade. För Syslog måste du parsa fält på varje fråga som använder Syslog-tabellen eller skriva en parser. En parser är en KQL-funktion som är en fråga som sparats som en funktion och som sedan refereras till med funktionsnamnet. Referensen till funktionsnamnet är som att komma åt andra tabeller. Genom att skapa parsningar behöver du bara skriva SyslogMessage-parsningen en gång.

I fönstret Loggar skapar du en fråga, väljer knappen Spara och väljer Funktion i listrutan. Ange sedan funktionsnamn och alias. I det här fallet kan jag komma åt tabellen med namnet MyParser om vi skapar funktionen 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