Linux 日志轮转入门 别让日志把硬盘撑爆
服务器磁盘莫名其妙满了,一查是某个日志文件长到了几十个 G,这种事太常见了。日志只管写没人清,迟早撑爆硬盘。Linux 自带的 logrotate 专门管这件事:定期把旧日志归档、开新文件接着写、过期的自动删除。本文讲清它的配置怎么读、怎么先预演再上线,以及份数和路径两个最容易翻车的点。
先说这事有多常见。程序只要在跑,日志就一直在写,访问一条写一行,报错一刷就是几百行。平时没人盯着它,等磁盘报警甚至网站写不进去数据了才发现,某个日志文件已经默默长成了庞然大物。前面那篇查磁盘空间讲的就是怎么揪出这种大文件,但揪出来删掉只是救火,真正治本的办法是提前给日志立规矩,让它自己定期清理,这个规矩就是日志轮转。
干这活的是系统自带的 logrotate,绝大多数 Linux 发行版都装好了,由定时任务每天唤醒一次。它的做法不复杂:到点了把当前日志改个名归档,比如 app.log 变成 app.log.1,原来的位置开一个新文件继续写;归档留够规定的份数后,更老的直接删除。网站程序、数据库、系统服务都有各自的日志,logrotate 是统一管这一摊的管理员。
它的配置放在 /etc/logrotate.d 目录里,一个程序一份文件。挑几行最要紧的读懂就能上手:开头是日志路径,管谁写在这;weekly 或 daily 是多久转一次;rotate 后面的数字是留几份归档,超了就删最老的;compress 表示归档顺手压缩,日志是纯文本,压完能小一个数量级;missingok 是文件不存在也不报错;notifempty 是空文件就不折腾。还有一对容易混的:create 是改名归档后新建一个空文件接着写,copytruncate 是把内容复制走再把原文件清空,个别程序认死了原来的文件不肯换新的,就得用后者,选错了会出现轮转完日志不再增长的怪事。
改完配置先别急着上线,logrotate 自带预演模式:logrotate -d 后面跟配置文件路径,它会把打算做的动作一条条打印出来,只说不做,确认无误再真跑。想立刻验证效果,用 -f 强制轮转一次,然后去目录里看归档文件有没有按预期生成、份数对不对。新接手一台服务器时,也建议先看看它现有的轮转配置长什么样,心里有个底。
最后两个提醒。一是归档份数要算账,留太多照样占地方:一个每天写 1 个 G 的日志,留 30 份就是 30 个 G,压缩能缓解但别指望根治,按日志的实际增速和排查问题需要的时间定份数,一般留 7 到 14 份够用。二是路径变了配置要跟着改,程序挪了目录或者换了日志文件名,轮转还盯着旧路径,就会天天转一个不存在的文件,真正的日志在旁边无人管理地长大。再记住一句:轮转管的是腾地方,归档只存在本机,真要留档追溯,还得靠备份,两回事别混。
- 点赞
- 收藏
- 关注作者
评论(0)