前面我们学习了磁盘管理,很多运维踩过一个大坑:业务日志持续疯狂写入,几个月时间直接打满磁盘,导致服务崩溃。
今天彻底吃透Linux系统日志框架、日志分类,重点掌握 logrotate日志轮转。实现日志自动分割、压缩、删除过期日志,是线上服务器磁盘防护必不可少的手段。
一、今日学习目标
✅ 认识Linux系统各类默认日志存放位置
✅ 理解rsyslog系统日志服务作用
✅ 掌握logrotate轮转原理、配置语法
✅ 学会自定义Nginx、MySQL日志切割规则
✅ 实现日志自动压缩、定期清理旧日志
✅ 排查日志不轮转、日志持续膨胀问题
二、Linux系统默认日志目录
系统所有基础日志统一存放路径: /var/log/
plaintext
/var/log/messages # CentOS系统通用日志
/var/log/syslog # Ubuntu系统通用日志
/var/log/auth.log # 用户登录、ssh认证日志
/var/log/cron # crontab定时任务日志
/var/log/dmesg # 系统硬件启动日志
/var/log/nginx/ # Nginx访问与错误日志
/var/log/mysql/ # 数据库日志
实时跟踪日志通用命令:
bash
tail -f /var/log/syslog
tail -n 100 /var/log/messages
三、rsyslog 系统日志服务
rsyslog是Linux默认日志收集服务,负责接收内核、程序产生的日志,并写入对应日志文件。
bash
# 查看状态
systemctl status rsyslog
# 重启
systemctl restart rsyslog
普通程序输出的系统登录、定时任务信息,全部由rsyslog统一管理。
四、logrotate 核心讲解(今日重点)
为什么需要日志轮转?
1. 单个日志文件体积巨大,打开、检索极其缓慢
2. 防止日志无限增长占满磁盘
3. 按天/按周分割,方便归档、排查指定时间段故障
logrotate 内置系统定时任务,无需手动编写脚本切割日志!
目录结构
- 主配置文件: /etc/logrotate.conf
- 自定义规则目录: /etc/logrotate.d/
所有自定义切割配置,全部放在 /etc/logrotate.d/ 下。
基础常用参数说明
plaintext
daily # 按天切割
weekly # 按周切割
monthly # 按月切割
rotate 7 # 保留最近7份历史日志
compress # 切割后的日志使用gzip压缩
delaycompress # 当前最新文件不压缩,下一轮再压缩
create # 切割后自动新建空日志文件
missingok # 日志文件不存在不报错
notifempty # 文件为空时,不执行切割
postrotate # 轮转完成后执行脚本
endscript
五、实战1:Nginx日志自定义轮转配置
新建配置文件
bash
vim /etc/logrotate.d/nginx
写入配置:
conf
/var/log/nginx/*.log {
daily
rotate 15
compress
missingok
notifempty
create 0644 www-data www-data
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
解读:每天切割,保留15天日志,自动压缩;切割完成平滑重载Nginx。
六、实战2:手动测试轮转配置
写完配置不要直接等自动执行,手动校验!
bash
# 模拟执行(推荐优先测试)
logrotate -d /etc/logrotate.d/nginx
# 强制立即执行一次轮转
logrotate -vf /etc/logrotate.d/nginx
-d:debug调试模式,只打印流程,不真实操作,排错神器
七、实战3:自定义业务程序日志切割
很多Java、Shell项目日志单独存放在/data/logs目录,同样可以配置轮转
bash
vim /etc/logrotate.d/business
conf
/data/logs/*.log {
daily
rotate 30
compress
missingok
notifempty
}
八、常见问题与踩坑清单
1. 日志分割后程序依然往旧文件写入
进程持有旧文件句柄,需要重载服务释放句柄,对应配置 postrotate 重载命令。
2. logrotate不生效
logrotate由系统每日定时任务触发,不会实时执行;调试使用 -vf 强制运行。
3. 不要直接删除正在写入的日志文件
直接rm删除日志,磁盘空间不会立刻释放!正确做法: > access.log 清空,或者依靠logrotate轮转。
4. 历史日志过多占用磁盘
调整rotate数值,缩短日志保存时长。
九、运维最佳实践
1. 所有长期运行服务(Nginx、数据库、自研程序)必须配置日志轮转
2. 线上日志建议保留7~30天,根据业务需求调整
3. 开启compress压缩,节省大量磁盘空间
4. 新增轮转规则后,先用logrotate -d调试验证
十、今日实操作业
bash
# 1.浏览系统日志文件夹
ls /var/log/
# 2.查看logrotate主配置
cat /etc/logrotate.conf
# 3.复制上面Nginx配置,新建测试轮转文件
vim /etc/logrotate.d/testlog
# 4.调试配置,强制执行一次轮转
logrotate -d /etc/logrotate.d/testlog
logrotate -vf /etc/logrotate.d/testlog
十一、今日知识点总结
1. /var/log存放系统各类日志,tail命令实时查看日志
2. rsyslog负责收集系统日志
3. logrotate实现日志自动分割、压缩、过期清理,避免磁盘爆满
4. 自定义规则统一放置在 /etc/logrotate.d/
5. 修改配置优先使用 -d 参数调试,无误再上线
✅ 学到这里,磁盘+日志两大磁盘风险问题全部掌握!
实操过程中遇到报错或者疑问,欢迎在评论区留言一起探讨。关注「嘟嘟嘟的运维冒险」,持续更新Linux实战学习干货。
#Linux运维#Linux入门#服务器实操#零基础学Linux#Linux日志