searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Logrotate linux日志文件管理工具

2023-08-21 11:30:07
11
0

      日志是程序异常时定位问题的有效信息。但是如果不对日志做日志管理和清理,日志占用磁盘过多导致磁盘无可用剩余空间,系统会挂掉。尤其是某程序异常后疯狂打印日志使日志量答复飙升这种情况,如果不及时处理,很容易就会造成系统挂掉。

       如果需要人为定期按照各种维度去手动清理日志就显得十分棘手。这里介绍日志切割神器logrotate。

        logrotate 是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;同时还能够指定日志的保存数量,并且还可以在切割之后运行自定义命令。

        logrotate 是基于 crontab 运行的,所以这个时间点是由 crontab 控制的,具体可以查询 crontab 的配置文件 /etc/anacrontab。 系统会按照计划的频率运行 。主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 linux 系统中找不到 logrotate, 可以手动执行安装命令来安装。

  1. 配置文件 /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

 

# 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

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

 

在这个配置文件中,主要分为2部分:

  • 第一部分是默认设置,如果需要转储的日志文件没有特殊配置,则遵循默认设置的参数;
  • 第二部分是读取 /etc/logrotate.d/ 目录中的日志轮替的子配置文件,也就是说,在 /etc/logrotate.d/ 目录中的所有符合语法规则的子配置文件也会进行日志轮替;
  1. 对特性的日志文件做特定的日志操作

如果有些日志默认没有加入日志轮替,那么这些日志默认是不会进行日志轮替的,我们有希望用logrotate区管理这些日志,怎么办?

某些日志不希望使用/etc/logrotate.conf 中默认的日志轮转规则,而是指定一些特定的处理参数,怎么办?

针对以上两种情况,可以通过在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件来实现。在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被包含到主配置文件中,所以也可以把日志加入轮替,同时使用配置文件中指定的策略参数。

例子:

[root@bogon logrotate.d]# cat bootlog

/var/log/boot.log

{

    missingok

    daily

    copytruncate

    rotate 7

    notifempty

}

这里文件指定的是/var/log/boot.log日志处理策略。这里bootlog就不再按照默认配置文件中设置的每周做一次日志轮转,而是按照改配置文件中设置的每天做一次轮转,保存7个轮转日志。

 

