1. 查看实时日志(流式监控)
tail -f /var/log/nginx/access.log # 实时查看访问日志 tail -f /var/log/nginx/error.log # 实时查看错误日志
2. 统计状态码分布
# 统计各类状态码数量 awk '{print $9}' access.log | sort | uniq -c | sort -nr # 统计 404 错误的 url grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c | sort -nr # 统计 500 错误的 ip 和时间 grep ' 500 ' access.log | awk '{print $1, $4}'
3. 分析热门 url / 资源
# 统计访问最多的前 10 个 url awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10 # 统计大流量消耗的资源 awk '{print $7, $10}' access.log | sort -k2 -nr | head -10
4. 分析客户端 ip
# 统计访问 ip 数量 awk '{print $1}' access.log | sort | uniq | wc -l # 统计访问最频繁的前 10 个 ip awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 # 查看特定 ip 的详细访问记录 grep '192.168.1.100' access.log
5. 分析请求时间
# 提取响应时间字段(需日志包含 $request_time) awk '{print $nf}' access.log | sort -n | tail -10 # 最慢的 10 个请求 # 计算平均响应时间 awk '{sum+=$nf} end {print "average:", sum/nr}' access.log # 查找响应时间超过 1 秒的请求 awk '$nf > 1 {print $4, $7, $nf}' access.log
6. 分析访问时间段
# 按小时统计访问量 awk '{print substr($4, 14, 2)}' access.log | sort | uniq -c # 统计特定时间段的访问(如 10:00-11:00) grep ' \[01/jan/2025:10:' access.log | wc -l
7. 分析用户代理(user-agent)
# 统计不同浏览器/爬虫的访问量 awk '{print $12}' access.log | sort | uniq -c | sort -nr # 查找爬虫访问记录 grep -i 'bot|spider' access.log
8. 分析请求方法
# 统计不同 http 方法的使用频率 grep -op '^\s+ \k\s+' access.log | sort | uniq -c
9. 分析 referer 来源
# 统计外部链接来源 grep -v '"-"' access.log | awk '{print $11}' | sort | uniq -c | sort -nr
10. 组合分析(示例)
# 找出访问量最大且响应最慢的 10 个 url awk '{print $7, $nf}' access.log | sort -k2 -nr | head -10 | sort -k1 # 分析特定 ip 的行为(如查看是否是扫描器) grep '192.168.1.100' access.log | awk '{print $7}' | sort | uniq -c
11. 使用 awk 自定义复杂分析
# 按分钟统计请求数和流量 awk '{split($4, a, ":"); minute=a[2]":"a[3]; count[minute]++; bytes[minute]+=$10} end {for(m in count) print m, count[m], bytes[m]}' access.log | sort
12.日志格式说明
以上命令假设 nginx 日志采用默认的 combined 格式:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
如果使用自定义格式,需相应调整命令中的字段索引。
13.性能优化建议
对于超大日志文件,可先使用 grep/sed 过滤再分析:
grep '2025:05:14' access.log | awk '{print $7}' | sort | uniq -c
定期归档旧日志并压缩,减少分析范围。
考虑使用 elk stack 或 graylog 进行实时日志分析和可视化。
通过这些命令,你可以快速定位性能瓶颈、安全威胁和用户行为模式,提高系统运维效率。
到此这篇关于nginx中常见日志分析命令合集的文章就介绍到这了,更多相关nginx日志分析命令内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论