Nginx统计访问IP并排序

最近在做运营的一个需求,需要统计IP访问,突发奇想能不能从Nginx的日志里试试,毕竟以前没搞过,感觉挺有意思的


nginx访问日志格式如下:

xxx.xxx.xxx.xxx - - [17/04/2020:02:58:45 +0000] "GET / HTTP/1.1" 502 166 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
xxx.xxx.xxx.xxx - - [17/04/2020:02:58:45 +0000] "GET / HTTP/1.1" 502 166 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
xxx.xxx.xxx.xxx - - [17/04/2020:02:58:45 +0000] "GET / HTTP/1.1" 502 166 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"

解决思路:

# 先提取访客的 ip,awk提取
$ cat access.log |awk '{print1}'
223.166.74.72
119.39.46.77
110.167.94.116
71.6.202.253
115.192.187.161
134.119.218.243
184.105.247.196
87.2.28.156
...

# 对所展示的ip进行统计操作
$ cat access.log |awk '{print1}'|sort|uniq -c
2 157.55.39.27
1 159.203.201.155
8 163.177.13.2
1 164.68.112.178
1 171.34.179.184
1 175.152.111.112
4 175.184.164.59
84 182.138.137.127
158 182.138.158.156
334 182.138.158.183
250 182.138.158.67
...

# 上面的是没有排序的,加上sort-rn命令即可排序
$ cat 1.log | awk '{print$1}' |sort|uniq -c|sort -rn
334 182.138.158.183
250 182.138.158.67
158 182.138.158.156
84 182.138.137.127
16 36.32.3.46
10 123.245.24.149
8 163.177.13.2
7 182.96.12.70
6 39.100.240.14
6 39.100.231.247
...

# 通过上面的命令即可完成统计, 如果需要展示前5名的ip,只需要加上 head -5 即可
$ cat 1.log | awk '{print$1}' |sort|uniq -c|sort -rn|head -5
334 182.138.158.183
250 182.138.158.67
158 182.138.158.156
84 182.138.137.127
16 36.32.3.46

本作品采用《CC 协议》,转载必须注明作者和本文链接
铁甲依然在
本帖由系统于 2个月前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

使用 linux 作为服务器真方便。

2个月前 评论

如果访问量上来了数据量庞大了起来,这样子不会很卡吗
是否还是得考虑做统计处理

1个月前 评论
oliver-l 1个月前
reggie (楼主) 1个月前

awk '{print $1}' ./access.log | sort | uniq -c | sort -nr | head -n 5

1个月前 评论

file

1个月前 评论
黑将军 1个月前
Mr-houzi 6天前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!