Linux下通过Nginx日志分析网站访问情况

eagle / 2023-08-08 / 原文

  • 1. 前言
  • 2. 访问IP相关统计
    • 2.1. 统计IP访问量(PV)
    • 2.2. 独立IP访问统计(UV)
    • 2.3. 查看某一时间段的IP访问量(4-5点)
    • 2.4. 查看访问最频繁的前100个IP
    • 2.5. 查看访问次数在100次以上的IP
    • 2.6. 查看某个IP的详细访问情况,按访问频率排序
  • 3. 页面访问统计
    • 3.1. 查看访问最频繁的页面(top 50)
    • 3.2. 查看访问最频繁的页面(排除js, css, 字体等页面)(top 50)
    • 3.3. 查看页面访问次数超过100次的页面
    • 3.4. 查看最近1000条记录中访问量最高的页面
  • 4. 请求量统计
    • 4.1. 统计每秒的请求数,top100的时间点(精确到秒)
    • 4.2. 统计每分钟的请求数,top100的时间点(精确到分钟)
    • 4.3. 统计每小时的请求数,top10的时间点(精确到小时)
  • 5. 性能分析
    • 5.1. 列出传输时间超过3秒的页面,显示前20条
    • 5.2. 列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条
  • 6. TCP连接统计
    • 6.1. 查看当前TCP连接数
    • 6.2. 用tcpdump嗅探80端口的最高访问
  • 搜索引擎蜘蛛访问行为
    • 查看有哪些搜索引擎蜘蛛来过
  • 7. 后记
  • 8. 参考文档

1. 前言

作为一位站长, 了解网站的访问情况是日常的重要内容, 以下就是关于通过Nginx日志了解访问情况的一些常用命令.
这里罗列于此, 希望对您有所帮助, 更多关于开发, 运维, 以及产品方面的文章请访问鹏叔的技术博客空间, 该博客空间中涉及到的技术都是鹏叔在开发与维护网站过程中总结出来的.

2. 访问IP相关统计

2.1. 统计IP访问量(PV)


awk '{print $7}' /var/log/nginx/access.log | wc -l

2.2. 独立IP访问统计(UV)


awk '{print $7}' /var/log/nginx/access.log | sort -n | uniq |wc -l

2.3. 查看某一时间段的IP访问量(4-5点)

grep '21/Jul/2023:0[4-5]' /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq | sort -nr |wc -l

2.4. 查看访问最频繁的前100个IP

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

2.5. 查看访问次数在100次以上的IP

 awk '{print $1}' /var/log/nginx/access.log  | sort -n | uniq -c |  awk '{if($1 >100) print $0}' |  sort -nr 

2.6. 查看某个IP的详细访问情况,按访问频率排序


grep '127.0.0.1' /var/log/nginx/access.log | awk '{print $1,$7}' | uniq -c | sort -rn | head -n 100

3. 页面访问统计

3.1. 查看访问最频繁的页面(top 50)

awk '{print $7}' /var/log/nginx/access.log  | sort | uniq -c | sort -rn | head -n 50

3.2. 查看访问最频繁的页面(排除js, css, 字体等页面)(top 50)

grep -vE '.js|.woff2|.woff|.css|.ico' /var/log/nginx/access.log | awk '{print $7}'  | sort | uniq -c | sort -rn | head -n 50

3.3. 查看页面访问次数超过100次的页面


cat /var/log/nginx/access.log | cut -d ' ' -f 7 | sort | uniq -c |  awk  '{if($1 >100) print $0}' | less

3.4. 查看最近1000条记录中访问量最高的页面


tail -1000 /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | less

4. 请求量统计

4.1. 统计每秒的请求数,top100的时间点(精确到秒)


awk '{print $4}' /var/log/nginx/access.log | cut -c 14-21| sort | uniq -c | sort -rn| head -n 100

4.2. 统计每分钟的请求数,top100的时间点(精确到分钟)


awk '{print $4}' /var/log/nginx/access.log | cut -c 14-18| sort | uniq -c | sort -rn| head -n 100

4.3. 统计每小时的请求数,top10的时间点(精确到小时)


awk '{print $4}' /var/log/nginx/access.log | cut -c 14-15| sort | uniq -c | sort -rn| head -n 10

5. 性能分析

前置条件:在nginx的log中最后一个字段加入$request_time

5.1. 列出传输时间超过3秒的页面,显示前20条

cat /var/log/nginx/access.log | awk '($NF>3){print $7}' | sort -n | uniq -c | sort -nr | head -20

5.2. 列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条

cat /var/log/nginx/access.log | awk '($NF > 1 && $7~/\.php/) {print $7}' | sort -n | uniq -c | sort -nr | head -100

6. TCP连接统计

6.1. 查看当前TCP连接数

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

6.2. 用tcpdump嗅探80端口的最高访问


tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F "." '{print $1"."$2"."$3"."$4"."}'| sort | uniq -c | sort -rn 

搜索引擎蜘蛛访问行为

查看有哪些搜索引擎蜘蛛来过

cat /var/log/nginx/access.log |  grep sitemap

7. 后记

更多Nginx相关文章请访问 鹏叔的技术博客空间 - nginx专题

8. 参考文档

nginx 统计请求次数_Linux下通过Nginx日志分析网站访问情况的常用命令