系统日志文件分析是在分析系统时最重要的任务之一。实际上,查看系统日志文件应该是维护或故障排除系统时首先要做的事情。openSUSE Leap 会自动详细记录系统中几乎所有发生的事情。自从转向 systemd 之后,内核消息和使用 systemd 注册的系统服务的消息都会记录在 systemd journal 中(请参阅 “参考”手册,第 11 章“journalctl:查询 systemd journal”)。其他日志文件(主要是系统应用程序的日志文件)以纯文本形式写入,可以使用编辑器或分页器轻松读取。也可以使用脚本解析它们。这允许您过滤其内容。
系统日志文件始终位于 /var/log 目录中。以下列表概述了默认安装后 openSUSE Leap 中的所有系统日志文件。根据您的安装范围,/var/log 还包含来自此处未列出的其他服务和应用程序的日志文件。下面描述的一些文件和目录是 “占位符”,仅在安装相应的应用程序时使用。大多数日志文件仅对用户 root 可见。
apparmor/
AppArmor 日志文件。有关 AppArmor 的更多信息,请参阅 “安全与加固指南”手册。
audit/
来自审核框架的日志。有关详细信息,请参阅 “安全与加固指南”手册。
ConsoleKit/
ConsoleKit 守护程序的日志(用于跟踪用户登录方式以及他们如何与计算机交互)。
cups/
通用 Unix 打印系统 (cups) 的访问和错误日志。
firewall
防火墙日志。
gdm/
GNOME 显示管理器的日志文件。
krb5/
Kerberos 网络身份验证系统的日志文件。
lastlog
包含每个用户上次登录信息的数据库。使用命令 lastlog 查看。有关更多信息,请参阅 man 8 lastlog。
localmessages
某些启动脚本的日志消息,例如 DHCP 客户端的日志。
mail*
邮件服务器 (postfix、sendmail) 日志。
messages
这是所有内核和系统日志消息的默认位置,如果出现问题,应该首先查看的地方(以及 /var/log/warn)。
NetworkManager
NetworkManager 日志文件。
news/
新闻服务器的日志消息。
chrony/
网络时间协议守护程序 (chrony) 的日志。
pk_backend_zypp*
PackageKit(使用 libzypp 后端)日志文件。
samba/
Samba 的日志文件,即 Windows SMB/CIFS 文件服务器。
warn
所有系统警告和错误的日志。如果出现问题,应该首先查看此位置(以及 systemd journal 的输出)。
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 会话,则 X.Org 日志文件才会在 /var/log/ 目录中可用。如果以任何其他用户身份启动 X.Org 会话,则可以在 ~/.local/share/xorg/ 目录中找到日志文件。
YaST2/
所有 YaST 日志文件。
zypp/
libzypp 日志文件。请参阅这些文件以获取软件包安装历史记录。
zypper.log
命令行安装程序 zypper 的日志。
要查看日志文件,可以使用任何文本编辑器。YaST 还有一个简单的模块,用于在 YaST 控制中心中的 › 下查看系统日志。
要在文本控制台中查看日志文件,请使用命令 less 或 more。使用 head 和 tail 查看日志文件的开头或结尾。要实时查看附加到日志文件的条目,请使用 tail -f。有关如何使用这些工具的信息,请参阅其手册页。
要搜索日志文件中的字符串或正则表达式,请使用 grep。awk 对于解析和重写日志文件很有用。
/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* 中指定的文件模式和所有权。如果您修改这些设置,请确保不会产生冲突。
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 的详细 HOWTO 可在 /usr/share/doc/packages/logwatch/HOWTO-Customize-LogWatch 中找到。存在以下配置文件
logwatch.conf
主配置文件。默认版本已进行了广泛的注释。每个配置选项都可以在命令行中覆盖。
ignore.conf
全局忽略 logwatch 的所有行的过滤器。
services/*.conf
服务目录包含用于每个可以生成报告的服务配置文件的文件。
logfiles/*.conf
指定为每个服务解析哪些日志文件的规范。
系统守护程序、cron 作业、systemd 定时器和其他应用程序可以生成消息并将其发送到系统的 root 用户。默认情况下,每个用户帐户都拥有本地邮箱,并在登录时收到新邮件消息的通知。
这些消息可能包含需要系统管理员快速响应的安全相关报告和事件。为了及时收到这些消息的通知,强烈建议将这些邮件转发到定期检查的专用远程电子邮件帐户。
root 用户的邮件转发 #要转发 root 用户的邮件,请执行以下步骤
安装 yast2-mail 包
#zypper in yast2-mail
运行交互式 YaST 邮件配置
#yast mail
选择 作为 ,然后选择 。
输入 的地址。如有必要,配置 。强烈建议 以防止潜在的敏感系统数据通过网络以未加密的形式发送。选择 。
输入要 的电子邮件地址,并 配置。
不要 启用 ,否则本地机器将充当邮件中继。
发送消息以测试邮件转发是否正常工作
>mail rootsubject: test test .
使用 mailq 命令验证是否已发送测试消息。如果成功,队列应为空。应在之前配置的专用邮件地址中收到该消息。
根据管理的机器数量和需要通知系统事件的人数,可以建立不同的电子邮件地址模型
将来自不同系统的消息收集到仅由一个人访问的电子邮件帐户中。
将来自不同系统的消息收集到可以由所有相关人员访问的组电子邮件帐户(别名或邮件列表)中。
为每个系统创建单独的电子邮件帐户。
管理员定期检查相关电子邮件帐户至关重要。为了便于此工作并识别重要事件,请避免发送不必要的信息。配置应用程序仅发送相关信息。
可以将系统日志数据从各个系统转发到网络上的中央 syslog 服务器。这允许管理员获得所有主机上事件的概览,并防止攻击者成功接管系统后篡改系统日志以掩盖其踪迹。
设置中央 syslog 服务器包括两个部分。首先配置中央日志服务器,然后配置客户端进行远程日志记录。
rsyslog 服务器 #要设置中央 syslog 服务器,请执行以下步骤
编辑配置文件 /etc/rsyslog.d/remote.conf。
取消注释配置文件中 UDP Syslog 服务器 或 TCP Syslog 服务器 部分中的以下行。为 rsyslogd 分配一个 IP 地址和端口。
TCP 示例
$ModLoad imtcp.so $UDPServerAddress IP1 $InputTCPServerRun PORT2
UDP 示例
传统上,syslog 使用 UDP 协议通过网络传输日志消息。这涉及较少的开销,但缺乏可靠性。在高负载下,日志消息可能会丢失。
TCP 协议更可靠,应优先于 UDP。
UDPServerAddress在 TCP 示例中,配置参数 $UDPServerAddress 并不报错。尽管其名称如此,但它同时用于 TCP 和 UDP。
保存文件。
重启 rsyslog 服务
>sudosystemctl restart rsyslog.service
在防火墙中打开相应的端口。对于使用 TCP 端口 514 的 firewalld,运行
>sudofirewall-cmd --add-port 514/tcp --permanent>sudofirewall-cmd --reload
现在您已经配置了中央 syslog 服务器。接下来,配置客户端进行远程日志记录。
要配置机器进行远程日志记录到中央 syslog 服务器,请执行以下步骤
编辑配置文件 /etc/rsyslog.d/remote.conf。
取消注释适当的行(TCP 或 UDP),并将 remote-host 替换为在 第 3.6.1 节,“设置中央 syslog 服务器” 中设置的中央 syslog 服务器的地址。
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 服务
>sudosystemctl restart rsyslog.service
验证 syslog 转发的正常功能
>logger "hello world"
日志消息 hello world 现在应该出现在中央 syslog 服务器上。
现在您已经配置了一个系统进行远程日志记录到您的中央 syslog 服务器。对所有应进行远程日志记录的系统重复此过程。
此基本设置不包括加密,仅适用于受信任的内部网络。强烈建议使用 TLS 加密,但需要证书基础设施。
在此配置中,来自远程主机的所有消息在中央 syslog 服务器上都受到相同的对待。考虑按远程主机或按消息类别将消息过滤到单独的文件中。
有关加密、过滤和其他高级主题的更多信息,请参阅 RSyslog 文档,网址为 https://www.rsyslog.com/doc/master/index.html#manual。