apache日志需通过归档、分析、可视化三步生成周期报表:先用logrotate按天归档并统一命名;再用awk等脚本提取请求数、ip数、错误率等指标写入csv;最后用goaccess或python绘图生成带趋势图的周/月报。

Apache 日志本身不自动生成周报或月报,但通过日志归档、定时分析与可视化输出三步组合,可稳定产出带趋势图的周期性流量报表。核心是把原始日志转化为结构化时间序列数据,再按周/月聚合展示。
一、日志按天归档并保留足够周期
确保访问日志已启用轮转(如 logrotate),每天生成独立文件(如 access.log.20260815),至少保留 30–90 天。关键配置示例:
- 在 Apache 配置中使用 CustomLog 指向带日期的路径,或更推荐用系统级 logrotate 管理
- 命名统一格式(如 access-YYYYMMDD.log),便于脚本批量识别
- 避免压缩后直接分析——先解压再处理,或用 zcat 流式读取
二、用脚本或工具按周/月提取关键指标
以常见需求为例,每日执行一次统计脚本,输出 CSV 或 JSON 格式汇总数据:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
总请求数:
awk '{print $4}' access-20260815.log | wc -l -
独立 IP 数:
awk '{print $1}' access-20260815.log | sort -u | wc -l - 4xx/5xx 错误率:提取第 9 字段(状态码),统计 400–599 出现比例
-
Top 页面访问量:
awk '{print $7}' access-20260815.log | grep -v "favicon\|css\|js" | sort | uniq -c | sort -nr | head -10 - 将上述结果写入 daily-stats.csv,含字段:date,total_req,uniq_ip,error_rate,top_path
三、用轻量工具生成趋势图表
无需部署整套监控平台,两个低门槛方案即可落地:
-
GoAccess + 定时 HTML 输出:运行
goaccess access-202608*.log -o report-weekly.html --date-format=%Y%m%d --log-format=COMBINED,它自动按周聚合并渲染带折线图的响应时间、访客地域、URL 趋势页 -
Python + Pandas + Matplotlib 小脚本:读取 daily-stats.csv,用
resample('W').sum()或resample('M').mean()生成周/月视图,保存为 PNG 或嵌入 Markdown 报告 - 导出数据到 Excel / Google Sheets,用内置图表功能快速生成同比/环比柱状图和折线图
四、增强实用性的小技巧
让报表真正支撑决策,注意三点:
- 区分真实用户与爬虫:在日志中用 SetEnvIf User-Agent 标记主流爬虫(如 Googlebot、Bingbot),统计时排除或单独着色
- 标注关键事件:在周报中标注上线新功能、大促活动、CDN 切换等时间点,方便对照流量波动原因
- 加入增长率计算:例如「本周 UV 较上周 +12.3%」,比纯数字更直观;可用 awk 或 Python 自动算出并写入报告头部










