统计Nginx访问量最高的IP

日志格式

文件名称是 nginx_access.log

106.38.241.73 - - [29/Oct/2019:03:51:15 +0800] "GET /web/notice/20160524/568.html HTTP/1.1" 200 23333 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
106.38.241.73 - - [29/Oct/2019:03:51:44 +0800] "GET /web/notice/20180704/1465.html HTTP/1.1" 200 25232 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"
183.136.190.62 - - [29/Oct/2019:03:52:06 +0800] "GET / HTTP/1.1" 200 4535 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
106.38.241.73 - - [29/Oct/2019:03:52:10 +0800] "GET /web/notice/20160926/809.html HTTP/1.1" 200 31855 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"

执行命令

$ awk '{print $1}' nginx_access.log | sort | uniq -c | sort -nr -k1 | head -n 100

命令解释:

awk '{print $1}' nginx_access.log

获取 nginx_access.log第一列,就是 IP

sort

第一个sort,IP 按照字母序正序排列,这是一个归类过程,便于下面命令的执行

uniq -c

按照相同项归类,遇到不同的项就生成新类别,所以需要前面的sort。最终生成的格式如下是 数量 IP的格式,如: 3 106.38.241.73

sort -k1 -nr

根据第一列排序(k1),按照数字序(-n)逆序(-r)排。

head -n 100

从头开始输出结果,输出前面的100行,类似的命令还有tail

其它命令

  • 统计IP数量
 $ awk '{print $1}' access_api.log | sort | uniq -c | awk '{print NR}' | tail -n1

或

$ awk '{print $1}' access_api.log | sort | uniq -c | awk 'END{print NR}'
  • 统计访问总量
$ awk '{print $1}' access_www.log-20201201 | sort | uniq -c | sort -nr -k1 | awk '{a+=$1}END{print a}'
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容