跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 系统分析和微调指南 / 系统监视 / 系统日志文件
适用范围 SUSE Linux Enterprise Server 15 SP5

3 系统日志文件

系统日志文件分析是分析系统时最重要的任务之一。事实上,在对系统进行维护或查错时,第一件事就是要查看系统日志文件。SUSE Linux Enterprise Server 会自动详细记录系统上发生的几乎一切事件。自从过渡到 systemd 之后,内核消息以及已在 systemd 中注册的系统服务的消息都将记录在 systemd 日志中(请参见第 21 章 “journalctl:查询 systemd 日志)。其他日志文件(主要是系统应用程序的日志文件)将以纯文本格式写入,并可使用编辑器或分页器轻松阅读。还可以使用脚本来分析这些文件。这可让您过滤其内容。

3.1 /var/log/ 中的系统日志文件

系统日志文件始终位于 /var/log 目录下。以下列表提供了在完成默认安装后 SUSE Linux Enterprise Server 中所有系统日志文件的概述。根据您的安装范围,/var/log 还会包含此处未列出的其他服务和应用程序中的日志文件。下面所述的某些文件和目录以占位符表示,仅当安装相应的应用程序时才会使用它们。大多数日志文件仅对 root 用户可见。

apparmor/

AppArmor 日志文件。有关 AppArmor 的详细信息,请参见第 V 部分 “通过 AppArmor 限制特权”

audit/

来自审计框架的日志。有关详细信息,请参见第 VII 部分 “The Linux Audit Framework

ConsoleKit/

ConsoleKit 守护程序(用于跟踪哪些用户已登录,以及他们如何与计算机交互的守护程序)的日志。

cups/

通用 Unix 打印系统 (cups) 的访问和错误日志。

firewall

防火墙日志。

gdm/

来自 GNOME 显示管理器的日志文件。

krb5/

来自 Kerberos 网络身份验证系统的日志文件。

lastlog

包含每个用户上次登录相关信息的数据库。可使用命令 lastlog 进行查看。有关更多信息,请参见man 8 lastlog

localmessages

某些引导脚本的日志消息,例如,DHCP 客户端的日志。

mail*

邮件服务器(sendmailpostfix)日志。

messages

这是所有内核和系统日志消息的默认保存位置,出现问题时应首先查看该位置(以及 /var/log/warn)。

NetworkManager

NetworkManager 日志文件。

news/

来自新闻服务器的日志消息。

chrony/

来自网络时间协议守护程序 (chrony) 的日志。

pk_backend_zypp*

PackageKit(使用 libzypp 后端)日志文件。

samba/

来自 Samba、Windows SMB/CIFS 文件服务器的日志文件。

warn

所有系统警告和错误的日志。出现问题时,应首先查看此位置(以及 systemd 日志的输出)。

wtmp

所有登录/注销活动 和远程连接的数据库。可使用命令 last 进行查看。有关更多信息,请参见man 1 last

Xorg.0.log

X.Org 启动日志文件。如果在启动 X.Org 时出现问题,请参考此文件。来自先前 X.Org 启动的日志文件副本的文件编号为 Xorg.?.log。

YaST2/

所有 YaST 日志文件。

zypp/

libzypp 日志文件。可参考这些文件获取软件包安装历史。

zypper.log

来自命令行安装程序 zypper 的日志。

3.2 查看和分析日志文件

要查看日志文件,可以使用任何文本编辑器。此外,还可以使用一个简单的 YaST 模块来查看 YaST 控制中心的杂项 › 系统日志下提供的系统日志。

要在文本控制台中查看日志文件,请使用命令 lessmore。使用 headtail 可查看日志文件的开头和结尾。要实时查看日志文件的追加项,请使用 tail -f。有关如何使用这些工具的信息,请查看它们的手册页。

要在日志文件中搜索字符串或正则表达式,请使用 grepawk 可用于分析和重新写入日志文件。

3.3 使用 logrotate 管理日志文件

/var/log 下的日志文件每天增长,很快就会变得非常庞大。logrotate 工具可帮助您管理日志文件及其增长。使用此工具可以自动轮换、去除、压缩和通过邮件发送日志文件。可以定期(每日、每周或每月)或者在超过特定大小时处理日志文件。

通常由 systemd 每日运行 logrotate,因此只会每日修改一次日志文件。但存在一些例外情况:因超过大小限制而修改日志文件时、如果一天内多次运行 logrotate,或者如果启用 --force。使用 /var/lib/misc/logrotate.status 可确定上次轮换特定文件的时间。

