notes icon indicating copy to clipboard operation
notes copied to clipboard

linux日志自动分割 or linux logrotate

Open lanlin opened this issue 5 years ago • 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
}

lanlin avatar Apr 02 '20 12:04 lanlin

参数说明

  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: 该参数加入后,归档后日志的文件名中会出现日期,这样方便以后对日志的处理

lanlin avatar Apr 02 '20 12:04 lanlin