用 grep、awk、sort 做一次访问日志速查

阿远
2026-10-26 / 0 评论 / 18 阅读 / 正在检测是否收录...

日志分析不一定要先搭平台。面对一个小型 Nginx 访问日志,命令行可以很快回答三个问题:错误是否集中、哪些地址访问最多、问题从何时开始。以下示例以常见的 combined 日志格式为前提;自定义格式要先核对字段。

先看样本,再写命令

head -n 3 access.log
tail -n 20 access.log

确认每行是否包含客户端 IP、时间、请求路径和状态码。不要直接把看不懂的日志交给一条复杂管道。

统计状态码

awk '{print $9}' access.log | sort | uniq -c | sort -nr

在常见 combined 格式中第 9 列是 HTTP 状态码。sort 先把相同值放在一起,uniq -c 才能正确计数。如果你的格式不同,应先用 awk '{print $9}' access.log | head 验证字段。

找出 5xx 最集中的客户端

awk '$9 ~ /^5/ {print $1}' access.log | sort | uniq -c | sort -nr | head

这里的结果只是排查线索。客户端 IP 可能经过代理,也可能是负载均衡器地址;不能据此直接认定某个用户造成故障。再结合时间段、请求路径和应用日志判断。

留下可复用的结论

把命令、日志格式、时间范围和统计结果放在同一份笔记里。日后日志格式变化时,先更新字段假设,而不是继续相信旧脚本的输出。涉及用户请求和 IP 的原始日志,在公开笔记中先做脱敏。

统计口径与预期

将文中的 access.log 替换为真实日志文件,先检查样本。awk 输出的 200、404、500 是按空白切分后的第九列,这只适用于约定的日志格式。没有匹配的 5xx 时,管道可能没有输出,这是零条匹配,不代表命令卡死。结果应称请求次数,不是独立访客人数;日志关闭、轮转、代理和爬虫都会改变统计口径。

内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
1

评论 (0)

取消