3 votes

Comment utiliser logparser pour interroger les entrées du journal IIS enregistrées au cours des N dernières minutes ?

L'hôte est situé dans le fuseau horaire EDT. Les journaux d'événements sont enregistrés en utilisant l'heure EDT. Les journaux IIS sont enregistrés en utilisant l'UTC, et je ne suis pas sûr de la construction du logparser qui permet de prendre en compte l'UTC.

Par exemple, Windows événement Les journaux, enregistrés en heure locale, les entrées enregistrées au cours des 20 dernières minutes peuvent être récupérées avec :

>logparser "SELECT * FROM Application WHERE TimeGenerated >= TO_LOCALTIME( SUB( SYSTEM_TIMESTAMP(), TIMESTAMP( '20', 'mm' ) ) )"

Comment récupérer les entrées de journal au format IISW3C enregistrées au cours des 3 dernières minutes ?

Après un examen plus approfondi, j'ai trouvé cet exemple dans l'entrée d'aide de SYSTEM_TIME ( ), à savoir Récupérer les entrées du journal IIS enregistrées dans l'heure en cours :

logparser -i:IISW3C "SELECT * FROM <1> WHERE date = SYSTEM_DATE() AND time >= QUANTIZE( SYSTEM_TIME(), 3600 )" -o:NAT

Cette tentative actuelle récupère les 180 dernières secondes (je pense ?), j'essaie toujours de comprendre...;-)

logparser -i:IISW3C "SELECT Time, Date, cs-uri-stem FROM <1> WHERE date = SYSTEM_DATE() AND time >= QUANTIZE( SYSTEM_TIME(), 180 )" -RTP:-1

D'autres suggestions ou approches que vous pouvez recommander ?

3voto

MrBlargityBlarg Points 51

Ok, je réalise que je réponds à un message qui date de plus d'un an, mais je sais qu'un googleur trouvera cette information utile. Voici comment j'interroge les entrées IIS avec les X dernières minutes (ou heures, ou secondes).

"select TO_LOCALTIME(time), c-ip, cs-method, sc-status, cs-uri-stem from <1> where TIME > SUB(SYSTEM_TIME(), TO_TIMESTAMP('00:05:00','hh:mm:ss'))"

Cela peut être étendu pour être le dernier jour, mois, année (en supposant que vous n'utilisez pas l'option -mindatemod de logparser) en changeant SYSTEM_TIME() en SYSTEM_TIMESTAMP() et en modifiant le format spécifié dans TO_TIMESTAMP().

Il est également utile de se souvenir du format d'heure du logparser : 'yyyy-MM-dd hh:mm:ss'.

-MBB

2voto

James Skemp Points 842

Essayez le Fonction TO_LOCALTIME .

Exemple :

TO_LOCALTIME(TO_TIMESTAMP(date, time)) AS [LocalTime]

Vous devriez alors être en mesure de récupérer tout ce qui se passe depuis 3 minutes, pour cela j'utiliserais SYSTEM_TIMESTAMP() au sein de votre QUANTIZE .

Exemple :

logparser "select top 10 TO_LOCALTIME(SYSTEM_TIMESTAMP()), SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm')) from \\192.168.1.104\wwwroot\ex*.log"

Cela renvoie l'heure actuelle du système et celle d'il y a 3 minutes. Donc, en gros, votre clause WHERE serait LocalTime > SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm'))

logparser "select top 10 TO_LOCALTIME(TO_TIMESTAMP(date, time)) AS [LocalTime], * FROM \\192.168.1.104\wwwroot\ex*.log WHERE LocalTime > SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), TIMESTAMP('0000-01-01 00:03', 'yyyy-MM-dd HH:mm'))"

N'oubliez pas que la date et l'heure seront exprimées en UTC. Veillez donc à convertir chaque instance en heure locale avant de procéder à la comparaison.

Bien sûr, vous pourriez simplement travailler dans le fuseau horaire des fichiers journaux, ce qui reviendrait à supprimer TO_LOCALTIME de votre clause WHERE finale.

1 votes

James - exemples/liens très appréciés !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X