Comment analyser des logs IIS avec LogParser / LogParser Studio

Dans un article de blog précédent, j'expliquais comment utiliser Excel pour analyser des logs IIS. Toutefois, quand le log est volumineux ou quand vous voulez automatiser cette opération, Excel n'est pas forcément le meilleur choix. C'est à ce moment que LogParser 2.2 entre en jeu. Cet outil va vous permettre d'analyser tout type de logs (IIS, HTTPErr, Event Logs…) via un langage d'interrogation similaire à SQL. LogParser 2.2 est vraiment intéressant mais vous n'avez à votre disposition qu'un outil en ligne de commande et vous devez élaborer vous-même les requêtes qui correspondent à vos besoin en vous inspirant de nombreux articles tels que ceux-ci :
- https://support.microsoft.com/kb/910447/en-us
- https://blogs.msdn.com/b/mmcintyr/archive/2009/07/20/analyzing-iis-log-files-using-log-parser-part-1.aspx
- …

Une fois que vous avez obtenu l'ensemble des requêtes dont vous avez besoin, vous pouvez automatiser l'analyse des logs via un fichier batch ou un script PowerShell.

Cependant, lorsque vous commencez à utiliser LogParser, il n'est pas simple de savoir comment récupérer les informations qui vous intéressent dans le log IIS et parfois il est même difficile de savoir ce qui est intéressant à récupérer. La solution à cette problématique a un nom : LogParser Studio !

LogParser Studio implémente de nombreuses requêtes ce qui est excellent pour commencer avec LogParser ou pour récupérer des idées pour développer vos propres requêtes.
De plus, vous pouvez copier ces requêtes pour les utiliser avec LogParser 2.2 en ligne de commande si l'interface graphique ne vous intéresse pas.

Tout d'abord, installez LogParser Studio qui est disponible ici : https://gallery.technet.microsoft.com/Log-Parser-Studio-cd458765
Ensuite, lancez-le. Vous devriez normalement voir l'onglet Library qui contient les requêtes préconstruites :

Toutes les entrées commençant par IIS sont conçues pour analyser les logs IIS. Je vais vous montrer un exemple avec la requête "IIS: Top 25 Slow URLs", cependant, n'hésitez pas à jouer avec les autres requêtes.

  • Ajoutez le fichier de log à analyser:
    • Cliquez sur la cinquième icône "Choose log files/folder to query"
    • Cliquez sur "Add Files" ou "Add Folder" et sélectionnez le fichier de log IIS à analyser ou le répertoire les contenant
    • Cliquez sur OK

 

  • Sélectionnez la règle à exécuter en double cliquant sur "IIS: Top 25 Slow URLs"
    • Vous devriez pouvoir voir le détail de la requête LogParser en bas de la fenêtre
  • Ensuite, cliquez sur le rond rouge avec le point d'exclamation pour exécuter la requête. En quelques secondes vous devriez voir apparaître le résultat :

 

C'est aussi simple que ça.

De plus, il y a quelques fonctionnalités très sympathiques inclues avec LogParser Studio :

  • Générer automatiquement un graphique par rapport aux résultats :

 

Cliquez sur l'icône représentant un graphique pour en générer un :

 

 

  • Exportation de la requête sous forme de script PowerShell :

 

Et bien plus…. Jeter un œil à cet outil, il vaut vraiment le coup !

Une fois que vous serez à l'aise avec l'outil et les requêtes, vous voudrez certainement créer les votre.
Pressez simplement le bouton de création de requête et vous pourrez exécuter ce que vous voulez.

 

Pour vous donner quelques idées:

Récupérer toutes les entrées sur une période de temps donnée. Ceci est très pratique lorsqu'un log est extrêmement volumineux et que vous connaissez l'heure d'occurrence.
Ceci vous permettra de réduire la taille des données à analyser en regardant uniquement un moment spécifique de la journée :

Select TO_TIMESTAMP(TO_DATE(date), TO_TIME(time)) AS Timestamp, sc-status as Status, sc-substatus as Sub-Status, cs-method as Method, cs-uri-stem as URL, time-taken as Time-Taken FROM '[LOGFILEPATH]' where to_time(time) between timestamp('07:43:55','hh:mm:ss') and timestamp('07:44:21','hh:mm:ss') group by Timestamp, sc-status, sc-substatus, cs-method, cs-uri-stem, time-taken order by Timestamp, sc-status, sc-substatus, cs-uri-stem, time-taken asc

Récupérer tous les messages d'erreur du log HTTPErr sauf les messages du type Timer_ConnectionIdle qui ne sont généralement pas un problème :

Select TO_TIMESTAMP(TO_DATE(date), TO_TIME(time)) AS Timestamp, c-ip, c-port, s-ip, s-port, cs-version, cs-method, cs-uri, sc-status, s-siteid, s-reason, s-queuename FROM '[LOGFILEPATH]' where s-reason <> 'Timer_ConnectionIdle'

Et en complément, LogParser peut être utilisé pour détecter ou vérifier si vous subissez une attaque ou non.
Les deux articles suivant sont de très bons articles sur le sujet :
- Attaque DoS : https://technet.microsoft.com/en-us/magazine/2006.03.insidemscom.aspx
- Vérification d'intrusions : https://www.symantec.com/connect/articles/forensic-log-parsing-microsofts-logparser

 

J'espère que cet article vous sera utile.
Sylvain Lecerf et l'équipe de Support Microsoft France