第三章
一,描述系统日志架构
1,系统日志记录
(1)日志记录的作用
操作系统内核和其他程序(进程)会记录一些 系统事件,这些日志有助于系统审核 和问题排查
(2)日志服务:具体来说,系统有两个重要的日志服务
<1>systemd-journald:这是一个 核心日志服务,负责收集和处理来自不同来源的日志。
<2>rsyslog:这是一个 日志传输和存储服务,负责处理和转发从 systemd-journald 收到的日志消息
(3)systemd-journald 服务
<1>systemd-journald 是核心日志服务,收集的日志来自多个来源
系统内核:操作系统内核产生的日志。
启动过程:操作系统启动时的输出信息,
守护进程的输出:系统后台进程(守护进程)的标准输出和错误输出。
系统日志事件:各种系统事件的日志。
<2>日志的处理
格式化:systemd-journald 会把收到的日志按照标准格式进行处理。
存储:这些日志会写入一个结构化的日志数据库,默认情况下这些日志会 丢失(即系统重启后不保留)
(4)rsyslog 服务
<1>rsyslog 服务从 systemd-journald 获取日志,并将其存储在文件中。rsyslog 会按优先级和程序类型将日志进行分类和排序,然后存储到不同的日志文件里。
<2>存储位置:这些日志文件通常存储在 /var/log目录下,但它们在系统重启后 不会保留。
(5)/var/log 目录
/var/1og目录下存放了很多日志文件,其中不仅仅是来自syslog的日志,还包括系统和服务的其他日志文件。不同的文件记录不同的服务信息。
二,查看syslog文件
1,将事件记录到系统
(1)syslog协议在系统中的作用
<1>syslog 协议:它是一个标准化的协议,用于记录和传输日志信息。
<2>操作系统和应用程序会使用这个协议将它们的事件(例如错误、警告信息等)记录下来
<3>设备(子系统):每条日志消息都会标明是哪部分的程序或设备(比如操作系统网络服务、硬盘等)产生的。这有助于了解日志来源。
<4>优先级(消息严重性):每条日志消息还有一个优先级,表示该消息的严重性。
<5>标准的syslog设备概述表格
<6>syslog优先级概述表格
(2)rsyslog 服务处理日志消息
<1>rsyslog 服务的配置
rsyslog 服务通过读取配置文件(比如/etc/rsyslog.conf 和/etc/rsyslog.d/目录下的.conf 文件)来定义如何处理日志消息
软件包安装时,可以在 /etc/rsyslog.d/目录中添加规则文件,来对日志处理进行配置。
<2>日志规则的工作原理
每一条规则会指定设备(日志的来源)和优先级(日志的严重程度)
每一条规则的左侧是设备和优先级,右侧是日志存储的目标位置(
**星号(*)**是通配符,表示可以匹配所有的设备或优先级。
<3>
<4>日志的特殊处理
如果某些日志设备的优先级是none,那就表示这些设备的消息不会存储在指定的日志文件里。
除了保存日志到文件外,你还可以让日志显示到所有已登录用户的终端上。比(紧急事件),这些信息会显示在所有用户的如,如果日志的优先级是 emerg屏幕上。
2,日志文件轮转
(1)日志文件通常会随着系统运行而越来越大,特别是像/var/log/messages 这样的日志文件,它们可能包含很多信息。为了防止这些日志文件占用太多空间,我们需要定期轮转这些日志文件,意思就是对日志文件进行归档、重命名,并创建新的日志文件来继续记录。
(2)如何进行轮转
<1>轮转时重命名文件:当日志文件被轮转时,它会被重命名,通常是加上一个日期扩展名,表示这个日志文件是在某一天被归档的。例如,/var/log/messages 文件在2022年3月20 日轮转时,它会被重命名为/var/log/messages-20220320
<2>创建新的日志文件:轮转后,系统会创建一个新的空日志文件,让日志继续记录下去。写入日志的服务会自动知道去写新的日志文件,而不是继续写到旧的日志文件中。
<3>删除旧日志文件:经过若干次轮转后(通常是几周),系统会删除最旧的日志文件来释放磁盘空间,确保磁盘不会被日志文件填满。
(3)日志轮转的调度
<1>调度任务:每天,系统会运行一个名为1ogrotate的命令,检查是否有日志文件需要轮转。
<2>轮转频率:大多数日志文件通常是每周轮转一次。如果日志文件变得特别大,也可以在达到某个大小时就进行轮转。
3, 日志消息的格式
/var/log/secure日志文件中的日志消息
4,监控日志事件
(1)tail -f /path/to/file
<1>tail命令用于查看文件的最后几行(默认显示最后 10 行)
<2>加上-f 选项后,命令会持续输出新写入到文件中的内容,因此可以实时查看文件的变化。这对于监控日志文件非常有用
(2)示例中的命 令
<1>假设我们要监控:/var/log/secure 这个文件
在第一个终端运行
tail -f /var/log/secure
终端就会开始显示 /var/log/secure 文件的最后 10 行内容,并实时显示新加入的内容
在第二个终端中,使用 ssh 命令尝试从一台主机登录到另一台主机
ssh root@hosta
如果成功登录,系统会记录事件到 /var/log/secure 文件中
5,手动发送 Syslog 消息
(1)logger 命令用于向系统日志发送消息
<1>使用它向rsyslog服务发送信息,rsyslog会根据配置将这些信息记录到相应的日志文件中。
<2>默认情况下,会发送一条优先级为 notice 的消息,消息的设备是 userlogger类型(即 user.notice )。这意味着消息会被发送到所有记录用户消息的日志文件中
<3>自定义消息的优先级或设备,可以使用-p选项
<4>示例
三,查看系统日志条目
1,在系统日志中查找事件
(1)日志存储方式
systemd-journald 服务将日志数据以结构化的二进制格式存储在一个特殊的文件中,这个文件叫做"日志”。这些日志数据不仅包括事件的原始消息,还包含一些额外的信息,比如消息的优先级(即事件的严重程度),以及发送消息的设备等信息。
(2)存储位置
系统日志默认保存在 /run/log 目录下,这个目录是一个基于内存的目录。也就是说,当系统关机时,这些日志会丢失,因为它们存储在内存中。如果你希望日志在系统重启后能保留,可以将日志存储位置改为其他持久存储的位置
(3)查看日志
<1>查看系统日志,可以使用 journalct1命令。你可以使用它来查看所有日志消息,也可以通过特定的选项来查找某个特定的事件或信息
<2>root用户,可以查看所有日志内容;普通用户使用 journalct1时,系统可能会限制他们查看某些敏感的日志内容
(4)命令
<1>journalctl:会突出显示重要的日志消息
命令格式:journalctl (-选项)
优先级为 notice 或warning的消息显示为粗体文本
而优先级为 error或以上的消息则显示为红色文本
选项:
-n选项显示最后 10个日志条目 参数可以更改
-f选项输出系统日志的最后十行,并在日志附加新的日志条目时继续输出它们
-p选项显示指定优先级(按名称或编号)或以上的日志条目
journalctl命令按优先级升序方式,处理 debug、info、notice、warning、err、crit、alert和emerg 优先级
-u选项和单元名称来显示指定 systemd 单元的消息
--since和--until选项输出限制为特定的时间范围
这两个选项都采用格式为"Y-MMDDhh:mm:ss"的时间参数(必须使用双引号,以保留选项中的空格)
- overbose 选项会让journalct1以详细格式展示日志信息。
此格式会包括额外的信息,如时间戳、日志的优先级、设备信息、消息内容以及更多的元数据
表格
组合型
四,保留系统日志
1,系统日志存储
(1)systemd-journald 服务存储和管理日志文件
<1>日志存储位置
默认情况下,系统会把日志存储在 /run/1og目录下,这个目录存储的日志是易失性的,意味着系统重启后这些日志会丢失
如果你想让日志在系统重启后仍然保留,可以修改配置文件/etc/systemd/journald.conf 来将日志存储方式设置为 持久
<2>Storage 参数
persistent:将日志存储在 /var/log/journal 目录中,这样系统重启后日志仍然保留。如果这个目录不存在,系统会自动创建它。
volatile:将日志存储在临时的 /run/log/journal 目录中,这个目录存储的日志在系统重启后会丢失。
auto:如果 /var/log/journal 目录存在,日志会存储在这个目录里;如果不存在,则使用临时存储。
none :不存储任何日志,只能转发日志。
<3>日志轮转与大小限制
即使设置了持久存储,日志也不会一直保留。系统会定期轮转日志(每月)并且会限制日志文件的大小。日志文件的大小不得超过文件系统的 10%,并且在日志存储目录的可用空间低于 15% 时,系统会停止写入新的日志。
这些设置可以在配置文件 /etc/systemd/journald.conf 中调整。
<4>查询日志存储大小
(2)配置持久系统日志
配置 systemd-journald 服务,以在重启后持久保留系统日志
<1>创建/var/log/journal目录
<2>将/etc/systemd/journald.conf 文件中的Storage参数设置为 persistent 值
<3>重新启动 systemd-journald 服务,以应用配置更改。
该服务将在 /var/log/journal目录中创建子目录
/var/log/journal目录中的子目录名称较长且包含十六进制字符
二进制文件存储带有索引的结构化日志条目
<4>journalctl命令-b(第几次重启)选项将输出限制为特定的系统启动
使用journalctl命令 -b选项及一个负数,以指示输出中要包含多少次较早的系统启动
<5>使用--list-boots选项来列出 journalctl命令识别的系统启动事件