如何限制系统日志的大小?

Way*_*ner 22 syslog usbfs

我让我妈妈的电脑运行 Ubuntu 12.04 LTS。它一直工作得很好,但突然间系统日志被填满了。通过填充我的意思是我刚刚删除了一个/var/log/syslog大小为 400GB 的文件。是的 - 千兆字节。

虽然我确定那里有一些有用的信息,但我不确定 400GB 是否是可供筛选的任何类型的信息。真正令人惊奇的是,它发生在 8 小时内 - 我df在中午左右跑步,从那时到现在,她的驱动器充满了 30%(从略低于 70% 到 100%)。

什么可能导致这种情况,我该如何解决?`

编辑 看起来 USB 是罪犯:

Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157829] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157836] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157842] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157849] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157857] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157863] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157870] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157877] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157884] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Sep  8 08:52:10 pamela-desktop kernel: [ 6198.157891] usb 1-3: usbfs: process 1500 (demond_nscan) did not claim interface 3 before use
Run Code Online (Sandbox Code Playgroud)

abu*_*bua 19

限制 logrotate 的大小

打开/etc/logrotate.d/rsyslog配置文件

sudo nano /etc/logrotate.d/rsyslog
Run Code Online (Sandbox Code Playgroud)

该文件看起来…… 喜欢

/var/log/syslog
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}
....
...
Run Code Online (Sandbox Code Playgroud)

size 100k 在括号中添加例如。之后它应该看起来像:

/var/log/syslog
{
    rotate 7
    size 100k
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}
Run Code Online (Sandbox Code Playgroud)

请注意,这限制了旋转文件的文件大小,而不是实际的 syslog 文件。保存文件。下次启动 logrotate chron 作业时,它将限制轮换日志的大小。

限制当前系统日志的大小

要限制 的大小/var/log/syslog,您必须编辑/etc/rsyslog.d/50-default.conf,并设置固定的日志大小。

通过更改以下行来添加或修改此设置/etc/rsyslog.d/50-default.conf

.*;auth,authpriv.none       -/var/log/syslog
Run Code Online (Sandbox Code Playgroud)

这是rsyslog 手册的摘录:

输出通道是通过 $outchannel 指令定义的。它的语法如下:

$outchannel name,file-name,max-size,action-on-max-size

name 是输出通道的名称(不是文件),file-name 是要写入的文件名,max-size 最大允许大小和 action-on-max-size 当最大大小时发出的命令到达了。此命令始终只有一个参数。二进制是第一个空间之前的 action-on-max-size 部分,它的参数是该空间之后的所有内容。请注意,在将日志消息写入文件之前会查询 max-size。所以一定要将此限制设置得相当低,以便任何消息都适合。对于当前版本,将其设置为比预期低 1k 会有所帮助。max-size 必须始终以字节为单位指定 - 在开发阶段没有特殊符号(如 1k、1m 等)。请记住,$outchannel 只是定义了一个带有“name”的频道。它不会激活它。为此,您必须使用选择器行(见下文)。该选择器行包括频道名称和前面的 $ 符号。样本可能是:. :omfile:$mychannel 在目前的形式中,输出通道主要提供限制输出文件大小的能力。为此,请指定最大大小。当达到此大小时,rsyslogd 将执行 action-on-max-size 命令,然后重新打开文件并重试。该命令应该类似于日志轮换脚本或类似的东西。

如果没有 action-on-max-size 命令或该命令没有解决问题,则 rsyslogd 将关闭该文件并且永远不会重新打开该文件(当然,除了通过 huping 它)。当我们第一次遇到大 2gb 文件的严重问题时,集成了这个逻辑,这可能导致 rsyslogd 转储核心。在这种情况下,停止写入单个文件更为合适。同时,rsyslogd 已被修复以支持更大 2gb 的文件,但显然仅适用于支持的文件系统和操作系统版本。因此,强制执行 2gb 文件大小限制仍然有意义。

在这里,最大尺寸为1MB,把此行的前*.*; ...

$outchannel mysyslog,/var/log/syslog,1048576
Run Code Online (Sandbox Code Playgroud)

并将该*.*; ...行更改为

*.*;auth,authpriv.none  :omfile:$mysyslog
Run Code Online (Sandbox Code Playgroud)

重新启动 rsyslogd ether

sudo systemctl restart  rsyslog.service
Run Code Online (Sandbox Code Playgroud)

或者

sudo service rsyslog restart
Run Code Online (Sandbox Code Playgroud)

查看 rsyslog 状态类型

systemctl status rsyslog.service  
Run Code Online (Sandbox Code Playgroud)


小智 18

您应该找出导致大量消息的原因,就好像您解决了这个问题然后修复了大日志文件一样。

但是,在那之前,您可以根据以下之一进行日志轮换。

  • 时间(例如,每天轮换)
  • 大小(例如,当文件达到 10mb 时旋转)

默认情况下,这将在系统上设置:/etc/logrotate.d/rsyslog

 /var/log/syslog
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
            reload rsyslog >/dev/null 2>&1 || true
    endscript
 }
Run Code Online (Sandbox Code Playgroud)

从这里你可以看到它会每天轮换 /var/log/syslog 文件并保留7 个轮换文件的副本

您可以将其更改为在大小限制上旋转,例如 1mb 或减少它存储的副本数量。

警告:这不会解决问题的根本原因,但是它会为您争取一些时间,因为它会阻止文件系统填满。

  • 来源:/etc/logrotate.d/rsyslog
  • 来源:man logrotate

  • 这不会限制实际系统日志的大小! (4认同)