Linux自带的logrotate管理日志用法

 更新时间:2024年10月14日 11:02:03   作者:it-wangxiaobai  
Linux系统中,logrotate工具用于管理和轮转日志文件,防止系统因日志文件过大导致磁盘爆满,通过配置/etc/logrotate.conf和/etc/logrotate.d/下的文件,用户可以定义日志处理规则,如压缩、备份

利用Linux自带的logrotate管理日志

日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉。

nohup.out,access.log,catalina.out

本文简单介绍利用Linux自带的logrotate来对操作系统中各类日志进行管理

1. logrotate简介

为了使用它,主要有两个地方需要修改一下:一个是/etc/logrotate.conf,另一个是/etc/logrotate.d/下面的文件。

你既可以在logrotate.conf中直接定义如何处理你的log文件,也可以在/logrotate.d/下面针对自己的log新建一个对应的文件来定义处理log的行为。

推荐在目录 /logrotate.d/ 下面创建自己的文件来对个性化的日志进行处理。

logrotate定义了如何处理日志,而它本身则是被crond定时调用的。

我使用的一个生产实例:

/usr/local/nginx/logs/*.log {
    create 0644 root root
    daily
    rotate 2
    missingok
    copytruncate
    ifempty
    compress
    noolddir
}

上述内容保存到nginxlog文件,存放到目录:/etc/logrotate.d/nginxlog

设置权限:

owner=root group=root mode=0644

测试配置是否正确:

lograte -d /etc/logrotate.d/nginxlog

执行配置

lograte -f /etc/logrotate.d/nginxlog

2. logrotate配置参数

logrotate 全局配置文件: /etc/logrotate.conf

配置参数功能说明
compress通过gzip 压缩转储以后的日志
nocompress不需要压缩时,用这个参数
copytruncate用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate备份日志文件但是不截断
create mode owner group转储文件,使用指定的文件模式创建新的日志文件。轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate不建立新的日志文件
delaycompress和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩
errors address专储时的错误信息发送到指定的Email 地址
ifempty即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty如果是空文件的话,不转储
mail address把转储的日志文件发送到指定的E-mail 地址
nomail转储时不发送日志文件
olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;这两个关键字必须单独成行;
postrotate/endscript在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行;
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的个数,0 指没有备份,5 指保留5个备份
tabootext [+] list 让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
sizesize当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
missingok如果日志丢失,不报错继续滚动下一个日志
notifempty当日志文件为空时,不进行轮转
sharedscripts运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
dateext使用当期日期作为命名格式
dateformat .%s配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).

说明:

当日志文件 >= log-size 的时候就转储。

以下为合法格式:(其他格式的单位大小写没有试过)

  • size = 5 或 size 5 (>= 5 个字节就转储)
  • size = 100k 或 size 100k
  • size = 100M 或 size 100M

实例:

/home/deploy/apps/production.log {
missingok
copytruncate
rotate 10
notifempty
sharedscripts
dateext
dateformat -%Y-%m-%d-%s
size=10M
postrotatemv /home/deploy/apps/production.log-* /data1/log/railsgzip /data1/log/rails/production.log-*
endscript
}

问题:rotate和maxage的区别是什么?

它们都是用来控制保存多少日志文件的,区别在于 rotate 是以个数为单位的,而 maxage 是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。

3. nginx日志切割实例

vim /etc/logrotate.d/nginx   #创建nginx日志切割配置文件
/application/nginx/logs/*.log{
daily
rotate 10
create
dateext
}

logrotate -d /etc/logrotate.d/nginx    调试测试   -d debug
logrotate -d /etc/logrotate.d/nginx    手动切割日志测试

ls /application/nginx/logs/           带日期的表示是切割好的日志
access.log           bbs.log-20180228   error.log           www.log
access.log-20180228  blog.log           error.log-20180228  www.log-20180228
bbs.log              blog.log-20180228  nginx.pid

配置好nginx切割日志生效时间

# cat /etc/anacrontab    #此文件里有生效时间
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.
 
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45

# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22   #生效时间范围是3点到22点

#period in days   delay in minutes   job-identifier   command1       5       cron.daily              nice run-parts /etc/cron.daily7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

也就是说,配好的nginx切割日志,生效时间是在凌晨3点到22点之间,而且随机延迟时间是45分钟

4. 其他配置示例

/var/log/htmlaccess.log {
 errors jim
 notifempty
 nocompress
 weekly
 prerotate
 /usr/bin/chattr -a /var/log/htmlaccess.log
 endscript
 
 postrotate
 /usr/bin/chattr +a /var/log/htmlaccess.log
 endscript
}

持续集成系统日志处理配置

/var/log/jenkins/jenkins.log /var/log/jenkins/access_log {
    compress
    dateext
    maxage 365      #保留最大365天
    rotate 99       #最大保留99个备份
    size=+4096k
    notifempty
    missingok
    create 644
    copytruncate
}

自定义日志处理

/medialog/*.log {
    create 0644 root root
    daily
    rotate 30
    missingok
    copytruncate
    notifempty
    compress
    delaycompress
    olddir /medialog/backlog    # 将归档日志单独目录存储
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • apache集成php5.6方法分享

    apache集成php5.6方法分享

    这篇文章主要介绍了apache集成php5.6方法分享,需要的朋友可以参考下
    2015-01-01
  • Ubuntu20.04安装Python3的虚拟环境教程详解

    Ubuntu20.04安装Python3的虚拟环境教程详解

    这篇文章主要介绍了Ubuntu20.04安装Python3的虚拟环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Linux应用程序管理与安装方式

    Linux应用程序管理与安装方式

    这篇文章主要介绍了Linux应用程序管理与安装方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Linux中查找文件夹的命令解读

    Linux中查找文件夹的命令解读

    这篇文章主要介绍了Linux中查找文件夹的命令,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)

    嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)

    今天小编就为大家分享一篇关于嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • CentOS如果更改yum更新源详解

    CentOS如果更改yum更新源详解

    平时在安装或更新CentOS软件时,yum方式是最简单方便的,而为避免从国外站点安装更新速度过慢,需要更改yum更新源,那么CentOS怎么修改yum更新源呢?今天小编与大家分享下CentOS修改yum更新源的具体操作步骤,有需要的朋友不妨了解下。
    2016-10-10
  • centos7防火墙如何设置只对部分端口号限源

    centos7防火墙如何设置只对部分端口号限源

    这篇文章主要介绍了centos7防火墙如何设置只对部分端口号限源问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 在Linux服务器下启动tomcat的三种方式

    在Linux服务器下启动tomcat的三种方式

    这篇文章主要介绍了在Linux服务器下启动tomcat的三种方式,Linux作为一种稳定安全的服务器一直受到业界欢迎,那么如何启动部署在服务器上的Tomcat呢,这篇文章带我们来了解
    2023-03-03
  • Linux 服务器硬件数据的收集及使用案例

    Linux 服务器硬件数据的收集及使用案例

    这篇文章主要介绍了Linux 服务器硬件数据的收集,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • CentOS 7 安装vsftpd 服务器的具体操作步骤

    CentOS 7 安装vsftpd 服务器的具体操作步骤

    下面小编就为大家带来一篇CentOS 7 安装vsftpd 服务器的具体操作步骤。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论