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)。NetworkManagerNetworkManager 日志文件。
news/来自新闻服务器的日志消息。
chrony/来自网络时间协议守护程序 (
chrony) 的日志。pk_backend_zypp*PackageKit(使用
libzypp后端)日志文件。samba/来自 Samba、Windows SMB/CIFS 文件服务器的日志文件。
warn所有系统警告和错误的日志。出现问题时,应首先查看此位置(以及
systemd日志的输出)。wtmp所有登录/注销活动和远程连接的数据库。可使用命令
last进行查看。有关详细信息,请参见man 1 last。Xorg.0.logX.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