带压缩的日志轮换?

Lan*_*are 1 linux compression logging

我正在 Linux (CentOS 7) 上运行一个进程,它在 stdout 上产生大量输出。将其全部发送到文件将导致文件大小大于 1 TB。但令人高兴的是,输出是相当可压缩的——它由许多相当重复的文本组成。

我的想法是,我可以使用类似于此处描述的某种日志轮换程序:(标准输出的日志轮换?),但是一旦日志不再是最新的,它就会被压缩(并且永远不会被删除)?所以我最终会向文件写入几个 GB,压缩它,然后继续写入一个新文件?

bcs*_*s78 5

您可以为此使用logrotate。CentOS 7 使用systemd,因此您可以使用以下内容配置计划的 logrotate 任务

  • /etc/systemd/system调用中创建一个 logrotate 配置文件,mylogrotate.config内容如下:

    /path/to/your/logfile/*.log {
        compress
        copytruncate
        delaycompress
        minsize 1G
        missingok
        nomail
        notifempty
        rotate 30
    }
    
    Run Code Online (Sandbox Code Playgroud)

这将告诉 logrotate 执行以下操作:

  • 旧版本的日志文件默认使用 gzip 压缩。
  • 创建副本后原地截断原始日志文件,而不是移动旧日志文件并可选择创建新日志文件。
  • 将上一个日志文件的压缩推迟到下一个循环周期,这样您将有两个未压缩的日志文件。
  • 日志文件在增长超过 1GB 时进行轮换。
  • 如果日志文件丢失,请继续下一个而不发出错误消息。
  • 不要将旧的日志文件邮寄到任何地址。
  • 日志文件在被删除之前会旋转 30 次,因此您将拥有 30 个旧日志文件。任何比这更旧的内容都将被删除。

创建系统服务。使用以下命令在/etc/systemd/system调用中创建一个文件mylogrotate.service

[Unit]
Description=Rotate My Log

[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose
Run Code Online (Sandbox Code Playgroud)

让我们安排这个任务。使用以下命令在/etc/systemd/system调用中创建第三个文件mylogrotate.timer

[Unit]
Description=Rotate My Log Timer

[Timer]
OnCalendar=*:00:00
Persistent=true

[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

这将每小时运行一次 logrotate。

一切都已经设置好了。现在启用计划任务。

systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer
Run Code Online (Sandbox Code Playgroud)

当然,以 root 身份执行所有这些操作。

(我在 Ubuntu 上,但我希望这能在 CentOS 上正常工作而没有任何问题)


归档时间:

查看次数:

877 次

最近记录:

8 年,1 月 前