Nginx access.log日志解析
分析特定时间段的日志
使用
awk
和其他命令,您可以轻松地筛选出特定日期或时间段的日志。例如,以下命令将提取2023年10月1日的日志:
awk -F '[][]' '$2 >= "20/Oct/2023:00:00:00" && $2 <= "20/Oct/2023:23:59:59"' access.log
# - 此命令在方括号中正确分隔日期和时间,并且在日期和时间范围比较方面修复了问题。请尝试使用这个命令,它应该正确地提取指定日期(例如2023年10月20日)的日志条目。如果您的日志文件的日期格式略有不同,您可能需要稍微调整命令以匹配您的特定格式。如果仍然有问题,请提供日志文件的示例行以供更详细的帮助。
统计访问IP次数
awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c | sort -nr
# 结果如下:
6158 10.17.0.9
627 172.16.0.53
查找访问最频繁的页面
awk '{print $7}' access.log | sort | uniq -c | sort -nr
# 结果如下:
494 /authServer/project/selectAllProject?projectTenant=609073142526251008
270 /authServer/tenant/treeSelectPermission?userId=6464574635325353
62 /api/dataSource/type/list
43 /authServer/tenant/treeSDXASelectPermission?userId=6464574635325353
43 /authServer/project/selectAllProject?projectTenant=1352423
38 /api/scheduleplan/selectSchedulePlans?planName=&planType=&pageNum=1&pageSize=20
34 /authServer/tenant/judgeAccess?tenantId=1352423
30 /api/group/list?pageNum=1&pageSize=10000
................
查找特定HTTP状态码的请求
grep ' 404 ' access.log
# 结果如下:
10.17.0.9 - - [05/Sep/2023:15:04:45 +0800] "GET /api/fileDirectory/getDirectoryList HTTP/1.1" 404 149 "http://10.17.0.71:9001/exchange/file/file2data" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
10.17.0.9 - - [05/Sep/2023:18:03:22 +0800] "GET /api/fileDirectory/getDirectoryList HTTP/1.1" 404 149 "http://10.17.0.71:9001/exchange/file/file2data" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
10.17.0.9 - - [18/Oct/2023:17:30:30 +0800] "GET /api/fileDirectory/getDirectoryList HTTP/1.1" 404 149 "http://10.17.0.71:9001/exchange/file/file2data" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
查找用户代理信息
如果您想了解访问者使用的用户代理信息(浏览器、操作系统等),可以提取用户代理字符串并分析它们:
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -nr
# 结果如下:
5094 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
1064 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36
627 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57
计算流量
如果您想知道访问日志中的总流量,您可以使用
awk
来提取响应大小并求和:
awk '{sum+=$10} END {print sum}' access.log
# 结果如下:
61800331
查找特定URL的请求
:使用
grep
命令来查找特定URL的请求,例如查找所有访问 "/example" 的请求:
grep '/example' access.log
查找特定HTTP方法的请求
您可以使用
awk
和其他命令来查找特定HTTP方法(GET、POST等)的请求,例如查找所有POST请求:
awk '$6 == "POST"' access.log
分析响应时间
如果您想了解每个请求的响应时间,可以使用
awk
来提取响应时间信息:
awk '{print $10}' access.log
查找异常请求
使用
grep
和正则表达式来查找异常请求,例如查找包含特定关键字的请求:
grep -E '404|50[0-9]' access.log
计算访问频率
使用
awk
和其他命令来计算每小时或每分钟的访问频率,以了解高峰时段:
bashCopy code
awk '{print $4}' access.log | cut -d: -f2 | sort | uniq -c
查找特定HTTP头信息
如果您需要提取请求或响应中的特定HTTP头信息,可以使用
awk
和正则表达式:
awk '{if ($0 ~ /User-Agent/) print $0}' access.log
这些命令和技巧可以帮助您更深入地分析Nginx日志文件,根据您的需求选择适当的命令。请根据日志文件的具体格式和要解决的问题进行调整。
评论区