Nginx日志时间字段位于第4列,格式为[10/Jan/2026:14:22:35 +0800],可截取第14–15字符提取小时、14–18提取分钟、14–21提取秒,结合IP去重、状态码和关键页面PV交叉验证真实高峰,并可用goaccess生成可视化小时趋势报告。

提取时间字段并按小时聚合
Nginx 日志中时间信息位于第 4 字段,格式类似 [10/Jan/2026:14:22:35 +0800]。要定位高峰时段,先精准截取“小时”部分(第 14–15 字符):
-
统计每小时请求数(Top 10):
awk '{print $4}' access.log | cut -c 14-15 | sort | uniq -c | sort -nr | head -n 10 - 注意:
cut -c 14-15提取的是方括号内时间的小时位(如:14:中的14),适用于标准日志格式 - 若日志时区不统一,建议先用
grep筛出目标日期再分析,避免跨天干扰
细化到分钟或秒级波动分析
小时粒度可能掩盖短时突增(如秒级接口刷量、爬虫集中访问)。可进一步压缩时间精度:
-
每分钟请求 Top 20:
awk '{print $4}' access.log | cut -c 14-18 | sort | uniq -c | sort -nr | head -n 20(截取:14:22) -
每秒请求 Top 10:
awk '{print $4}' access.log | cut -c 14-21 | sort | uniq -c | sort -nr | head -n 10(截取:14:22:35) - 发现某秒请求数异常高(如 >500),需结合 IP 和 URL 追查是否为攻击或发布触发行为
结合业务场景交叉验证
单纯看请求数可能失真。比如静态资源批量加载会拉高数值,但实际用户数有限。建议叠加维度判断真实高峰:
- 同一小时内,UV(独立IP数)同步激增才说明是真实用户访问高峰:
awk '$4 ~ /:14:/ {print $1}' access.log | sort -u | wc -l - 检查该时段 4xx/5xx 错误比例是否上升,高峰伴随错误率跳升,可能是容量瓶颈信号
- 对比 关键页面(如首页、下单页)的 PV 走势,确认流量是否集中在核心路径
用 goaccess 快速可视化趋势
命令行聚合适合快速排查,但看趋势更推荐图形化工具:
- 安装后直接运行:
goaccess access.log -a --date-format=%d/%b/%Y --time-format=%H:%M:%S - 生成 HTML 报告,进入 “Hourly Requests” 标签页,直观看到每小时请求数曲线及峰值时刻
- 支持筛选日期范围、状态码、浏览器等,方便排除干扰项(如屏蔽爬虫 UA 后再观察)


















