一条语句查看web日志排名前十的IP/URL页面及总数
一条语句查看 Web 日志排名前十的 IP/URL 页面及总数
通过分析 Nginx Web 访问日志,我们可以快速统计访问量前十的 IP 地址以及热门页面地址。这有助于识别网站受欢迎的内容,以及排查高流量 IP 的访问行为(例如是否存在恶意爬虫或攻击)。
以下命令基于标准的 Linux shell 工具链(awk、sort、uniq、head),适用于大多数 Nginx/Apache 访问日志分析场景。
统计访问量前十的 IP 地址
该命令用于提取日志中所有请求的源 IP 地址,统计出现频率并展示排名前十的结果。
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10执行结果示例:
391942 211.**.151.218
269168 218.**.103.140
142282 112.**.20.133
105460 112.**.25.241
96016 119.**.155.137
89926 112.**.31.16
83113 218.**.200.19
79975 112.**.28.11
79890 119.**.156.14
72041 124.**.110.72统计特定日期的访问 IP 排名
如果需要分析某一天的访问情况,可以先通过 grep 过滤日期,再进行统计。请注意,日志中的日期格式需与实际日志文件一致(例如 07/Nov/2013)。
grep "07/Nov/2013" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10执行结果示例:
3452 60.**.235.88
2297 119.**.195.228
2258 113.**.145.91
1221 123.**.187.223
905 211.**.82.175
899 117.**.5.207
888 112.**.24.202
787 110.**.139.183
576 143.**.5.44
574 125.**.18.21统计访问量前十的 URL 页面
通过提取日志中的特定字段(通常为 Referer 或请求 URL),可以分析哪些页面最受欢迎。在常见的 Combined 日志格式中,$11 通常对应 Referer 字段(即用户来源页面),具体字段索引需根据实际日志格式调整。
awk '{print $11}' access.log | sort | uniq -c | sort -nr | head -n 10执行结果示例:
1420617 "http://***.com/forum.php"
844547 "http://***.com/?fromuid=1180"
760045 "http://www.***.com/"
697515 "http://www.***.com/forum.php"
436309 "http://www.***.com/?fromuid=1080"
279609 "http://www.***.com/?fromuid=21"
172784 "http://www.***.com/?fromuid=2123"
108563 "http://www.***.com/?fromuid=1090"
86906 "http://www.***.com/plugin.php?id=sanree_brand:sanree_brand"
80661 "http://www.***.com/plugin.php?id=sanree_brand_goods:sanree_brand_goods"说明
- 命令逻辑修正:在使用
uniq -c统计次数前,必须先通过sort将相同内容排列在一起,否则uniq只能统计相邻的重复行。上述命令已确保包含sort步骤。 - 日志格式差异:
awk '{print $11}'中的字段索引$11取决于 Nginx/Apache 的日志格式配置(log_format)。如果是标准 Combined 格式,$11通常为 Referer;若需统计请求的 URL 路径,通常对应$7或其他字段,建议使用head -1 access.log查看字段分布。 - 时效性:文中示例日期(2013 年)较早,实际操作时请替换为当前日志中的日期格式。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。