lanlin/notes

linux日志自动分割 or linux logrotate

lanlin opened this issue · 1 comments

场景

某些程序没有自带日志分隔功能,天长日久,日志越来越臃肿。
这个时候可以用系统自带的 logrotate 来进行切割。
通常 logrotate 是各个 linux 发行版都会默认安装的,你只需要进行配置即可。

使用

  1. 进入其默认设置目录
cd /etc/logrotate.d
  1. 创建一个无后缀文件,用来存放你的分割配置

以MongoDB为例,创建一个名为 mongod 文件,并加入以下代码并保存。

/var/log/mongodb/*.log {
    create 0644 mongod mongod
    daily
    rotate 30
    dateext
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod0.pid 2>/dev/null` 2>/dev/null || true
        /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod1.pid 2>/dev/null` 2>/dev/null || true
        /bin/kill -SIGUSR1 `cat /var/run/mongodb/mongod2.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

参数说明

  1. /var/log/mongodb/*.log:
    这里应该填写程序对应的日志路径(星号为通配符,也可以直接写死)

  2. daily:
    日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。

  3. rotate n:
    日志存档的数量,超过这个数量后,时间最久的归档将被删除。

  4. compress:
    在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

  5. delaycompress:
    总是与compress选项一起用,表示不压缩本次归档日志。
    压缩将在下一次归档后进行。这方便对近期日志阅读。

  6. missingok:
    在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

  7. notifempty:
    如果日志文件为空,轮循不会进行。

  8. sharedscripts
    这个参数是确保 postrotate和endscript 之间的指令会在所有日志都被归档后执行。
    如果没有该参数,那么每归档完一个日志文件,就会执行一次 postrotate和endscript 之间的指令。

  9. create 644 mongod mongod:
    以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

  10. postrotate/endscript:
    在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。
    这里可以放入你需要执行的一些命令,比如程序本身建议的日志分割信号指令等。

  11. dateext:
    该参数加入后,归档后日志的文件名中会出现日期,这样方便以后对日志的处理