logrotate 的主配置文件为 /etc/logrotate.conf。生成日志文件的系统软件包和程序(例如 apache2)将其自身的配置文件放在 /etc/logrotate.d/ 目录中。/etc/logrotate.d/ 的内容是通过 /etc/logrotate.conf 包含的。

例 3.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

# comment these to switch compression to use gzip or another
# compression scheme
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
重要
重要:避免权限冲突

create 选项会关注 /etc/permissions* 中所指定文件的模式和所有权。如果您修改这些设置,请确保不会引发冲突。

3.4 使用 logwatch 监视日志文件

logwatch 是一个可自定义且可插入的日志监视脚本。它可以分析系统日志、提取重要信息,并以直观易懂的方式显示这些信息。要使用 logwatch,请安装 logwatch 软件包。

可在命令行上使用 logwatch 来生成动态报告,或通过 cron 来定期创建自定义报告。报告可在屏幕上列显、保存到文件,或通过邮件发送到指定的地址。通过 cron 自动生成报告时,后一种做法特别有用。

在命令行上,可以告知 logwatch 要针对哪个服务和时间范围生成报告,以及包含信息的详细程度:

# Detailed report on all kernel messages from yesterday
logwatch --service kernel --detail High --range Yesterday --print

# Low detail report on all sshd events recorded (incl. archived logs)
logwatch --service sshd --detail Low --range All --archives --print

# Mail a report on all smartd messages from May 5th to May 7th to root@localhost
logwatch --service smartd --range 'between 5/5/2005 and 5/7/2005' \
--mailto root@localhost --print

--range 选项的语法比较复杂 — 有关细节,请参见 logwatch --range help。使用以下命令获取可查询的所有服务的列表:

> ls /usr/share/logwatch/default.conf/services/ | sed 's/\.conf//g'

logwatch 的可自定义程度很高。但通常默认配置便足以满足需求。默认配置文件位于 /usr/share/logwatch/default.conf/ 下。切勿更改这些文件,因为下一次更新时会再次重写它们。应将自定义配置放入 /etc/logwatch/conf/(但您可以使用默认配置文件作为模板)。有关如何自定义 logwatch 的详细操作指南,请参见 /usr/share/doc/packages/logwatch/HOWTO-Customize-LogWatch。存在以下配置文件:

logwatch.conf

主要配置文件。默认版本带有大量注释。可在命令行重写每个配置选项。

ignore.conf

过滤掉 logwatch 应全局忽略的所有行。

