Linux日志管理工具logrotate

logrotate是linux系统上的一个日志管理工具,可以对日志文件自动切割或截断。

一、介绍

​ linux日志文件记录了应用程序各种报错信息及debug信息,在排障过程中或者系统性能分析时经常被用到。对于高访问的服务器,日志文件大小会增长极快,会造成日志膨胀问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

​ logrotate是个十分强大的日志管理工具,它可以自动对日志进行截断、切割、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/app_run.log日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

二、安装logrotate

主流Linux发行版上都默认安装有logrotate包 ,检查是否安装

1
2
[root@node1 /etc/logrotate.d]# logrotate --version
logrotate 3.8.6

如果系统未默认安装,则进行安装操作

1
yum -y install logrotate 

三、配置logrotate

1.logrotate的配置

logrotate的配置文件是/etc/logrotate.conf ,通常不需要对它进行修改。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@node1 /etc/logrotate.d]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 8

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

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

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

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

# system-specific logs may be also be configured here.

2.logrotate本身的日志

logrotate自身的日志存放于/var/lib/logrotate/status目录

3.日志文件的配置

日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

1) 通用模板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
vim /etc/logrotate.d/run.logrotate 

[内容]
/var/log/run.log  {
	size=50M
	minsize 20M
    monthly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
    dateext
}

2) 参数说明

  • size: 日志文件大小可以增长到50MB
  • minsize: 日志最小切割大小
  • monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
  • rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
  • compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
  • delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
  • missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • notifempty: 如果日志文件为空,轮循不会进行。
  • create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
  • dateext: 让旧日志文件以创建日期命名

3) logrotate命令

  • 语法

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    logrotate [-?dfv][-s <状态文件>][--usage][配置文件]
    
    参数说明:
    
    -?或--help  在线帮助。
    -d或--debug  详细显示指令执行过程,便于排错或了解程序执行的情况。
    -f或--force  强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然。
    -s<状态文件>或--state=<状态文件>  使用指定的状态文件。
    -v或--version  显示指令执行过程。
    -usage  显示指令基本用法。
    
  • 手动调用为/etc/lograte.d/下配置的所有日志

    1
    
    logrotate /etc/logrotate.conf
    
  • 手动调用某个特定的配置

    1
    
    logrotate /etc/logrotate.d/run.logrotate
    
  • 预演方式运行logrotate

    1
    2
    3
    
    logrotate -d /etc/logrotate.d/run.logrotate
    
    #排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。
    
  • 强制轮询日志

    1
    2
    
    logrotate -vf /etc/logrotate.d/run.logrotate
    #-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出
    

4.示例

1) 创建日志文件

1
2
3
4
#创建日志文件
touch /var/log/test-logrotate.log
#填入一个10MB的随机比特流数据
head -c 10M < /dev/urandom > /var/log/test-logrotate.log

2) 创建配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
vim /etc/logrotate.d/test-logrotate.logrotate
[内容]
/var/log/test-logrotate*.log {
    daily
    rotate 5
    copytruncate
    dateext
    compress
    missingok
}

3) 使用命令强制轮询

1
logrotate -vf /etc/logrotate.d/test-logrotate.logrotate

4) 查看生成的文件

1
2
3
[root@node1 /var/log]# ll test-logrotate*
-rw-r--r-- 1 root root        0 3月  18 16:30 test-logrotate.log
-rw-r--r-- 1 root root 10487378 3月  18 16:29 test-logrotate.log-20220318.gz