如何在不崩溃的情况下查看“/var/log/syslog”内容

如何在不崩溃的情况下查看“/var/log/syslog”内容

由于各种原因,我需要在 中检查计算机日志/var/log/syslog,但这已成为一个小问题,因为我实际上无法查看该文件中的日志,因为每次打开它(无论我使用哪个程序)它都会崩溃。例如,如果我在nanogeditcat或甚至主日志查看程序中打开它,我就会遇到这样的崩溃,因为文件中的数据太多而无法加载:

主日志查看器 GUI 崩溃

所以我真正的问题是,如何才能syslog在不让查看器崩溃的情况下进行查看?我做错了什么吗?还是有更好的方法,大家都在用,而我不知道?


操作系统信息:

Description:    Ubuntu 15.04
Release:    15.04

答案1

总结:

问题是由于文件var/log/syslog非常大,kernel尤其是定期ufw转储大量日志。为了解决这个问题,我们需要在配置文件中UFW_AUDIT设置LOGLEVEL如下ufwlowufw/etc/ufw/ufw.conf

sudo sed -i '/^LOGLEVEL/s/=.*/=low/' /etc/ufw/ufw.conf

man ufw

Loglevels above medium generate a lot of logging output, and may 
quickly fill up your disk. Loglevel medium may generate a lot of 
logging output on a busy system.

细节 :

导致错误的原因可能有很多

Stream has outstanding operation

所示。最常见的两种情况是文件太大而无法读取以及文件包含无法读取的异常内容。

首先我们考虑第一个原因,即文件太大(我将按照我们的步骤一步步介绍):

  • 首先,我们需要检查其中有多少行/var/log/syslog,结果发现很不寻常:

    $ wc -l /var/log/syslog
    1308061 /var/log/syslog
    
  • 由于该文件有 1308061 行,相当大,我们需要检查其logrorate配置方式rsyslog

    sed -n '/\/var\/log\/syslog/,/^}$/p' /etc/logrotate.d/rsyslog
    

这表明/var/log/syslog将每天轮换并删除超过一周的日志,这是默认设置。

  • 接下来,我们需要/var/log/syslog使用以下命令检查哪个进程正在将大部分日志写入文件:

    less /var/log/syslog | tr -s ' ' | cut -d' ' -f5 | sort | uniq -c | sort -rn
    

这将按降序显示文件中写入行数最多的进程。我们发现kernel写入文件数最多的进程,其计数非常高(1761519)。接下来是thermald其写入次数约为 5K 的几个进程。

  • 考虑到 1kernel1 是此异常的根源,我们已检查其中/var/log/syslog定期发生的模式:

    grep "kernel" /var/log/syslog | less 
    

并找到了一个关于UFW AUDIT并且它非常有规律地写入日志文件中。

  • ufwLOGLEVEL如果设置为及以上,将转储这些消息medium。要查找当前值:

    $ grep -i "^loglevel" /etc/ufw/ufw.conf
    LOGLEVEL=full
    

这就是问题的根源,要摆脱这些常规消息,就需要这样做LOGLEVEL=low,在大多数情况下这应该就足够了。来自man ufw

low    logs all blocked packets not matching the default policy 
(with rate  limiting), as well as  packets  matching  logged rules.

检查该LOGGING部分man ufw以获得有关ufw日志记录的更多想法。

答案2

尝试less /var/log/syslog

按 shift-f 转到文件末尾并监视以下更改tail -f /var/log/syslog

您应该会看到您的日志文件。

它们上面肯定有一些垃圾,或者可能是大小问题导致 Syslog 应用程序无法查看它们。因此,重命名它并尝试再次打开 Syslog 应用程序。您应该能够看到新的日志文件。

相关内容