86 votes

Requêtes LogParser recommandées pour la surveillance de IIS ?

Au fur et à mesure que Stack Overflow se développe, nous commençons à examiner de près nos journaux IIS pour identifier les clients HTTP problématiques - des choses comme araignées malhonnêtes Les utilisateurs qui ont configuré une grande page pour qu'elle se rafraîchisse toutes les secondes, les racleurs de sites web mal écrits, les utilisateurs rusés qui essaient d'incrémenter le nombre de pages un million de fois, et ainsi de suite.

J'en ai trouvé quelques-uns LogParser qui nous aident à identifier la plupart des bizarreries et des anomalies lorsqu'on pointe sur un fichier journal IIS.

Utilisation maximale de la bande passante par URL

SELECT top 50 DISTINCT 
SUBSTR(TO_LOWERCASE(cs-uri-stem), 0, 55) AS Url, 
Count(*) AS Hits, 
AVG(sc-bytes) AS AvgBytes, 
SUM(sc-bytes) as ServedBytes 
FROM {filename} 
GROUP BY Url 
HAVING Hits >= 20 
ORDER BY ServedBytes DESC

url                                                   hits  avgbyte  served
-------------------------------------------------     ----- -------  -------
/favicon.ico                                          16774 522      8756028
/content/img/search.png                               15342 446      6842532

Top hits par URL

SELECT TOP 100 
cs-uri-stem as Url, 
COUNT(cs-uri-stem) AS Hits 
FROM {filename} 
GROUP BY cs-uri-stem 
ORDER BY COUNT(cs-uri-stem) DESC

url                                                                    hits
-------------------------------------------------                      -----
/content/img/sf/vote-arrow-down.png                                    14076
/content/img/sf/vote-arrow-up.png                                      14018

Top bande passante et hits par IP / User-Agent

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
Count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent) 
ORDER BY TotalBytes desc

client         user-agent                                      totbytes   hits
-------------  ---------------------------------------------   ---------  -----
66.249.68.47   Mozilla/5.0+(compatible;+Googlebot/2.1;         135131089  16640
194.90.190.41  omgilibot/0.3++omgili.com                       133805857  6447

Bande passante la plus élevée par heure par IP / User-Agent

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY sum(sc-bytes) desc

hr   client        user-agent                                  totbytes   hits
--   ------------- -----------------------------------------   --------   ----
9    194.90.190.41 omgilibot/0.3++omgili.com                   30634860   1549
10   194.90.190.41 omgilibot/0.3++omgili.com                   29070370   1503

Top hits par heure par IP / User-Agent

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
count(*) as Hits, 
Sum(sc-bytes) AS TotalBytes 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY Hits desc

hr   client         user-agent                                  hits  totbytes
--   -------------  -----------------------------------------   ----  --------
10   194.90.190.41  omgilibot/0.3++omgili.com                   1503  29070370
12   66.249.68.47   Mozilla/5.0+(compatible;+Googlebot/2.1      1363  13186302

Le {nom du fichier} est bien sûr un chemin vers un fichier journal IIS, tel que

c:\working\sologs\u_ex090708.log

J'ai fait beaucoup de recherches sur le web pour trouver de bonnes requêtes IIS LogParser et j'en ai trouvé très peu. Ces 5 éléments, ci-dessus, nous ont énormément aidés à identifier les clients à problèmes sérieux. Mais je me demande : que nous manque-t-il ?

Quels sont les autres moyens de découper les journaux IIS en tranches (de préférence avec les requêtes LogParser ) pour les exploiter à la recherche d'anomalies statistiques ? Avez-vous de bonnes requêtes IIS LogParser que vous exécutez sur vos serveurs ?

19voto

Bob Points 34449

Le nombre d'erreurs par heure est un bon indicateur des activités de piratage ou d'autres attaques. Le script suivant renvoie le nombre d'erreurs par heure. les dates et heures présentant plus de 25 codes d'erreur retourné. Ajustez la valeur en fonction de la quantité de trafic sur le site (et de la qualité de votre application web ;-) ).

SELECT date as Date, QUANTIZE(time, 3600) AS Hour, 
       sc-status as Status, count(*) AS ErrorCount
FROM   {filename} 
WHERE  sc-status >= 400 
GROUP BY date, hour, sc-status 
HAVING ErrorCount > 25
ORDER BY ErrorCount DESC

Le résultat pourrait ressembler à ceci :

Date       Hour     Status ErrorCount
---------- -------- ------ ------
2009-07-24 18:00:00 404    187
2009-07-17 13:00:00 500    99
2009-07-21 21:00:00 404    80
2009-07-03 04:00:00 404    45
...

La requête suivante détecte un un nombre anormalement élevé d'occurrences d'une même URL à partir d'une adresse IP . Dans cet exemple, j'ai choisi 500, mais il se peut que vous deviez modifier la requête pour les cas limites (exclure l'adresse IP de Google Londres par exemple ;-) .)

SELECT DISTINCT date AS Date, cs-uri-stem AS URL,
      c-ip AS IPAddress, Count(*) AS Hits
FROM  {filename}
GROUP BY date, c-ip, cs-uri-stem
HAVING Hits > 500
ORDER BY Hits Desc

Date       URL                                 IPAddress       Hits
---------- ----------------------------------- --------------- ----
2009-07-24 /Login.aspx                         111.222.111.222 1889
2009-07-12 /AccountUpdate.aspx                 11.22.33.44     973
2009-07-19 /Login.aspx                         123.231.132.123 821
2009-07-21 /Admin.aspx                         44.55.66.77     571
...

6voto

Adam Brand Points 6047

Une chose que vous pourriez envisager pour filtrer le trafic légitime (et élargir votre champ d'action) est d'activer l'option cs(Cookie) dans les journaux de votre IIS, ajoutez un bout de code qui définit un petit cookie en utilisant javascript, et ajoutez WHERE cs(Cookie)='' .

Grâce à votre petit bout de code, chaque utilisateur devrait avoir un cookie, sauf s'il a désactivé manuellement les cookies (ce qu'un petit pourcentage de personnes pourrait faire) ou si cet utilisateur est en fait un robot qui ne supporte pas Javascript (par exemple, wget, httpclient, etc. ne supportent pas Javascript).

Je pense que si un utilisateur a un volume d'activité élevé, mais qu'il accepte les cookies et que javascript est activé, il est plus probable qu'il s'agisse d'un utilisateur légitime, alors que si vous trouvez un utilisateur avec un volume d'activité élevé mais qui n'accepte pas les cookies/javascript, il est plus probable qu'il s'agisse d'un bot.

6voto

James Skemp Points 842

Désolé, je ne peux pas encore commenter, je suis donc obligé de répondre.

Il y a un bug mineur avec la requête 'Top bandwidth usage by URL'. Alors que la plupart du temps, il n'y a pas de problème à prendre les requêtes pour une page et à les multiplier par la taille du fichier, dans ce cas, puisque vous ne faites pas attention aux paramètres de la requête, vous allez obtenir des chiffres légèrement à très inexacts.

Pour obtenir une valeur plus précise, il suffit de faire un SUM(sc-octets) au lieu de la MUL(Hits, AvgBytes) comme ServedBytes (octets servis) .

6voto

5voto

Chris Roberts Points 7543

Ce type a environ une douzaine de requêtes utiles :

http://logparserplus.com/Examples/Queries.aspx

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