获得离线日志文件后,您可以使用命令行工具来快速解析日志文件,提取访问量TOP10的IP地址、User-Agent和Referer信息。本文为您介绍如何在Linux环境中,使用命令行工具分析CDN的离线访问日志。
前提条件
已下载离线日志,具体请参见快速入门。
使用说明
日志命名规则:加速域名_年_月_日_开始时间_结束时间[扩展字段].gz,扩展字段以下划线(_)开头。例如
aliyundoc.com_2018_10_30_000000_010000_xx.gz。说明扩展字段可能不存在,例如
aliyundoc.com_2018_10_30_000000_010000.gz。日志示例
[9/Jun/2015:01:58:09 +0800] 10.10.10.10 - 1542 "-" "GET http://www.aliyun.com/index.html" 200 191 2830 MISS "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://example.com/robot/)" "text/html"
解析日志
收集和准备日志数据
-
快速入门,可得到
aliyundoc.com_2018_10_30_000000_010000.gz的日志文件。 -
上传日志文件至本地Linux系统服务器。
-
登录本地Linux系统服务器,执行如下命令,解压日志文件。
gzip -d aliyundoc.com_2018_10_30_000000_010000.gz解压后得到一个文件名为
aliyundoc.com_2018_10_30_000000_010000的日志文件。
识别和过滤异常行为
检查请求量
您可以通过分析离线日志数据中的IP请求次数来识别异常请求量的情况。通常请求量异常会具有如下几个特征:
-
异常高的请求量:对单一源IP的访问频次进行深度审查,若检测到某IP地址在特定时段内发起的请求量显著偏离常态值,此情况高度疑似为流量盗用行为。
-
短时间内大量请求:突然的流量峰值或者异常的周期性请求模式。
统计访问前十IP地址。
cat [$Log_Txt] | awk '{print $3}' |sort|uniq -c|sort -nr |head -10说明-
awk '{print $3}': 提取日志文件的第3列,即IP地址。(列之间使用空格隔开)。 -
sort: 排序IP地址。 -
uniq -c: 统计每个IP地址的出现次数。 -
sort -nr: 按统计次数进行降序排列。 -
head -n 10: 获取出现次数最多的前10个IP地址。 -
[$Log_Txt]:替换对应的日志文件名称,例如aliyundoc.com_xxxxxxx。
-
用户代理分析
您可以通过分析离线日志数据中的请求User-Agent来识别异常请求量的情况。通常请求User-Agent异常会有如下几个特征:
-
异常或伪造的User-Agent:很多盗刷工具会使用默认或伪造的User-Agent,可以通过筛选不常见和可疑的或为空User-Agent进行分析。
提取和统计User-Agent。
grep -o '"Mozilla[^"]*' [$Log_Txt] | cut -d'"' -f2 | sort | uniq -c | sort -nr | head -n 10可通过排除常见的User-Agent来筛选可疑的User-Agent。
grep -v -E "Firefox|Chrome|Safari|Edge" [$Log_Txt]统计User-Agent为空的行数,即访问次数。
awk '!/Mozilla/' [$Log_Txt] | wc -l说明grep -o:只输出匹配的内容。grep -v -E:显示符合条件的字符。wc -l:统计数量。
请求模式分析
您可以通过分析离线日志数据中的URL请求量来识别异常请求量的情况。通常URL请求异常会具有如下几个特征:
-
URL相似度高:盗刷流量通常会请求大量类似或相同的URL,可以通过分析URL模式发现异常请求。
-
高比例访问特定资源类型:重点分析被频繁访问的资源(如图片、CSS、JS等),如果某些特定资源被异常大量访问,也可能是盗刷流量。
统计访问前十的url。
grep -oP '"https?://[^"]+"' [$Log_Txt] | sort | uniq -c | sort -nr | head -n 10
响应码分析
您可以通过分析离线日志数据中的请求状态码来识别异常请求量的情况。通常请求状态码异常会具有下几个特征:
-
高比例的4xx或5xx响应:如果某一IP地址产生大量的4xx或5xx响应码,可能表明该地址在进行恶意爬取尝试。
统计不同状态码出现的次数。
awk '{print $9}' [$Log_Txt] | sort | uniq -c | sort -nr统计状态码为400前十IP。
grep ' 400 ' [$Log_Txt] | awk '{print $3}' | sort | uniq -c | sort -nr | head -n 10
Referer分析
您可以通过分析离线日志数据中的Referer字段来识别异常流量来源。当域名出现异常大流量时,Referer分析有助于判断流量是否来自正常引用还是盗链或攻击行为。通常Referer异常会具有如下几个特征:
-
空Referer请求占比过高:大量空Referer请求可能意味着直接访问或工具盗刷。正常情况下,图片、视频等静态资源的请求通常携带来源页面的Referer,如果空Referer请求消耗的流量占比明显偏高,需要重点排查。
统计访问前十Referer。
awk '{print $6}' [$Log_Txt] | sort | uniq -c | sort -nr | head -n 10统计空Referer请求数量。
awk '$6=="\"-\"" {count++} END {print count}' [$Log_Txt]统计空Referer请求中访问量前十的IP地址。
awk '$6=="\"-\"" {print $3}' [$Log_Txt] | sort | uniq -c | sort -nr | head -n 10说明-
$6:日志中的第6个字段,对应Referer值。空Referer在日志中表现为"-"。 -
如果空Referer请求产生了大量流量,建议结合CDN的Referer防盗链功能配置黑白名单,限制空Referer的访问。
-
-
异常Referer来源集中:如果排名靠前的Referer不属于您自身的业务域名,可能存在其他站点盗链您的资源。
过滤指定Referer的请求并统计对应IP。
grep 'example.com' [$Log_Txt] | awk '{print $3}' | sort | uniq -c | sort -nr | head -n 10说明将
example.com替换为实际可疑的Referer域名。通过此命令可以确认哪些IP在使用该Referer盗链您的资源。