随着 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 ...
您可以考虑过滤掉合法流量(并扩大您的范围)的一件事是cs(Cookie)在您的 IIS 日志中启用,添加一些使用 javascript 设置小 cookie 的代码,然后添加WHERE cs(Cookie)=''.
由于您的代码很少,每个用户都应该有一个 cookie,除非他们手动禁用了 cookie(一小部分人可能会这样做),或者除非该用户实际上是一个不支持 Javascript 的机器人(例如,wget、httpclient等不支持Javascript)。
我怀疑如果用户有大量活动,但他们接受 cookie 并启用了 javascript,那么他们更有可能是合法用户,而如果您发现用户活动量很大但没有 cookie/javascript 支持,他们更有可能是机器人。
抱歉,我还不能发表评论,所以我不得不回答。
“按 URL 使用的最高带宽”查询存在一个小错误。虽然大多数情况下您可以接受对页面的请求并乘以文件大小,但在这种情况下,由于您没有注意任何查询参数,因此您将遇到一些稍微- 非常不准确的数字。
要获得更准确的值,只需将SUM(sc-bytes)而不是MUL(Hits, AvgBytes) 作为 ServedBytes。
Anders Lundström一直在撰写有关常见 LogParser 查询的一系列博客文章。
我一直在使用这些:
| 归档时间: |
|
| 查看次数: |
47651 次 |
| 最近记录: |