QUANTIZE() 函数可能对您特别有用。这使您可以汇总一段时间内的统计数据,从而使您可以查看给定时间段内的峰值。这是我使用的一个查询,可以让我看到我们何时被扫描:
SELECT QUANTIZE(TO_LOCALTIME(TO_TIMESTAMP(date, time)), 900) AS LocalTime,
COUNT(*) AS Hits,
SUM(sc-bytes) AS TotalBytesSent,
DIV(MUL(1.0, SUM(time-taken)), Hits) AS LoadTime,
SQRROOT(SUB(DIV(MUL(1.0, SUM(SQR(time-taken))), Hits), SQR(LoadTime))) AS StandardDeviation
INTO '[OUTFILEPATH]'
FROM '[LOGFILEPATH]'
WHERE '[WHERECLAUSE]'
GROUP BY LocalTime
ORDER BY LocalTime
我通常将其输出到 .csv 文件,然后在 Excel 中绘制图表,以直观地查看一段时间超出正常范围的位置。这个特定的查询根据传递给 QUANTIZE 的 900 将事情分解为 15 分钟的段。TotalBytesSent、LoadTime 和 StandardDeviation 允许我查看下载内容或响应时间中的其他异常。
要查看的另一件事是特定客户对您的网站提出的请求数量。以下查询可以帮助识别进入的扫描或 DoS 活动:
SELECT
DISTINCT c-ip as ClientIP,
COUNT(*) as Hits,
PROPCOUNT(*) as Percentage
INTO '[OUTFILEPATH]'
FROM '[LOGFILEPATH]'
WHERE '[WHERECLAUSE]'
GROUP BY ClientIP
HAVING (Hits > 50)
ORDER BY Percentage DESC
调整 HAVING 子句将设置 IP 在出现之前需要发出的最小请求数。根据活动和 WHERE 子句,50 可能太低。PROPCOUNT() 函数给出特定字段总值的百分比。在这种情况下,它给出了对站点的所有请求的特定 IP 的百分比。通常,这也会显示搜索引擎的 IP 地址,但这些很容易清除。
我希望这能给你一些关于你能做什么的想法。