linux日志轮转分析可通过shell脚本自动化实现,包含定时触发、归档、压缩清理与内容提取四步;logrotate支持按时间或大小轮转,配合zcat/awk等命令提取指标,并用cron每日执行全流程。

Linux 系统日志轮转分析可通过 Shell 脚本自动化完成,核心在于定时触发、日志归档、压缩清理与内容提取四步联动,无需复杂工具即可稳定运行。
按时间或大小自动轮转日志
使用 logrotate 是最稳妥的方式,它原生支持按天、周、月或文件大小触发轮转。配置文件通常放在 /etc/logrotate.d/ 下,例如为 Nginx 日志添加轮转规则:
- 每周轮转一次,保留 4 个归档
- 轮转后用 dateext 添加日期后缀(如
access.log-20241025) - 启用 compress 自动 gzip 压缩归档文件
- 设置 missingok 避免日志文件临时缺失时报错
用脚本解析轮转后的日志内容
轮转完成后,Shell 脚本能快速提取关键指标。比如统计最近归档中 Top 10 访问 IP:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 用
zcat直接读取 .gz 文件,避免解压再处理 - 配合
awk '{print $1}'提取首字段(通常是客户端 IP) - 用
sort | uniq -c | sort -nr | head -10统计并排序 - 将结果写入每日报告文件,路径可设为 /var/log/reports/access_topip_$(date +%Y%m%d).txt
定期清理过期归档与报告
防止磁盘被历史日志占满,脚本中应包含清理逻辑:
- 用
find /var/log/nginx -name "access.log-*" -mtime +30 -delete删除 30 天前的归档 - 对分析报告同样设定保留周期,如只留最近 7 天:
find /var/log/reports -name "access_topip_*.txt" -mtime +7 -delete - 清理前建议先
du -sh检查目标目录空间占用,避免误删
通过 cron 实现全自动调度
把轮转、分析、清理三步封装成一个脚本(如 /usr/local/bin/log_analyze.sh),再交由 cron 定时执行:
- 每天凌晨 2 点运行:在
crontab -e中添加0 2 * * * /usr/local/bin/log_analyze.sh - 脚本开头加上
#!/bin/bash和必要环境变量(如 PATH) - 关键步骤后加入日志记录,例如
echo "$(date): analysis completed" >> /var/log/log_analyze.log










