当前位置:首页>Linux>Linux 日志体系详解:logrotate 日志自动轮转实战 | Linux30 天入门 Day22

Linux 日志体系详解:logrotate 日志自动轮转实战 | Linux30 天入门 Day22

  • 2026-08-27 12:32:59
Linux 日志体系详解:logrotate 日志自动轮转实战 | Linux30 天入门 Day22

前面我们学习了磁盘管理,很多运维踩过一个大坑:业务日志持续疯狂写入,几个月时间直接打满磁盘,导致服务崩溃。

今天彻底吃透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日志

最新文章

随机文章