在Linux环境下,对nginx日志进行统计分析的几个常用命令

之前面试中被问到了一些关于nginx日志统计的问题,复习一下。

nginx的日志格式如下:

日志大体长这个样子:

关于日志数据呢,各位可以自己从公司搞一份。不方便的话,我准备了一份(https://download.csdn.net/download/xiao1xuan2/10961732),在我的下载资源当中。(!!!汗,本来是想免费提供的,但是CSDN现在不支持调整积分了)。

1.统计IP访问量(独立ip访问数量)

[www@localhost test]$ cat test.log | awk '{print $1}'|sort -n |uniq| wc -l
261
awk 取得第一列;

sort -n正序排序,sort -rn倒叙排序;

uniq去重,这里需要注意unix的用法:uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。重复的行一定相邻。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。);

wc -l 做统计;

2.统计2月16日12点-24点这段时间的访问总次数

[www@localhost test]$ cat test.log |  grep -E '16\/Feb\/2019:1[2-9]|16\/Feb\/2019:2[0-3]'| wc -l
1242

主要麻烦在这个正则表达式上。

3.查看访问最频繁的前5个IP,并列出访问次数

[www@localhost test]$ cat test.log | awk '{print $1}'|sort -n|uniq -c| sort -rn| head -5
   6580 1.119.1.242
   2341 123.121.224.46
   2052 123.121.223.119
    572 123.121.207.249
    450 123.121.226.178

sort -n|uniq -c 首先做去重操作;

sort -rn 倒序排序;

head -5 区前5个;

4.查看访问次数大于X(这里假设是100)的IP,并列出访问次数

[www@localhost test]$ cat test.log | awk '{print $1}'|sort -n|uniq -c| sort -rn| awk '{if($1 > 100) print $0}'
   6580 1.119.1.242
   2341 123.121.224.46
   2052 123.121.223.119
    572 123.121.207.249
    450 123.121.226.178
    277 47.95.15.186
    184 114.242.250.101
    175 114.242.248.123
    158 221.178.126.227
    122 157.230.33.140
    120 219.237.112.98

嘿嘿,我的leader常说的一句话,一个awk不行就两个。

5.查询出访问最频繁的URL

[www@localhost test]$ cat test.log | awk '{print $7}'|awk -F'?' '{print $1}'|sort -n|uniq -c|sort -rn|head -1
   2783 /user/info

awk -F'?' '{print $1}' 按照指定的分隔符分割。

6.统计访问成功次数

最开始呢,我直接写的响应值为200即可

[www@localhost test]$ cat test.log |awk '{if($9 == 200) print $9}'|wc -l
12954

后来想到万一有别的状态码呢,于是又写了一个正则匹配表达式

[www@localhost test]$ cat test.log |awk '{if($9 ~ /2[0-9]{2}/) print $9}'|wc -l
12982

果然有误差,有一些206的状态码。所以平时写东西要小心。

猜你喜欢

转载自blog.csdn.net/xiao1xuan2/article/details/87549774