Home » Code » 使用Linux命令对Nginx日志进行简单统计

使用Linux命令对Nginx日志进行简单统计

首先,在 Nginx 日志末尾添加 $request_time 把响应时间到日志中。

PV

统计 PV,就是日志行数。

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |wc -l
53102

UV

UV, 即是统计 IP 数。

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{print $1}' |sort |uniq -c |wc -l
2886

注意,uniq -c,去重并在输出行前面加上每行在输入文件中出现的次数,必须先排序一次,它是逐行比较,遇到下一行不相同次数就恢复1了。

访问最频繁的IP

IP 出现次数从高到低。

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn |head
   7766 219.132.139.37
   4472 113.64.105.9
   2981 116.5.142.176
   2139 113.64.102.24
   1356 113.81.2.143
   1352 113.64.101.143
   1206 113.87.195.185
   1192 183.25.126.220
   1079 183.25.125.144
   1064 113.64.102.172

sort -nr, n 按数值来排序(而不是ascii码值),r 倒序,大的在前。

访问最频繁的URI

URI 出现次数从高到低。

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{print $7}' |sort |uniq -c |sort -rn |head
   6310 /api/user-push-message
   3553 /
   2484 /api/homepage-today-recommendgoods?title=&sort=&page=1&pagesize=10
   2484 /api/homepage-pintuan?title=&sort=&page=1&pagesize=2
   2482 /api/homepage-hot-salerecommend?title=&sort=&page=1&pagesize=2
   2326 /api/homepage?page=1
   2094 /api/lucky-draw/1
   1379 /api/profile
   1248 /api/collectAndViewhistory
   1175 /api/homepage

状态码分布情况

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{print $9}' |sort |uniq -c |sort -nr
  46217 200
   2523 404
   1302 500
   1223 304
    926 401
    678 302
    254 400
    120 "-"
     51 157
     44 499
     30 422
     29 206
     21 405
     12 413
     12 403
      8 301
      4 SP1
      3 419
      2 408

最耗时的请求发生时间、所请求的 URI 和耗时

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{print $4,$7,$NF}' |sort -k3 -nr|head
[01/Mar/2019:02:11:32 /api/homepage?page=1 20.542
[11/Feb/2019:05:24:15 /api/collectAndViewhistory?type=2&page=1 10.027
[01/Mar/2019:00:49:22 /api/cate-list?title=%E7%9F%AD%E8%A2%96&sort=&page=3 8.811
[26/Mar/2019:08:41:18 /api/homepage-pintuan?title=&sort=&page=1&pagesize=2 8.493
[03/Mar/2019:09:16:49 /api/homepage?page=1 8.424
[01/Mar/2019:03:44:09 /api/homepage-cheap-goods?title=&sort=&page=2 8.152
[29/Mar/2019:03:05:32 /api/cate-list?title=%E5%9C%A8%E6%B7%98%E5%AE%9D%E5%92%8C%E4%BA%AC%E4%B8%9C%E5%89%8D%E8%AE%B0%E5%BE%97%E5%8F%91%E9%93%BE%E6%8E%A5%E7%BB%99%E6%88%91%E7%9C%8B%E7%9C%8B%E6%88%91%E6%B2%A1%E6%9C%89%E4%BC%98%E6%83%A0%E5%88%B8%E5%93%A6[%E5%A5%B8%E7%AC%91]%E7%9C%81%E9%92%B1%E6%98%AF%E4%B8%80%E7%A7%8D%E5%A5%BD%E4%B9%A0%E6%83%AF%EF%BC%8C%E5%B8%8C%E6%9C%9B%E4%BD%A0%E6%8B%A5%E6%9C%89[%E8%B0%83%E7%9A%AE]&sort=&page=2 7.956
[01/Mar/2019:15:37:50 /api/homepage?page=1 7.876
[18/Feb/2019:02:51:49 /api/items/576998516953 7.744
[04/Mar/2019:03:00:00 /api/collectAndViewhistory 7.474

awk 中 $NF, 表示最后一个字段。sort -k3, 表示依据第3个字段来排序, 默认的字段分割符是空格,如果是其他可以使用 -t 指定。

不同 URI 的平均耗时

[root@izwz9gnho9y85rrwrrr7v2z log]# cat access.log |awk '{s[$7] += $NF;c[$7]++}END{for(i in s){print i,s[i]/c[i]}}' |sort -k2 -nr |head
/api/cate-list?title=%E7%9F%AD%E8%A2%96&sort=&page=3 8.811
/api/cate-list?title=%E5%9C%A8%E6%B7%98%E5%AE%9D%E5%92%8C%E4%BA%AC%E4%B8%9C%E5%89%8D%E8%AE%B0%E5%BE%97%E5%8F%91%E9%93%BE%E6%8E%A5%E7%BB%99%E6%88%91%E7%9C%8B%E7%9C%8B%E6%88%91%E6%B2%A1%E6%9C%89%E4%BC%98%E6%83%A0%E5%88%B8%E5%93%A6[%E5%A5%B8%E7%AC%91]%E7%9C%81%E9%92%B1%E6%98%AF%E4%B8%80%E7%A7%8D%E5%A5%BD%E4%B9%A0%E6%83%AF%EF%BC%8C%E5%B8%8C%E6%9C%9B%E4%BD%A0%E6%8B%A5%E6%9C%89[%E8%B0%83%E7%9A%AE]&sort=&page=2 7.956
/api/items/576998516953 7.744
/api/cate-list?title=%E6%B4%97%E9%9D%A2%E5%A5%B6&sort=&page=2 6.562
/api/cate-list?title=%E4%B9%9D%E9%98%B3JYS-A800%E7%BB%9E%E8%82%89%E6%9C%BA%E5%AE%B6%E7%94%A8%E7%94%B5%E5%8A%A8%E5%A4%9A%E5%8A%9F%E8%83%BD%E7%A2%8E%E8%82%89%E6%90%85%E6%8B%8C%E6%90%85%E8%82%89%E7%BB%9E%E9%A6%85%E6%89%93%E8%82%89%E6%89%93%E8%92%9C%E6%96%99%E7%90%86&sort=&page=2 6.449
/api/homepage-cheap-goods?title=&sort=&page=6 6.243
/api/cate-list?title=%E7%9F%AD%E8%A2%96&sort=&page=4 6.21
/api/cate-list?title=%E7%A0%A7%E6%9D%BF&sort=&page=1 6.078
/api/cate-list?title=%E7%89%9B%E4%BB%94%E8%A3%A4&sort=price_asc&page=2 5.902
/api/cate-list?title=%E7%89%9B%E4%BB%94%E8%A3%A4&sort=price_asc&page=1 5.663

awk 中,s 数组统计 URI 耗时总和,c 数组统计 URI 总请求次数,最后相除。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.