用于 IIS 监控的推荐 LogParser 查询?

Jef*_*ood 86 iis logparser

随着 Stack Overflow 的发展,我们开始仔细查看我们的 IIS 日志以识别有问题的 HTTP 客户端——例如流氓网络蜘蛛、设置大页面每秒刷新的用户、编写不当的一次性网络抓取工具、棘手的问题尝试增加页面的用户数以百万计,依此类推。

我提出了一些LogParser查询,当指向 IIS 日志文件时,它们可以帮助我们识别大多数奇怪和异常情况。

按 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
Run Code Online (Sandbox Code Playgroud)
url 命中 avgbyte 服务
------------------------------------------------- - ---- ------- -------
/favicon.ico 16774 522 8756028
/content/img/search.png 15342 446 6842532

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
Run Code Online (Sandbox Code Playgroud)
网址命中
------------------------------------------------- - ----
/content/img/sf/vote-arrow-down.png 14076
/content/img/sf/vote-arrow-up.png 14018

IP / 用户代理的最高带宽和点击量

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
Run Code Online (Sandbox Code Playgroud)
客户端用户代理 totbytes 点击数
------------- ------------------------------------- ———————————————
66.249.68.47 Mozilla/5.0+(兼容;+Googlebot/2.​​1;135131089 16640
194.90.190.41 omgilibot/0.3++omgili.com 133805857 6447

按 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
Run Code Online (Sandbox Code Playgroud)
hr 客户端用户代理 totbytes 点击数
-- ------------- ----------------------------------- ------ ------ ----
9 194.90.190.41 omgilibot/0.3++omgili.com 30634860 1549
10 194.90.190.41 omgilibot/0.3++omgili.com 29070370 1503

按 IP / 用户代理的小时点击量最高

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
Run Code Online (Sandbox Code Playgroud)
hr 客户端用户代理点击数 totbytes
-- ------------- ----------------------------------- ------ ---- --------
10 194.90.190.41 omgilibot/0.3++omgili.com 1503 29070370
12 66.249.68.47 Mozilla/5.0+(兼容;+Googlebot/2.​​1 1363 13186302

{filename} 当然是 IIS 日志文件的路径,例如

c:\working\sologs\u_ex090708.log

我对良好的 IIS LogParser 查询进行了大量网络搜索,但发现的很少。以上 5 项极大地帮助了我们识别严重问题的客户。但我想知道 - 我们错过了什么?

还有哪些其他方法可以对 IIS 日志(最好使用 LogParser 查询)进行切片和切块以挖掘它们的统计异常?您有在服务器上运行的任何好的 IIS LogParser 查询吗?

spl*_*tne 19

黑客活动或其他攻击的一个很好的指标是每小时的错误数。以下脚本返回返回的错误代码超过 25 个日期和时间。根据站点上的流量(以及 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
Run Code Online (Sandbox Code Playgroud)

结果可能是这样的:

日期 小时 状态 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
...

下一个查询检测到来自一个 IP 地址的单个 URL 的命中次数异常多。在此示例中,我选择了 500,但您可能需要更改对边缘情况的查询(例如,不包括 Google London 的 IP 地址;-)。)

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
Run Code Online (Sandbox Code Playgroud)
日期 URL IP 地址命中
---------- ----------------------------------- ----- ---------- ----
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
...


Ada*_*and 6

您可以考虑过滤掉合法流量(并扩大您的范围)的一件事是cs(Cookie)在您的 IIS 日志中启用,添加一些使用 javascript 设置小 cookie 的代码,然后添加WHERE cs(Cookie)=''.

由于您的代码很少,每个用户都应该有一个 cookie,除非他们手动禁用了 cookie(一小部分人可能会这样做),或者除非该用户实际上是一个不支持 Javascript 的机器人(例如,wget、httpclient等不支持Javascript)。

我怀疑如果用户有大量活动,但他们接受 cookie 并启用了 javascript,那么他们更有可能是合法用户,而如果您发现用户活动量很大但没有 cookie/javascript 支持,他们更有可能是机器人。


Jam*_*emp 6

抱歉,我还不能发表评论,所以我不得不回答。

“按 URL 使用的最高带宽”查询存在一个小错误。虽然大多数情况下您可以接受对页面的请求并乘以文件大小,但在这种情况下,由于您没有注意任何查询参数,因此您将遇到一些稍微- 非常不准确的数字。

要获得更准确的值,只需将SUM(sc-bytes)而不是MUL(Hits, AvgBytes) 作为 ServedBytes


Por*_*man 5

这家伙有大约十几个有用的查询:

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

  • 那家伙(我)*总是*在寻找更多要发布的查询。 (3认同)