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 部分 “Linux 审计框架”。
ConsoleKit/
ConsoleKit
守护程序(用于跟踪哪些用户已登录,以及他们如何与计算机交互的守护程序)的日志。cups/
通用 Unix 打印系统 (
cups
) 的访问和错误日志。firewall
防火墙日志。
gdm/
来自 GNOME 显示管理器的日志文件。
krb5/
来自 Kerberos 网络身份验证系统的日志文件。
lastlog
包含每个用户上次登录相关信息的数据库。可使用命令
lastlog
进行查看。有关更多信息,请参见man 8 lastlog
。localmessages
某些引导脚本的日志消息,例如,DHCP 客户端的日志。
mail*
邮件服务器(
sendmail
、postfix
)日志。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.NUMBER.log
X.Org 启动日志文件。如果在启动 X.Org 时遇到问题,请参见这些文件。
文件名中的 NUMBER 是显示编号。例如,默认的
Xorg.0.log
是显示编号0
的日志,Xorg.1.log
是显示编号1
的日志。先前的 X.Org 启动事件产生的日志文件按照Xorg.NUMBER.log.old
命名。注意仅当您以
root
身份启动 X.Org 会话时,/var/log/
目录中才会生成 X.Org 日志文件。如果以任何其他用户的身份启动 X.Org 会话,则可以在~/.local/share/xorg/
目录中找到日志文件。YaST2/
所有 YaST 日志文件。
zypp/
libzypp
日志文件。可参考这些文件获取软件包安装历史。zypper.log
来自命令行安装程序
zypper
的日志。
3.2 查看和分析日志文件 #
要查看日志文件,可以使用任何文本编辑器。此外,还可以使用一个简单的 YaST 模块来查看 YaST 控制中心的
› 下提供的系统日志。
要在文本控制台中查看日志文件,请使用命令 less
或 more
。使用 head
和 tail
可查看日志文件的开头和结尾。要实时查看日志文件的追加项,请使用 tail
-f
。有关如何使用这些工具的信息,请查看它们的手册页。
要在日志文件中搜索字符串或正则表达式,请使用 grep
。awk
可用于分析和重新写入日志文件。
3.3 使用 logrotate
管理日志文件 #
/var/log
下的日志文件每天都会增长,很快就会变得庞大。logrotate
工具可帮助您管理日志文件及其增长速度。使用此工具可以自动轮换、去除、压缩日志文件,以及通过邮件发送这些文件。可以定期(每日、每周或每月)或者在超过特定大小时处理日志文件。
logrotate
每天由 systemd
运行,因此前者每天只会修改一次日志文件。但存在一些例外情况:因超过大小限制而修改日志文件时、如果一天内多次运行 logrotate
,或者如果启用 --force
。使用 /var/lib/misc/logrotate.status
可确定上次轮换特定文件的时间。
logrotate
的主配置文件为 /etc/logrotate.conf
。生成日志文件的系统软件包和程序(例如 apache2
)将其自身的配置文件放在 /etc/logrotate.d/
目录中。/etc/logrotate.d/
的内容是通过 /etc/logrotate.conf
包含的。
/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
用户。默认情况下,每个用户帐户拥有一个本地邮箱,在登录后会收到有关新邮件的通知。
这些邮件可能包含需要系统管理员迅速应对的安全相关报告和事件。要及时收到有关这些邮件的通知,强烈建议将这些邮件转发到定期检查的专用远程电子邮件帐户。
root
用户配置邮件转发 #
要为 root
用户转发邮件,请执行以下步骤:
安装 yast2-mail 软件包:
#
zypper in yast2-mail
运行交互式 YaST 邮件配置:
#
yast mail
选择
作为 ,然后单击 继续。输入
的地址。根据需要配置 。强烈建议 ,以防通过网络发送未经加密的敏感系统数据。单击 继续。输入要
的电子邮件地址,然后 配置。重要:不要接受远程 SMTP 连接不要启用 ,否则本地计算机将充当邮件中继。
发送一封邮件以测试邮件是否正常转发:
>
mail root
subject: test test .使用
mailq
命令校验是否已发送测试邮件。如果成功,则队列应该为空。该邮件应该已由事先配置的专用邮件地址接收。
根据受管的计算机数和需要收到系统事件通知的人数,可以建立不同的电子邮件地址模型:
在只能由一个人访问的电子邮件帐户中收集来自不同系统的邮件。
在可由所有相关人员访问的组电子邮件帐户(别名或邮件列表)中收集来自不同系统的邮件。
为每个系统创建独立的电子邮件帐户。
管理员必须定期检查相关的电子邮件帐户,这一点至关重要。为了简化此项工作并识别重要事件,请避免发送不必要的信息。将应用程序配置为仅发送相关信息。
3.6 将日志消息转发到中心系统日志服务器 #
可将系统日志数据从各个系统转发到网络上的中心系统日志服务器。这样,管理员便可以大致了解所有主机上的事件,并防止成功攻克了系统的攻击者操控系统日志以掩盖其踪迹。
设置中心系统日志服务器的过程由两个部分组成。首先配置中心日志服务器,然后配置客户端以进行远程日志记录。
3.6.1 设置中心系统日志服务器 #
rsyslog
服务器 #要设置中心系统日志服务器,请执行以下步骤:
编辑配置文件
/etc/rsyslog.d/remote.conf
。取消注释配置文件的
UDP Syslog Server
或TCP Syslog Server
部分中的以下行。为rsyslogd
分配 IP 地址和端口。TCP 示例:
$ModLoad imtcp.so $UDPServerAddress IP1 $InputTCPServerRun PORT2
UDP 示例:
重要:TCP 与 UDP 协议在传统上,系统日志会使用 UDP 协议通过网络来传输日志消息。这种传输方式的开销较少,但可靠性不足。在负载较高的情况下,日志消息可能会丢失。
TCP 协议更可靠,因此应该优先使用它而不是 UDP。
注意:将UDPServerAddress
用于 TCPTCP 示例中的
$UDPServerAddress
配置参数并没有错误。尽管其名称包含 UDP,但它同时用于 TCP 和 UDP。保存文件。
重启动
rsyslog
服务:>
sudo
systemctl restart rsyslog.service
在防火墙中打开相应的端口。对于与 TCP 配合使用的
firewalld
,请在端口 514 上运行:>
sudo
firewall-cmd --add-port 514/tcp --permanent
>
sudo
firewall-cmd --reload
现在,您已配置中心系统日志服务器。接下来,请配置客户端以进行远程日志记录。
3.6.2 设置客户端计算机 #
要配置计算机以将日志远程记录到中心系统日志服务器,请执行以下步骤:
编辑配置文件
/etc/rsyslog.d/remote.conf
。取消注释相应的行(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
保存文件。
重启动
rsyslog
服务:>
sudo
systemctl restart rsyslog.service
校验系统日志转发是否可正常进行:
>
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