/var/log/sssd/*.log {

    weekly

    missingok

    notifempty

    sharedscripts

    rotate 2

    compress

    delaycompress

    postrotate

        /bin/kill -HUP `cat /var/run/sssd.pid  2>/dev/null`  2> /dev/null || true

    endscript

}

这个文件指定的是/var/log/sssd/目录下所有的.log文件的日志处理测率。

 

特别的,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以/etc/logrotate.conf这个文件的设定来作为默认值。

 

 

  1. 控制日志文件占用磁盘空间大小

 

刚刚举例的例子中使用的weekly, daily,分别代表一周轮转一次日志、一天轮转一次。他们都属于轮转周期参数,这类参数还有:hourly、daily、monthly、yearly。

这类按照一定时间周期来轮转日志的,这样的方案当遇见突发的日志增长,会出现日志不能基础轮转和删除。

这里可以结合使用size参数。

maxsize 大小

 

日志轮替的最大值。也就是日志一定要达到这个最大值会进行轮转,否则就算时间达到也不进行轮替

size大小

日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k

 

其中,size参数跟滚动周期参数:hourly、daily、monthly、yearly完全是互斥的。一旦设置了size参数,滚动周期参数就自动无效了,只要每次执行logrotate指令时,demo.txt文件大小超过size,就会触发一次滚动,没有滚动周期一说了。总结一句话:满足size就滚动一次。

而maxsize是和滚动周期参数结合使用的。每满足maxsize就滚动一次,不满足则滚动1次,(每个滚动周期内,n次或1次)

0条评论
0 / 1000
a****m
3文章数
0粉丝数
a****m
3 文章 | 0 粉丝
a****m
3文章数
0粉丝数
a****m
3 文章 | 0 粉丝
原创

Logrotate linux日志文件管理工具

2023-08-21 11:30:07
11
0

      日志是程序异常时定位问题的有效信息。但是如果不对日志做日志管理和清理,日志占用磁盘过多导致磁盘无可用剩余空间,系统会挂掉。尤其是某程序异常后疯狂打印日志使日志量答复飙升这种情况,如果不及时处理,很容易就会造成系统挂掉。

       如果需要人为定期按照各种维度去手动清理日志就显得十分棘手。这里介绍日志切割神器logrotate。

        logrotate 是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;同时还能够指定日志的保存数量,并且还可以在切割之后运行自定义命令。

        logrotate 是基于 crontab 运行的,所以这个时间点是由 crontab 控制的,具体可以查询 crontab 的配置文件 /etc/anacrontab。 系统会按照计划的频率运行 。主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 linux 系统中找不到 logrotate, 可以手动执行安装命令来安装。

  1. 配置文件 /etc/logrotate.conf

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

 

# 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

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

 

在这个配置文件中,主要分为2部分:

  • 第一部分是默认设置,如果需要转储的日志文件没有特殊配置,则遵循默认设置的参数;
  • 第二部分是读取 /etc/logrotate.d/ 目录中的日志轮替的子配置文件,也就是说,在 /etc/logrotate.d/ 目录中的所有符合语法规则的子配置文件也会进行日志轮替;
  1. 对特性的日志文件做特定的日志操作

如果有些日志默认没有加入日志轮替,那么这些日志默认是不会进行日志轮替的,我们有希望用logrotate区管理这些日志,怎么办?

某些日志不希望使用/etc/logrotate.conf 中默认的日志轮转规则,而是指定一些特定的处理参数,怎么办?

针对以上两种情况,可以通过在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件来实现。在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被包含到主配置文件中,所以也可以把日志加入轮替,同时使用配置文件中指定的策略参数。

例子:

[root@bogon logrotate.d]# cat bootlog

/var/log/boot.log

{

    missingok

    daily

    copytruncate

    rotate 7

    notifempty

}

这里文件指定的是/var/log/boot.log日志处理策略。这里bootlog就不再按照默认配置文件中设置的每周做一次日志轮转,而是按照改配置文件中设置的每天做一次轮转,保存7个轮转日志。

 

/var/log/sssd/*.log {

    weekly

    missingok

    notifempty

    sharedscripts

    rotate 2

    compress

    delaycompress

    postrotate

        /bin/kill -HUP `cat /var/run/sssd.pid  2>/dev/null`  2> /dev/null || true

    endscript

}

这个文件指定的是/var/log/sssd/目录下所有的.log文件的日志处理测率。

 

特别的,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以/etc/logrotate.conf这个文件的设定来作为默认值。

 

 

  1. 控制日志文件占用磁盘空间大小

 

刚刚举例的例子中使用的weekly, daily,分别代表一周轮转一次日志、一天轮转一次。他们都属于轮转周期参数,这类参数还有:hourly、daily、monthly、yearly。

这类按照一定时间周期来轮转日志的,这样的方案当遇见突发的日志增长,会出现日志不能基础轮转和删除。

这里可以结合使用size参数。

maxsize 大小

 

日志轮替的最大值。也就是日志一定要达到这个最大值会进行轮转,否则就算时间达到也不进行轮替

size大小

日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k

 

其中,size参数跟滚动周期参数:hourly、daily、monthly、yearly完全是互斥的。一旦设置了size参数,滚动周期参数就自动无效了,只要每次执行logrotate指令时,demo.txt文件大小超过size,就会触发一次滚动,没有滚动周期一说了。总结一句话:满足size就滚动一次。

而maxsize是和滚动周期参数结合使用的。每满足maxsize就滚动一次,不满足则滚动1次,(每个滚动周期内,n次或1次)

文章来自个人专栏
apan
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0