3 分析和管理系统日志文件 #
系统日志文件分析是分析系统时最重要的任务之一。事实上,在对系统进行维护或查错时,第一件事就是要查看系统日志文件。SUSE Linux Enterprise Server 会自动详细记录系统上发生的几乎一切事件。自从过渡到 systemd
之后,内核消息以及已在 systemd
中注册的系统服务的消息都将记录在 systemd
日记中(请参见第 17 章 “journalctl
:查询 systemd
日记”)。其他日志文件(主要是系统应用程序的日志文件)将以纯文本格式写入,并可使用编辑器或分页器轻松阅读。还可以使用脚本来分析这些文件。这可让您过滤其内容。
3.1 /var/log/
中的系统日志文件 #
系统日志文件始终位于 /var/log
目录下。以下列表提供了在完成默认安装后 SUSE Linux Enterprise Server 中所有系统日志文件的概述。根据您的安装范围,/var/log
还会包含此处未列出的其他服务和应用程序中的日志文件。下面所述的某些文件和目录以“占位符”表示,仅当安装相应的应用程序时才会使用它们。大多数日志文件仅对 root
用户可见。
apparmor/
AppArmor 日志文件。有关 AppArmor 的详细信息,请参见第 IV 部分 “通过 AppArmor 限制特权”。
audit/
来自审计框架的日志。有关详细信息,请参见第 VI 部分 “Linux 审计框架”。
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
日记的输出)。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 控制中心的
› 下提供的系统日志。
要在文本控制台中查看日志文件,请使用命令 less
或 more
。使用 head
和 tail
可查看日志文件的开头和结尾。要实时查看日志文件的追加项,请使用 tail
-f
。有关如何使用这些工具的信息,请查看它们的手册页。
要在日志文件中搜索字符串或正则表达式,请使用 grep
。awk
可用于分析和重新写入日志文件。
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.conf
添加 /etc/logrotate.d/
的内容。
/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
。使用以下命令获取可查询的所有服务的列表:
tux >
ls /usr/share/logwatch/default.conf/services/ | sed 's/\.conf//g'
logwatch
可自定义程度很高。但通常默认配置便足以满足需求。默认配置文件位于 /usr/share/logwatch/default.conf/
下。切勿更改这些文件,因为下一次更新时会再次重写它们。而自定义配置会放入 /etc/logwatch/conf/
(但您可以使用默认配置文件作为模板)。/usr/share/doc/packages/logwatch/HOWTO-Customize-LogWatch
中提供了有关自定义 logwatch
的详细操作指南。存在以下配置文件:
logwatch.conf
主要配置文件。默认版本带有大量注释。可在命令行重写每个配置选项。
ignore.conf
过滤掉
logwatch
应全局忽略的所有行。services/*.conf
该服务目录包含了可为其生成报告的每个服务的配置文件。
logfiles/*.conf
有关应分析每个服务的哪些日志文件的规范。
3.5 使用 logger
创建系统日志项 #
logger
是用于在系统日志中创建日志项的工具。它提供了 rsyslogd 系统日志模块的外壳命令接口。例如,下面一行命令会在 /var/log/messages
中或直接在日记中(如果未运行日志记录工具)输出其消息:
tux >
logger -t Test "This message comes from $USER"
根据当前用户和主机名,日志将包含如下一行:
Sep 28 13:09:31 venus Test: This message comes from tux