使用 logrotate 分割日志

logrotate介绍

在开发过程中我们经常需要查看日志文件,来排查线上的问题。如果日志文件过大, 则打开会比较慢,这个时候就需要进行日志分割。logrotate是linux上的一个日志分割工具,可以很方便的进行日志分割。

logrotate的安装与配置

安装logrotate

主流的linux发行版都默认安装有logrotate, 如果没有的话,可以通过如下方式安装(日志分割常使用定时任务):

Debian或Ubuntu下: apt-get install logrotate cron

Fedora、CentOS或RHEL下: yum install logrotate crontabs

配置logrotate

在ubuntu上,logrotate安装完成的配置文件是/etc/logrotate.conf, 我们使用vim打开配置文件,可以看到类似如下的配置, 我们可以看到有include /etc/logrotate.d这行, 这是用来加载/etc/logrotate.d下的所有配置,我们一般是在/etc/logrotate.d下建立单独的文件,用来针对不同的日志文件,进行不同的分割配置。

mpress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

配置文件示例

比方说,我想对nginx日志进行分割,我的nginx日志位于/opt/nginx/logs/access.log,下面是配置的步骤

  • 在/etc/logrotate.d/目录中建立一个nginx文件
  sudo touch nginx
  • 使用vim编辑nginx文件,第一行是日志文件的位置(使用通配符可以针对目录下所有的日志进行分割),大括号里是一些配置的参数
  /opt/nginx/logs/access.log # /opt/nginx/logs/*.log 这样可对logs下所有的日志进行分割
  {
    size 20M    #当日志超过20M后分割
    create 640 root root # 分割创建的日志文件的权限与所有者
    missingok # 忽略运行logrotate时找不到文件错误
    notifempty # 如果日志文件为空,则不会分割日志
    nocompress # 不对日志文件进行压缩,如果想要压缩,则设置成compress
    rotate 7 # 除当天的外,保留7天的日志
    daily    # 日志文件以天进行分割 (这个和size选择一个设置)
    dateext  # 以日期命名
    copytruncate # 先拷贝原有日志,再清空原有日志
    postrotate
      [ -f /opt/nginx/logs/nginx.pid ] && kill -USR1 `cat /opt/nginx/logs/nginx.pid`
    endscript   # 这段脚本在分割之后执行,重启nginx,重新加载日志文件,防止不写
  }
  • 手动运行logrotate命令, -vf参数, -v 是执行时打印执行信息,-f是强制执行
  logrotate -vf  /etc/logrotate.d/nginx #针对单个的logrotate配置运行指令
  logrotate -vf  /etc/logrotate.conf #这样会运行所有的logrotate配置

自动运行logrotate指令

我们在线上一般会使用定时任务来运行logrotate指令,例如每天执行一次logrotate,步骤如下(定时任务一般系统都会自带,如果没有,按照文章开头说的方式安装):

  • 打开定时任务
  crontab -e
  • 编辑定时任务
  0 1 * * * logrotate -vf /etc/logrotate.conf # 每天1点执行分割任务,所有的任务
  0 1 * * * logrotate -vf /etc/logrotate.d/nginx #指定执行某个分割任务
  • 开启定时任务
  sudo service cron  start
  • 查看定时任务
  crontab -l
© 著作权归作者所有
这个作品真棒,我要支持一下!
分享日常开发中所用的技术,涉及到前端,后端,开发工具推荐等。
0条评论
top Created with Sketch.