services/*.conf

该服务目录包含了可为其生成报告的每个服务的配置文件。

logfiles/*.conf

有关应分析每个服务的哪些日志文件的规范。

3.5 root 配置邮件转发

系统守护程序、cron 作业、systemd 计时器和其他应用程序可以生成邮件并将其发送给系统的 root 用户。默认情况下,每个用户帐户拥有一个本地邮箱,在登录后会收到有关新邮件的通知。

这些邮件可能包含需要系统管理员快速做出响应的安全相关报告和事件。要及时收到有关这些邮件的通知,强烈建议将这些邮件转发到定期检查的专用远程电子邮件帐户。

过程 3.1︰ root 用户配置邮件转发

要为 root 用户转发邮件,请执行以下步骤:

  1. 安装 yast2-mail 软件包:

    # zypper in yast2-mail
  2. 运行交互式 YaST 邮件配置:

    # yast mail
  3. 选择永久作为连接类型,然后单击下一步继续。

  4. 输入外发邮件服务器的地址。根据需要配置身份验证。强烈建议强制实施 TLS 加密,以防通过网络发送未经加密的敏感系统数据。单击下一步继续。

  5. 输入要将 root 用户的邮件转发到的电子邮件地址,然后完成配置。

    重要
    重要:不要接受远程 SMTP 连接

    不要启用接受远程 SMTP 连接,否则本地计算机将充当邮件中继。

  6. 发送一封邮件以测试邮件是否正常转发:

    > mail root
    subject: test
    test
    .
  7. 使用 mailq 命令校验是否已发送测试邮件。如果成功,则队列应该为空。该邮件应该已由事先配置的专用邮件地址接收。

根据受管的计算机数和需要收到系统事件通知的人数,可以建立不同的电子邮件地址模型:

  • 在只能由一个人访问的电子邮件帐户中收集来自不同系统的邮件。

  • 在可由所有相关人员访问的组电子邮件帐户(别名或邮件列表)中收集来自不同系统的邮件。

  • 为每个系统创建独立的电子邮件帐户。

管理员必须定期检查相关的电子邮件帐户,这一点至关重要。为了简化此项工作并识别重要事件,请避免发送不必要的信息。将应用程序配置为仅发送相关信息。

3.6 将日志消息转发到中心系统日志服务器

可将系统日志数据从各个系统转发到网络上的中心系统日志服务器。这样,管理员便可以大致了解所有主机上的事件,并防止成功攻克了系统的攻击者操控系统日志以掩盖其踪迹。

设置中心系统日志服务器的过程由两个部分组成。首先配置中心日志服务器,然后配置客户端以进行远程日志记录。

3.6.1 设置中心系统日志服务器

过程 3.2︰ 配置中心 rsyslog 服务器

要设置中心系统日志服务器,请执行以下步骤:

  1. 编辑配置文件 /etc/rsyslog.d/remote.conf

  2. 取消注释配置文件的 UDP Syslog ServerTCP Syslog Server 部分中的以下行。为 rsyslogd 指派 IP 地址和端口。

    TCP 示例:

    $ModLoad imtcp.so
    $UDPServerAddress IP1
    $InputTCPServerRun PORT2

    UDP 示例:

    $ModLoad imudp.so
    $UDPServerAddress IP1
    $UDPServerRun PORT2

    1

    要监听的 rsyslogd 接口的 IP 地址。如果不指定地址,守护程序将监听所有接口。

    2

    要监听的 rsyslogd 端口。选择低于 1024 的特权端口。默认值为 514。

    重要
    重要:TCP 与 UDP 协议

    在传统上,系统日志会使用 UDP 协议通过网络来传输日志消息。这种传输方式的开销较少,但可靠性不足。在负载较高的情况下,日志消息可能会丢失。

    TCP 协议更可靠,因此应该优先使用它而不是 UDP。

    注意
    注意:将 UDPServerAddress 用于 TCP

    TCP 示例中的 $UDPServerAddress 配置参数并没有错误。尽管其名称包含 UDP,但它同时用于 TCP 和 UDP。

  3. 保存文件。

  4. 重启动 rsyslog 服务:

    > sudo systemctl restart rsyslog.service
  5. 在防火墙中打开相应的端口。对于与 TCP 配合使用的 firewalld,请在端口 514 上运行:

    > sudo firewall-cmd --add-port 514/tcp --permanent
    > sudo firewall-cmd --reload

现在,您已配置中心系统日志服务器。接下来,请配置客户端以进行远程日志记录。

3.6.2 设置客户端计算机

过程 3.3︰ 配置一个 rsyslog 实例用于远程日志记录

要配置计算机以将日志远程记录到中心系统日志服务器,请执行以下步骤:

  1. 编辑配置文件 /etc/rsyslog.d/remote.conf

  2. 取消注释相应的行(TCP 或 UDP),并将 remote-host 替换为在第 3.6.1 节 “设置中心系统日志服务器”中设置的中心系统日志服务器地址。

    TCP 示例:

    # Remote Logging using TCP for reliable delivery
    # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    *.* @@remote-host

    UDP 示例:

    # Remote Logging using UDP
    # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    *.* @remote-host
  3. 保存文件。

  4. 重启动 rsyslog 服务:

    > sudo systemctl restart rsyslog.service
  5. 校验系统日志转发是否可正常进行:

    > logger "hello world"

    中心系统日志服务器上现在应会出现日志消息 hello world

现在,您已配置一个系统以将日志远程记录到中心系统日志服务器。针对应该远程记录其日志的所有系统重复上述过程。

3.6.3 更多信息

此基本设置不包括加密,且仅适用于可信的内部网络。强烈建议使用 TLS 加密,但这需要一个证书基础架构。

在此配置中,来自远程主机的所有消息的处理方式与在中心系统日志服务器上相同。请考虑按远程主机将消息过滤到单独的文件中,或者按消息类别将消息分类。

有关加密、过滤和其他高级主题的详细信息,请查阅 https://www.rsyslog.com/doc/master/index.html#manual 上的 RSyslog 文档。

3.7 使用 logger 创建系统日志项

logger 是用于在系统日志中创建日志项的工具。它提供了 rsyslogd 系统日志模块的外壳命令接口。例如,下面一行命令会在 /var/log/messages 中或直接在日志中(如果未运行日志记录工具)输出其消息:

> logger -t Test "This message comes from $USER"

根据当前用户和主机名,日志将包含如下一行:

Sep 28 13:09:31 venus Test: This message comes from tux