Linux日志管理工具:Logrotate(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: Linux日志管理工具:Logrotate(一)

1. 概述

1.1 Linux下的日志管理

日志记录了系统运行的方方面面,包括错误、警告、操作记录等关键信息。有效地管理这些日志文件是确保系统安全、稳定运行的必要手段。


Linux系统的日志管理涉及多个方面。首先,需要考虑日志的生成机制。不同的应用程序和系统服务可能采用不同的日志记录方式,有的直接写入文件,有的通过系统日志服务如rsyslog进行集中管理。其次,日志的存储位置也是一个重要考虑因素。传统上,大多数Linux系统将日志文件存放在/var/log目录下,但随着容器化技术的普及,日志的存储位置变得更加多样化。


然而,日志管理面临的最大挑战之一是如何处理持续增长的日志文件。如果不加以控制,日志文件可能会无限制地增长,最终耗尽系统的存储空间。此外,过大的日志文件也会影响系统性能,使得日志查询和分析变得困难。


为了应对这些挑战,Linux系统管理员通常会采用日志轮转(Log Rotation)策略。日志轮转的基本思想是:当日志文件达到一定大小或时间后,将其改名并压缩保存,同时创建一个新的日志文件继续记录。这样不仅可以控制单个日志文件的大小,还能保留历史日志信息,方便后续查询和分析。


在Linux世界中,实现日志轮转的工具有多种选择,如logrotate、cronolog等。其中,logrotate因其强大的功能、灵活的配置以及广泛的兼容性,成为了最受欢迎的日志管理工具之一。


1.2 Logrotate简介

Logrotate是一款强大而灵活的日志文件管理工具,专为类Unix系统(如Linux)设计。它的主要功能是自动化日志文件的轮转、压缩、删除和邮件发送等操作。Logrotate通常作为一个定时任务运行,可以根据文件大小、时间间隔或其他更复杂的条件来决定何时对日志文件进行轮转。


Logrotate的核心优势在于其高度可配置性。管理员可以为不同的日志文件设置不同的轮转策略,包括轮转频率、保留的旧日志文件数量、压缩方式等。此外,Logrotate还支持在轮转前后执行自定义脚本,这为日志管理提供了极大的灵活性。


使用Logrotate可以带来诸多好处:

  1. 防止日志文件无限增长,有效管理磁盘空间。
  2. 通过压缩旧日志文件,进一步节省存储空间。
  3. 保留历史日志,便于追溯和分析。
  4. 自动化日志管理流程,减少人工干预。
  5. 提高系统性能,避免因日志文件过大而导致的I/O瓶颈。


Logrotate的配置文件通常位于/etc/logrotate.conf和/etc/logrotate.d/目录下。主配置文件/etc/logrotate.conf定义了全局设置,而/etc/logrotate.d/目录下的文件则包含了针对特定应用或服务的日志轮转配置。


另外,值得一提的是,尽管Logrotate主要用于管理文本日志文件,但它也能处理二进制日志文件。对于需要特殊处理的日志文件,Logrotate提供了丰富的选项和脚本执行功能,使得几乎所有类型的日志管理需求都能得到满足。


2. Logrotate基础

2.1 安装Logrotate

Logrotate 是大多数现代 Linux 发行版的标准组件,通常预装在系统中。然而,如果的系统中没有安装 Logrotate,或者希望安装最新版本,可以通过包管理器轻松完成安装。


2.1.1 Debian下的安装

基于 Debian 的系统(如 UbuntuDebian)上,可以使用 apt 包管理器安装 Logrotate。首先,更新包索引,然后安装 Logrotate

打开终端,输入以下命令:

sudo apt update
sudo apt install logrotate

2.1.2 Red Hat下的安装

对于基于 Red Hat 的系统(如 CentOSFedora),可以使用 yumdnf 包管理器:

sudo yum install logrotate

sudo dnf install logrotate


安装完成后,可以通过查看 Logrotate 的版本来验证安装是否成功:

logrotate --version


此命令将显示已安装的 Logrotate 版本信息。

注:某些系统可能将 Logrotate 作为 croniecron 包的一部分提供。在这种情况下,安装 cron 服务可能会自动包含 Logrotate

2.1.3 源码安装

如果需要安装最新版本的 Logrotate,或者的系统包管理器中没有提供 Logrotate,可以选择从源代码编译安装。这种方法虽然更复杂,但能确保获得最新的功能和修复。

从源代码安装的步骤通常包括:下载源代码、解压缩、配置、编译和安装。以下是一个基本的源码安装过程示例:

首先,下载最新的 Logrotate 源代码。可以从官方 GitHub 仓库获取:

wget https://github.com/logrotate/logrotate/releases/download/3.20.1/logrotate-3.20.1.tar.xz

解压下载的文件:

tar xvf logrotate-3.20.1.tar.xz

进入解压后的目录:

cd logrotate-3.20.1

配置、编译和安装:

./configure
make
sudo make install

2.1.4 关于配置文件的路径

安装完成后,Logrotate 通常会被放置在 /usr/local/sbin/logrotate 路径下。可以通过运行 logrotate --version 命令来确认安装是否成功。

无论选择哪种安装方法,安装完成后,Logrotate 的主配置文件通常位于 /etc/logrotate.conf,而针对特定应用程序的配置文件则位于 /etc/logrotate.d/ 目录下。


安装 Logrotate 后,建议查看其配置文件,了解默认设置,并根据的系统需求进行必要的调整。同时,确保 Logrotate 被正确地集成到的系统的定时任务中,通常是通过 cron 作业来实现的。

2.2 Logrotate的工作原理

Logrotate通过定期检查日志文件的状态,并根据预设的规则执行相应的操作来实现日志的轮转和管理。Logrotate通常作为一个定时任务运行,最常见的是通过cron作业每天执行一次。当Logrotate运行时,它会按照配置文件中指定的顺序处理每个日志文件或日志文件组。


首先,Logrotate会检查日志文件是否需要轮转。这个决定基于配置文件中定义的条件,如文件大小、时间间隔或自定义条件。如果满足轮转条件,Logrotate就会开始轮转过程。

轮转过程通常包括以下步骤:

  1. 重命名当前的日志文件。例如,将app.log重命名为app.log.1
  2. 如果配置了压缩选项,Logrotate会压缩刚刚重命名的日志文件。
  3. 如果存在更早的轮转日志(如app.log.2.gz),Logrotate会将其重命名为app.log.3.gz,依此类推。
  4. 创建一个新的空日志文件,使用原来的文件名(如app.log)。
  5. 如果配置了"创建"选项,Logrotate会为新创建的日志文件设置指定的权限和所有权。
  6. 如果配置了邮件通知,Logrotate会发送包含轮转日志内容的邮件。
  7. 执行配置文件中定义的任何预轮转或后轮转脚本。
  8. 如果配置了删除旧日志的选项,Logrotate会删除超过指定保留期限的日志文件。

Logrotate使用状态文件(通常位于/var/lib/logrotate/status)来跟踪每个日志文件的轮转历史。这个状态文件记录了上次轮转的时间,确保Logrotate能够正确地执行基于时间的轮转,即使系统时间发生变化或Logrotate没有按计划运行。


注意,Logrotate在设计上考虑到了系统资源的有效利用。它不会持续运行并监控日志文件,而是依赖定期执行来检查和处理日志。这种方式最大限度地减少了系统开销。


Logrotate还支持"延迟压缩"功能。这意味着它可以在下一次运行时才压缩上一次轮转的日志文件,而不是在轮转时立即压缩。这个特性对于那些在轮转后仍可能被写入的日志文件特别有用。


另一个方面,Logrotate提供了一个"copytruncate"选项。对于那些无法正常关闭的应用程序,Logrotate可以复制整个日志文件,然后截断原始文件,而不是重命名它。这确保了应用程序可以继续写入原始日志文件,而不会因为文件被重命名而丢失日志条目。


Logrotate还提供了"sharedscripts"选项,允许在处理一组日志文件时只执行一次脚本,而不是为每个日志文件都执行一次。这在处理相关的日志文件组时特别有用,可以显著提高效率。


2.3 Logrotate配置文件结构

Logrotate的配置文件采用简洁而灵活的结构,允许管理员精确控制日志轮转的各个方面。了解这种结构对于有效管理系统日志至关重要。


Logrotate的配置主要分为两个层次:全局配置和特定日志配置。全局配置通常位于/etc/logrotate.conf文件中,而特定日志的配置则存放在/etc/logrotate.d/目录下的单独文件中。


全局配置文件/etc/logrotate.conf定义了适用于所有日志文件的默认设置。这个文件通常包含一些基本的指令,如轮转频率、压缩选项等。此外,它还通过include指令包含了/etc/logrotate.d/目录中的所有配置文件。


一个典型的/etc/logrotate.conf文件可能如下所示:

# 全局选项
weekly
rotate 4
create
dateext
compress
include /etc/logrotate.d

# 系统日志的特定配置
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

在这个例子中,全局选项指定了每周轮转、保留4个旧日志文件、创建新的空日志文件、使用日期扩展名、压缩旧日志文件。然后,它包含了/etc/logrotate.d/目录中的所有配置文件。最后,为/var/log/wtmp文件指定了特殊的轮转规则。


/etc/logrotate.d/目录中的每个文件通常对应一个特定的应用程序或服务。这些文件的结构与主配置文件类似,但只针对特定的日志文件或一组日志文件。例如,一个名为/etc/logrotate.d/nginx的文件可能包含以下内容:

# /etc/logrotate.d/nginx
# 这是用于管理Nginx日志文件的Logrotate配置文件

# 匹配/var/log/nginx/目录下所有以.log结尾的文件
/var/log/nginx/*.log {
    # 每天轮转一次日志
    daily
    # 如果日志文件不存在,不报错继续执行
    missingok
    # 保留7个轮转后的日志文件
    rotate 7
    # 压缩轮转后的日志文件
    compress
    # 延迟压缩最新的一个轮转日志文件到下一次轮转
    delaycompress
    # 如果日志文件为空,则不轮转
    notifempty
    # 创建新的日志文件,设置权限为0640,所有者为www-data,组为adm
    create 0640 www-data adm
    # 所有日志文件轮转完毕后,只执行一次脚本
    sharedscripts
    # 在日志轮转结束后执行的脚本
    postrotate
        # 如果Nginx的PID文件存在且非空
        [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
    # 脚本结束
    endscript
}

这个配置指定了Nginx日志文件的轮转规则,包括每日轮转、忽略丢失的日志文件、保留7个旧日志文件、压缩旧日志但延迟压缩最新的旧日志、不轮转空日志文件、创建新日志文件时设置特定的权限和所有权,以及在轮转后重新打开日志文件。


Logrotate配置文件的结构遵循一定的语法规则。每个日志文件或日志文件组的配置都包含在花括号{}中。可以在一个配置块中指定多个日志文件,用空格分隔。配置选项每行一个,以换行符结束。如果一个选项需要额外的参数,这些参数通常跟在选项名称后面,用空格分隔。


某些选项,如postrotate和prerotate,允许指定在日志轮转前后执行的脚本。这些脚本需要包含在postrotate/endscript或prerotate/endscript块中。

Logrotate配置文件还支持条件语句,允许根据特定条件应用不同的设置。例如:

# /var/log/mail.log
# 这是用于管理邮件日志文件的Logrotate配置文件

/var/log/mail.log {
    # 每周轮转一次日志
    weekly
    # 保留5个轮转后的日志文件
    rotate 5
    # 压缩轮转后的日志文件
    compress
    # 延迟压缩最新的一个轮转日志文件到下一次轮转
    delaycompress
    # 当日志文件达到100MB时进行轮转
    size 100M
    # 所有日志文件轮转完毕后,只执行一次脚本
    sharedscripts
    # 在日志轮转结束后执行的脚本
    postrotate
        # 如果Dovecot的PID文件存在
        if [ -f /var/run/dovecot/master.pid ]; then
            # 向Dovecot发送USR1信号,使其重新打开日志文件
            kill -USR1 `cat /var/run/dovecot/master.pid`
        fi
        # 如果Exim4的PID文件存在
        if [ -f /var/run/exim4/exim.pid ]; then
            # 重启Exim4服务
            /etc/init.d/exim4 restart > /dev/null
        fi
    # 脚本结束
    endscript
}

在这个例子中,根据是否存在特定的进程ID文件,在日志轮转后执行不同的操作。

理解Logrotate配置文件的结构对于有效管理系统日志至关重要。通过合理组织全局配置和特定应用配置,系统管理员可以实现灵活而强大的日志管理策略,确保系统日志得到适当的维护和保存。

2.4 基本配置选项解析

Logrotate的配置文件包含多种选项,用于控制日志轮转的各个方面。以下表格列出了一些常用的基本配置选项及其解析:

选项 描述
rotate 指定保留的旧日志文件数量。例如,rotate 5表示保留5个轮转后的日志文件,超过这个数量的旧文件将被删除。
daily/weekly/monthly/yearly 定义日志轮转的频率。选择其中一个即可。例如,daily表示每天进行一次日志轮转。
size 基于文件大小触发日志轮转。例如,size 100M表示当日志文件达到100MB时进行轮转。
compress 启用此选项后,轮转的日志文件会被压缩以节省磁盘空间。默认使用gzip压缩。
delaycompress compress选项配合使用,延迟压缩最近轮转的日志文件到下一次轮转。
copytruncate 复制原始日志文件的内容到新文件,然后清空原始文件,而不是重命名它。
create 在轮转后创建新的空日志文件,并指定其权限、所有者和组。格式:create mode owner group
dateext 使用日期作为轮转后日志文件的扩展名,而不是数字。
missingok 如果日志文件丢失,Logrotate不会报错,而是静默地继续到下一个日志。
notifempty 防止Logrotate轮转空的日志文件。
sharedscripts 当指定多个日志文件时,确保prerotatepostrotate脚本只执行一次。
prerotate/endscript 这对选项之间可以插入在日志轮转之前执行的脚本。
postrotate/endscript 类似于prerotate,但这些脚本在日志轮转之后执行。
maxage 指定删除旧日志文件的天数。例如,maxage 365会删除超过一年的旧日志文件。

正确配置Logrotate不仅可以有效管理磁盘空间,能确保重要的日志信息得到适当的保留和组织。在实际应用中,管理员需要根据系统的特性、日志生成速度、存储容量等因素来选择和组合这些选项,以达到最佳的日志管理效果。

3. Logrotate核心功能

3.1 日志轮转策略

日志轮转策略是Logrotate的核心功能之一,它决定了何时以及如何对日志文件进行轮转。Logrotate提供了两种主要的轮转策略:基于大小的轮转和基于时间的轮转。这两种策略可以单独使用,也可以组合使用,以满足不同的日志管理需求。

3.1.1 基于大小的轮转

基于大小的轮转策略是根据日志文件的大小来决定何时进行轮转。当日志文件达到指定的大小阈值时,Logrotate就会触发轮转操作。这种策略特别适用于那些日志生成速度不稳定,或者需要严格控制单个日志文件大小的场景。

Logrotate配置文件中,可以使用size选项来指定大小阈值。例如:

# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log目录下的myapp.log文件
/var/log/myapp.log {
    # 当日志文件达到100MB时进行轮转
    size 100M
    # 保留5个轮转后的日志文件
    rotate 5
    # 压缩轮转后的日志文件
    compress
}

在这个配置中,当myapp.log文件大小达到100MB时,Logrotate就会进行轮转。rotate 5表示保留5个轮转后的日志文件,超过这个数量的旧文件将被删除。


基于大小的轮转策略的优点是可以精确控制日志文件的大小,防止单个文件过大导致的存储和处理问题。然而,这种策略也有其局限性。如果日志生成速度很快,可能会导致频繁的轮转操作,增加系统负担。此外,如果日志生成速度很慢,可能会导致长时间没有轮转,不利于日志的及时归档和分析。


3.1.2 基于时间的轮转

基于时间的轮转策略是按照预定的时间间隔进行日志轮转。这种策略适用于需要定期归档日志的场景,无论日志文件大小如何。Logrotate提供了多个时间间隔选项,包括每天、每周、每月和每年。


以下是一个基于时间轮转的配置示例:

# /etc/logrotate.d/syslog
# 这是用于管理系统日志文件的Logrotate配置文件

# 匹配/var/log/syslog文件
/var/log/syslog {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 压缩轮转后的日志文件
    compress
    # 延迟压缩最新的一个轮转日志文件到下一次轮转
    delaycompress
    # 如果日志文件不存在,不报错继续执行
    missingok
    # 如果日志文件为空,则不轮转
    notifempty
}

在这个配置中,daily指定每天进行一次轮转。其他常用的时间选项包括weekly、monthly和yearly。


基于时间的轮转策略的优点是可以保证日志文件按照固定的时间周期进行归档,便于后续的日志分析和管理。例如,可以轻松地查看上周或上个月的日志。此外,这种策略也可以避免因日志生成速度变化而导致的轮转频率不稳定问题。


然而,纯粹基于时间的轮转策略也有其不足之处。如果日志生成速度很快,可能会导致单个日志文件过大。相反,如果日志生成速度很慢,可能会产生大量的小文件,增加存储和管理的复杂性。

为了克服单一策略的局限性,Logrotate允许将基于大小和基于时间的策略结合使用。例如:

# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log/目录下的myapp.log文件
/var/log/myapp.log {
    # 每天轮转一次日志
    daily
    # 当日志文件达到50MB时进行轮转
    size 50M
    # 保留10个轮转后的日志文件
    rotate 10
    # 压缩轮转后的日志文件
    compress
    # 延迟压缩最新的一个轮转日志文件到下一次轮转
    delaycompress
}

在这个配置中,日志文件会在每天进行轮转,或者当文件大小达到50MB时进行轮转,以先到达的条件为准。这种组合策略可以在时间周期性和文件大小控制之间取得平衡,为大多数应用场景提供了理想的解决方案。

3.2 压缩选项

日志文件通常会随着时间的推移不断增长,占用大量的磁盘空间。为了有效管理这些日志文件,Logrotate提供了强大的压缩功能。通过压缩旧的日志文件,可以显著减少它们占用的存储空间,同时仍然保留这些日志以供将来参考或分析。


Logrotate默认使用gzip压缩方法,这是因为gzip在压缩率和速度之间取得了很好的平衡。然而,Logrotate的灵活性使得管理员可以根据具体需求选择不同的压缩方法或完全禁用压缩。

要启用压缩,只需在Logrotate配置文件中添加compress选项即可。例如:

# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log目录下的myapp.log文件
/var/log/myapp.log {
    # 每周轮转一次日志
    weekly
    # 保留4个轮转后的日志文件
    rotate 4
    # 压缩轮转后的日志文件
    compress
}


在这个配置中,每周轮转的日志文件将被压缩,并保留最近4个压缩后的日志文件。

虽然压缩可以节省大量空间,但它也带来了一些开销。压缩过程需要额外的CPU资源,而且压缩后的文件在需要查看时必须先解压。为了平衡这些因素,Logrotate提供了一些额外的压缩相关选项:

  1. delaycompress:这个选项会延迟压缩最近轮转的日志文件到下一次轮转。这对于那些在轮转后仍可能被写入的日志文件特别有用。例如:
# /etc/logrotate.d/syslog
# 这是用于管理系统日志文件的Logrotate配置文件

# 匹配/var/log/syslog文件
/var/log/syslog {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 压缩轮转后的日志文件
    compress
    # 延迟压缩最新的一个轮转日志文件到下一次轮转
    delaycompress
}
  1. compresscmd:允许指定自定义的压缩命令,而不是默认的gzip。例如,如果想使用bzip2进行压缩,可以这样配置:
# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log/目录下的myapp.log文件
/var/log/myapp.log {
    # 每周轮转一次日志
    weekly
    # 保留4个轮转后的日志文件
    rotate 4
    # 压缩轮转后的日志文件
    compress
    # 使用指定的压缩命令进行压缩,这里使用的是bzip2
    compresscmd /usr/bin/bzip2
    # 指定压缩文件的扩展名为.bz2
    compressext .bz2
}
  1. compressext:指定压缩文件的扩展名。在上面的例子中,我们将其设置为.bz2以匹配bzip2压缩方法。
  2. compressoptions:允许为压缩命令指定额外的选项。例如,如果想使用最高级别的gzip压缩,可以这样配置:
# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log/目录下的myapp.log文件
/var/log/myapp.log {
    # 每周轮转一次日志
    weekly
    # 保留4个轮转后的日志文件
    rotate 4
    # 压缩轮转后的日志文件
    compress
    # 使用最高压缩级别(-9)进行压缩
    compressoptions -9
}
  1. nocompress:如果在全局配置中启用了压缩,但某些特定的日志文件不需要压缩,可以使用这个选项。例如:
# /etc/logrotate.d/debug
# 这是用于管理调试日志文件的Logrotate配置文件

# 匹配/var/log/目录下的debug文件
/var/log/debug {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 不压缩轮转后的日志文件
    nocompress
}

在选择压缩选项时,需要考虑几个因素。首先是压缩率与CPU使用率之间的权衡。gzip通常提供了很好的平衡,但对于特别大的日志文件,可能需要考虑使用bzip2等压缩率更高的方法。其次,要考虑日志文件的访问频率。如果经常需要查看旧的日志文件,那么使用压缩可能会带来不便。


另外,对于一些特殊类型的日志文件,如二进制日志或已经压缩的日志,应该避免使用压缩。在这些情况下,可以使用nocompress选项。


3.3 日志文件权限管理

日志文件权限管理是Logrotate的一个重要功能,它确保了日志文件的安全性和可访问性。正确设置日志文件的权限不仅可以防止未经授权的访问,还能确保相关应用程序和服务能够正常写入日志。


Logrotate提供了多个选项来控制轮转后新创建的日志文件的权限、所有者和组。这些选项主要包括"create"、“su"和"olddir”。


首先,"create"选项允许指定新创建的日志文件的权限模式、所有者和组。其语法如下:

create mode owner group


其中,"mode"是一个三位数的八进制数,表示文件权限。"owner"和"group"分别指定文件的所有者和组。例如:

# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log/目录下的myapp.log文件
/var/log/myapp.log {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 创建新的日志文件,设置权限为0644,所有者为www-data,组为adm
    create 0644 www-data adm
}

这个配置会在每次轮转后创建一个新的myapp.log文件,其权限为644(所有者可读写,组用户和其他用户只读),所有者为"www-data",组为"adm"。

如果只指定"create"而不带参数,Logrotate将使用原始日志文件的权限、所有者和组来创建新文件。

对于那些需要特殊权限的日志文件,"su"选项非常有用。它允许Logrotate以指定的用户和组的身份来轮转日志文件。这在处理系统日志等需要提升权限的情况下特别有用。例如:

# /etc/logrotate.d/syslog
# 这是用于管理系统日志文件的Logrotate配置文件

# 匹配/var/log/syslog 文件
/var/log/syslog {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 创建新的日志文件,设置权限为0640,所有者为syslog,组为adm
    create 0640 syslog adm
    # 使用指定的用户和组来执行日志轮转操作
    su root syslog
}

在这个配置中,Logrotate将以root用户和syslog组的身份来轮转syslog文件。这确保了即使Logrotate是以非特权用户身份运行的,也能够处理需要特殊权限的日志文件。


"olddir"选项用于指定存放轮转后的旧日志文件的目录。这个选项可以与权限管理结合使用,以确保旧日志文件存储在一个安全的位置。例如:

# /etc/logrotate.d/apache2
# 这是用于管理Apache日志文件的Logrotate配置文件

# 匹配/var/log/apache2/目录下所有以.log结尾的文件
/var/log/apache2/*.log {
    # 每周轮转一次日志
    weekly
    # 保留52个轮转后的日志文件,相当于一年的历史记录
    rotate 52
    # 创建新的日志文件,设置权限为0640,所有者为root,组为adm
    create 0640 root adm
    # 将轮转后的旧日志文件移动到指定目录
    olddir /var/log/apache2/old
    # 如果指定的旧日志目录不存在,创建它并设置权限为0755,所有者为root,组为root
    createolddir 0755 root root
}

在这个配置中,轮转后的Apache日志文件将被移动到/var/log/apache2/old目录。"createolddir"选项确保如果该目录不存在,Logrotate会创建它,并设置指定的权限和所有权。


3.4 旧日志文件的处理方式

Logrotate提供了多种处理旧日志文件的方法,使系统管理员能够灵活地管理历史日志。这些方法包括保留、压缩、删除和移动旧日志文件。合理配置这些选项可以有效平衡存储空间使用和历史数据保留的需求。


首先,"rotate"选项是控制旧日志文件处理的核心。它指定了要保留的旧日志文件数量。例如,"rotate 5"表示保留5个旧的日志文件。当新的日志文件被创建时,最老的那个会被删除。这个选项通常与时间

或大小基础的轮转策略结合使用。

# /etc/logrotate.d/myapp
# 这是用于管理myapp日志文件的Logrotate配置文件

# 匹配/var/log目录下的myapp.log文件
/var/log/myapp.log {
    # 每天轮转一次日志
    daily
    # 保留5个轮转后的日志文件
    rotate 5
    # 压缩轮转后的日志文件
    compress
}

在这个配置中,系统将保留5个压缩后的旧日志文件,每天进行一次轮转。超过5个的旧文件会被自动删除。

对于需要长期保存的日志,可以使用"maxage"选项。它指定了删除旧日志文件的天数阈值。例如,"maxage 365"会删除超过一年的旧日志文件,无论"rotate"设置如何。这对于需要遵守特定数据保留政策的组织特别有用。

# /etc/logrotate.d/important-app
# 这是用于管理重要应用日志文件的Logrotate配置文件

# 匹配/var/log/important-app.log文件
/var/log/important-app.log {
    # 每月轮转一次日志
    monthly
    # 保留12个轮转后的日志文件,相当于一年的历史记录
    rotate 12
    # 压缩轮转后的日志文件
    compress
    # 删除超过365天的旧日志文件
    maxage 365
}

这个配置每月轮转一次日志,保留12个压缩后的旧日志文件,但会删除超过365天的文件。

Logrotate还提供了"dateext"选项,用于给轮转后的日志文件添加日期扩展名。这使得识别特定日期的日志文件变得更加容易。

# /etc/logrotate.d/httpd
# 这是用于管理Apache HTTP服务器访问日志的Logrotate配置文件

# 匹配/var/log/httpd/目录下的access.log文件
/var/log/httpd/access.log {
    # 每天轮转一次日志
    daily
    # 保留30个轮转后的日志文件
    rotate 30
    # 压缩轮转后的日志文件
    compress
    # 使用日期作为轮转后的文件扩展名
    dateext
    # 自定义日期格式,格式为-YYYYMMDD
    dateformat -%Y%m%d
}

使用这个配置,轮转后的文件名将类似于"access.log-20230515.gz"。

对于需要将旧日志文件移动到其他位置的情况,可以使用"olddir"选项。这在将旧日志文件存储在不同的磁盘分区或网络存储上时特别有用。

# /etc/logrotate.d/mysql
# 这是用于管理MySQL日志文件的Logrotate配置文件

# 匹配/var/log/mysql/目录下所有以.log结尾的文件
/var/log/mysql/*.log {
    # 每周轮转一次日志
    weekly
    # 保留52个轮转后的日志文件,相当于一年的日志
    rotate 52
    # 压缩轮转后的日志文件
    compress
    # 将轮转后的日志文件移动到指定目录
    olddir /backup/mysql_logs
    # 如果目标目录不存在,创建它并设置权限为750,所有者为mysql,组为adm
    createolddir 750 mysql adm
}

这个配置将把轮转后的MySQL日志文件移动到/backup/mysql_logs目录。"createolddir"选项确保目标目录存在,并设置适当的权限。


有时,可能需要在删除旧日志文件之前执行一些自定义操作。Logrotate通过"prerotate"和"postrotate"脚本提供了这种灵活性。例如,可以在删除旧日志文件之前将其归档到远程服务器。

# /etc/logrotate.d/app
# 这是用于管理应用程序日志文件的Logrotate配置文件

# 匹配/var/log/app.log文件
/var/log/app.log {
    # 每天轮转一次日志
    daily
    # 保留7个轮转后的日志文件
    rotate 7
    # 压缩轮转后的日志文件
    compress
    # 在日志轮转之前执行的脚本
    prerotate
        # 如果/var/run/app目录存在
        if [ -d /var/run/app ]; then
            # 使用rsync命令将当前的日志文件备份到远程服务器
            /usr/bin/rsync /var/log/app.log user@remote:/backup/
        fi
    # 脚本结束
    endscript
}

这个配置在轮转日志之前,将当前的日志文件同步到远程备份服务器。

最后,对于那些不需要保留的日志文件,可以使用"norotate"选项。这在处理临时或不重要的日志时很有用。

# /etc/logrotate.d/temp
# 这是用于管理临时日志文件的Logrotate配置文件

# 匹配/var/log/temp.log文件
/var/log/temp.log {
    # 每天轮转一次日志
    daily
    # 不进行日志轮转
    norotate
}

这个配置每天都会清空temp.log文件,而不保留任何历史版本。


通过合理组合这些选项,系统管理员可以为不同类型的日志文件制定最适合的处理策略。这不仅能够有效管理存储空间,还能确保重要的历史数据得到适当的保留和保护。在实际应用中,应根据具体的业务需求、法规要求和系统资源限制来调整这些设置,以达到最佳的日志管理效果。

Linux日志管理工具:Logrotate(二):https://developer.aliyun.com/article/1582126

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
21天前
|
监控 Unix Linux
Linux系统工具
Linux系统工具
37 6
|
2天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
11 2
Linux系统之安装cook菜谱工具
|
5天前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
19 3
|
17天前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
31 1
|
16天前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
40 0
|
16天前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
33 0
|
1月前
|
Linux
linux之centos安装dataease数据报表工具
linux之centos安装dataease数据报表工具
|
12天前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
87 3
|
13天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1576 12
|
8天前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
15 0