直接分析Apache访问日志时间戳分布可快速定位流量高峰,推荐按分钟(substr($4,2,15))或小时(substr($4,2,13))分组统计,结合时区、日志滚动、状态码及文件类型过滤提升准确性,并导出CSV可视化。

直接看 Apache 访问日志的时间戳分布,就能快速定位流量高峰时段。关键不是单条记录,而是单位时间(如每分钟或每5分钟)的请求数统计。
提取并按时间分组统计
Apache 日志默认格式中,第一字段是带方括号的时间戳,例如:
[10/Jan/2024:14:23:05 +0800]
可用 awk 提取前17位(精确到分钟)或前14位(精确到小时),再用 sort | uniq -c 统计频次:
- 按分钟统计(推荐):
awk '{print substr($4,2,15)}' access.log | sort | uniq -c | sort -nr | head -20 - 按小时统计(看全天趋势):
awk '{print substr($4,2,13)}' access.log | sort | uniq -c | sort -nr
注意时区与日志滚动影响
Apache 默认使用服务器本地时区,确保你分析时用的是同一时区时间;若日志被 logrotate 切割过,需合并多个文件或指定日期范围:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 查最近24小时(假设日志未轮转):
awk -v d="$(date -d '24 hours ago' '+%d/%b/%Y:%H:%M')" '$4 ~ /\[\"d/ {print $4}' access.log | ... - 多文件一起分析:
zcat access.log.*.gz access.log | awk ...(含压缩日志)
结合状态码和响应大小辅助判断
单纯请求数高不等于业务压力大,可能只是爬虫或静态资源刷量。可加条件过滤:
- 只统计成功响应(HTTP 2xx):
awk '$9 ~ /^2/ {print substr($4,2,15)}' access.log | sort | uniq -c | sort -nr - 排除小文件(如 .ico、.css)减少干扰:
awk '$9 ~ /^2/ && $7 !~ /\.(ico|css|js|png|jpg|gif)$/ {print substr($4,2,15)}' access.log | ...
用脚本或工具可视化更直观
手动命令适合快速排查,长期监控建议导出数据后绘图:
- 导出为 CSV:
awk '{t=substr($4,2,15); c[t]++} END{for (i in c) print i "," c[i]}' access.log | sort > req_per_min.csv - 用 Python 的 matplotlib 或 Excel 打开 CSV,画折线图,高峰一目了然

















