Analyser les données syslog avec KQL

Effectué

Le collecteur syslog écrit les données de journal dans la table syslog. L’une des différences par rapport au collecteur CEF est que les données du message sont stockées dans un champ de chaîne nommé SyslogMessage. Le connecteur CEF (Common Event format) écrit dans le CommonSecurityLog avec les champs déjà analysés. Pour Syslog, vous devez analyser les champs sur chaque requête qui utilise la table Syslog ou écrire un analyseur. Un analyseur est une fonction KQL qui est une requête enregistrée en tant que fonction, puis référencée avec le nom de la fonction. La référence au nom de la fonction est semblable à l’accès à toute autre table. En créant des analyses, vous devez uniquement écrire l’analyse SyslogMessage une seule fois.

Dans la fenêtre Journaux, créez une requête, sélectionnez le bouton Enregistrer, puis sélectionnez Fonction dans la liste déroulante. Spécifiez ensuite le nom et l’alias de la fonction. Dans ce cas, si nous créons la fonction nommée MyParser, je peux ensuite accéder à la table en utilisant le nom 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