1. 日志文件
日志文件是记录系统运行状况的重要工具,它们包含了来自内核、服务以及应用程序的各种信息。这些信息对于系统管理员来说至关重要,尤其是在进行故障排除时。例如,当系统尝试加载内核驱动程序失败,或者检测到未授权的登录尝试时,日志文件可以提供关键的线索。
2. journald
Journald 是 systemd 的一个核心组件,专门负责日志文件的管理和维护。它通过收集来自内核、用户进程、标准输出和系统服务的错误输出,甚至是通过原生 API 接收的日志信息,创建并维护这些日志文件。这些日志文件不仅被结构化和索引化,还以二进制形式存储,从而提供了极快的访问速度。
2.1 如何查看日志文件
要查看这些日志文件,你可以使用 journalctl 工具。这个命令行工具允许你以 root 用户身份访问日志数据。例如:
$ journalctl
如果你只想查看最近的日志条目,可以使用 -n 选项,后面跟上你希望显示的行数。默认情况下,它会显示最近的十条日志:
$ journalctl -n Number
2.2 过滤消息
过滤日志消息
除了查看全部日志外,你还可以按优先级或时间过滤日志。例如,如果你想查看错误级别或更高级别的日志条目,可以使用 -p err 选项:
$ journalctl -p err
如果你只想查看当前引导过程中的日志条目,可以使用 -b 选项:
$ journalctl -b
更进一步,你可以使用 --since 和 --until 选项来过滤特定时间范围内的日志消息。例如:
$ journalctl -p warning --since="2013-3-16 23:59:59"
3. rsyslog:日志管理的利器
rsyslog 是一个强大的系统日志工具,它不仅可以过滤和管理日志,还可以将日志存储在 /var/log 目录中。每条日志信息都包含两个关键部分:Facilities(子系统)和 Priority(优先级)。
Facilities 指的是提供日志信息的子系统,例如 auth、daemon 或 kern。
Priority 则表示日志条目的严重程度,从 0(紧急)到 7(调试)递减。
4. 持久性存储:让日志更持久
默认情况下,日志文件仅存储在内存中或 /var/log/journal/ 目录的小型环缓冲区中,这意味着它们在系统重启后会丢失。为了使日志文件在重启后依然可用,你可以启用持久日志记录功能。这会将日志文件存储在 /var/log/journal/ 中。
4.1 将自动保存注销
打开 /etc/systemd/journald.conf
把 Storage=auto 这一行注释给取消
4.2 手动创建日志目录
首先,你需要为日志文件创建一个存储位置:
$ mkdir -p /var/log/journal/
4.3 重启 journald 服务
接下来,重启 journald 服务以应用这些更改:
$ systemctl restart systemd-journald
5. 远程日志转发:集中管理日志
rsyslog 服务不仅可以在本地管理日志,还可以将日志转发到远程日志服务器,从而实现集中管理。这在多系统环境中特别有用。
5.1 安装 rsyslog
首先,你需要在系统上安装 rsyslog:
$ yum install rsyslog
5.2 配置日志服务器
在日志服务器上,你需要编辑 /etc/rsyslog.conf 文件,取消 TCP 日志接收的相关注释,并配置日志存储路径:
$ vi /etc/rsyslog.conf
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
编辑要记录的日志,示例配置如下:
mail.* /var/log/maillog
*.emerg :omusrmsg:*
auth;syslog.crit;error .
# log all
$template LogLocale,"/var/log/hosts/%HOSTNAME%.log"
*.* -?LogLocale
配置完成后,重启 rsyslog 服务:
$ systemctl restart rsyslog
$ systemctl status rsyslog
5.3 配置日志客户端
在日志客户端上,编辑 /etc/rsyslog.conf 文件,添加以下内容以将日志转发到远程日志服务器。
示例配置如下:
$ vi /etc/rsyslog.conf
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@remote-host:514
# ### end of the forwarding rule ###
配置完成后,重启 rsyslog 服务:
$ systemctl restart rsyslog
$ systemctl status rsyslog
通过这种方式,你可以集中管理和分析来自多个系统的日志文件,从而更有效地监控和维护你的系统。
更多内容请参见本系列其他文章
<<Linux诊断和故障排除系列(一) -- 修复启动分区>>
<<Linux诊断和故障排除系列(二) -- 修复内核服务>>
<<Linux诊断和故障排除系列(三) -- 重置root密码>>
<<Linux诊断和故障排除系列(四) -- 修复文件系统>>
<<Linux诊断和故障排除系列(五) -- 修复iSCSI>>
<<Linux诊断和故障排除系列(六) -- 修复软件包及管理器>>
<<Linux诊断和故障排除系列(七) -- 应用程序诊断>>
<<Linux诊断和故障排除系列(八) -- 网络问题诊断>>
<<Linux诊断和故障排除系列(九) -- 身份验证和授权问题诊断>>
<<Linux诊断和故障排除系列(十) -- 硬件问题日志>>
<<Linux诊断和故障排除系列(十一) -- dump设置和分析>>
<<Linux诊断和故障排除系列(十二) -- 日志持久化和转发>>
<<Linux诊断和故障排除系列(十三) -- 官方支持数据sos_report及其分析可视化软件>>
本文内容为原创,如需转载,请务必注明原文出处。
更多相关内容,欢迎访问我的个人网站:hongxu.wang。
我们还提供免费的技术支持,欢迎与我们联系。