三.分析与存储日志
1.日志架构
1.1系统日志
1.1.1日志来源与作用
操作系统的内核(系统核心组件)和进程(用户空间的应用程序)会记录系统运行时的事件日志;用于故障排除或系统审核。
1.1.2存储位置与查看工具
Linux系统的日志默认集中存放在****/var/log****目录下,该目录包含各类细分日志文件(如记录系统消息的 messages、记录登录认证的 secure 等;
查看工具:
(1)less 命令:支持分页浏览长日志文件,可通过上下键滚动、/关键词 搜索,适合深度分析日志内容。
如:
sudo less /var/log/messages

(2)tail 命令 :常用于查看文件末尾内容,结合参数 -f(如 tail -f /var/log/messages)可实时跟踪日志新增内容,方便监控系统动态。如:
如:
sudo tail -f /var/log/messages

1.2日志协议基础:Syslog
1.2.1概念
Syslog是一套系统日志传输与格式的标准协议,定义了日志的结构 (如时间戳 、主机名、服务名、日志内容)和传输规则。RHEL 的日志系统基于此协议,确保不同组件(内核、服务、进程)的日志能被统一处理。
1.2.2核心组件
1.2.2.1 systemd-journald(日志架构核心)
(1)概念
RHEL 日志系统的 "中枢",负责全量事件收集、结构化存储;
记录:几乎覆盖系统所有事件,包括:
a. 内核事件:如内核模块加载失败;
b. 引导早期输出:系统启动时 grub 引导、初始化进程(systemd)的早期日志;
c. 守护进程的标准输出/错误:比如httpd服务的访问日志(标准输出)、配置错误提示(标准错误)。
(2)存储结构:
将日志存入带有索引的数据库(二进制);路径默认是/var/log/journal;若未配置持久化则临时存于 /run/log/journal。
索引作用:
通过对"服务名、时间戳、优先级、进程 ID"等元数据建立索引,journalctl工具能实现秒级检索。
如:
journalctl -u httpd --since "1 hour ago" -p erro
可快速过滤出"近 1 小时内 httpd 服务的错误级日志"。
(3)存储持久化:
默认行为: 日志临时存于内存类存储(/run/log/journal),系统重启后日志丢失------减少磁盘IO,适合测试环境或对日志长期留存无需求的场景。
修改/etc/systemd/journald.conf文件中的Storage参数可以设置永久保存:
persistent :永久保存在 /var/log/journal 目录中
volatile :临时保存在 /run/log/journal 目录中
auto(默认):如果有 /var/log/journal 目录存在,则永久保存,如果没有则临时保存。
(4) 持久化配置 流程 :
<1>修改/etc/systemd/journald.conf文件
<2>将 Storage=auto 改为 Storage=persistent
<3>重启 systemd-journald 服务后(restart)
<4>日志会持久化到****/var/log/journal****,重启后也能保留。(没有文件则手动创建,并配置正确的权限
手动创建 /var/log/journal 时:

示例:
<1>查看systemd-journald当前日志存储路径

<2>修改内容


<3>重启systemd-journald服务

<4>验证,查看储存路径变化

/var/log/journal:配置持久化后生成的持久化日志存储目录;
/run/log/journal:系统默认的临时日志存储目录。
<5>测试
生成测试日志(重启sshd服务):

查看测试日志:

重启系统(用来验证持久化):

查看日志情况是否在重启后保留:

或者查看持久化目录,验证重启后是否有新日志生成(观察时间戳):

(5)日志的大小限制机制
系统会自动限制日志的大小,防止其无限制增长导致磁盘空间不足。
默认规则是:
a. 日志总大小不能超过其所在文件系统的 10%;
b. 同时,日志不能让文件系统的可用空间低于 15%(即要保证文件系统至少有 15% 的空闲空间)。
如果需要调整这两个阈值(比如修改 10% 或 15% 的数值),可以编辑配置文件 /etc/systemd/journald.conf 来设置。
1.2.2.2 rsyslog服务(读取日志并存储)
(1)概念
rsyslog 是 Linux 系统中负责读取 systemd-journald 日志并按规则分类持久化存储的服务,从 systemd-journald 中读取日志,并按规则分类存储。
(2)数据来源:
从 systemd-journald 的数据库中读取 Syslog 格式的日志(Syslog 是一种通用的日志格式规范,便于跨服务、跨系统解析)。
(3)存储规则:
a. 按配置文件定义存放:
rsyslog 的配置文件(/etc/rsyslog.conf 及 /etc/rsyslog.d/*.conf)可指定日志的存储路径、格式。
b. 按优先级分类:
Syslog 日志优先级从低到高为 debug、info、notice、warning、error、crit、alert、emerg。rsyslog 会根据优先级将日志分拣到不同文件;
如:
把info级别(普通级别)的通用系统消息存到 /var/log/messages;
把error级别(需要关注)的认证错误(如 SSH 登录失败)存到 /var/log/secure。
(4)优先级排序:
|---------------------|------------|-----------------------------|
| 优先级/代码(0-7) | 描述 | 示例 |
| Debug(0) | 调试(最不紧急) | 程序调试信息,如 "函数 X 执行完毕,返回值为 Y" |
| Info(1) | 信息 | "系统磁盘空间剩余 50%""Web 服务已成功启动" |
| Notice(2) | 通知 | "某配置文件已被更新" |
| Warning(3) | 警告 | "磁盘空间剩余不足 20%,请及时清理" |
| Error(4) | 错误 | "SSH 登录认证失败""某服务启动失败" |
| Crit(5) | 严重错误 | "数据库连接池耗尽,无法处理新请求" |
| Alert(6) | 警报 | "系统权限配置异常,可能导致未授权访问" |
| Emerg(7) | 紧急(最严重) | "系统磁盘已满,所有服务即将中断" |
1.3常见日志文件类型
|---------------------------|-----------------------------------------------------|
| 日志文件路径 | 核心用途 |
| /var/log/messages | 系统通用日志 ,记录内核、大部分系统服务的info/notice/warning级事件 |
| /var/log/secure | 安全认证日志 ,记录所有与用户认证相关的事件。 |
| /var/log/maillog | 邮件服务日志 ,记录 Postfix 等邮件服务的发送、接收、转发行为。 |
| /var/log/cron | 定时任务日志 ,记录 crond 服务的执行情况。 |
2.查看syslog日志文件
2.1将事件记录到系统
2.1.1全局配置文件
/etc/rsyslog.conf 是全局配置文件;用于定义 系统级的日志收集、存储、转发规则,包括但不限于:
(1)日志分类规则:
按"设备(如kern内核、auth身份验证)" 和"优先级(如info、error)"对日志进行分类;
(2)存储/转发策略:
指定不同分类的日志要存储到哪个文件(如/var/log/messages)、是否转发到远程日志服务器等;
(3)格式与性能配置:
定义日志的输出格式、磁盘缓存、线程数等全局参数。
如:

其中:
Log all the mail messages in one place.
mail.* -/var/log/maillog:
将所有邮件相关日志集中存储到一个文件(/var/log/maillog)"。
2.1.2个性化配置目录
/etc/rsyslog.d/*.conf是个性化配置文件;其中每个*.conf文件用于定义特定服务或场景的个性化日志规则,作用:
(1)解耦全局与局部配置:
避免rsyslog.conf过于臃肿,方便针对单个服务(如 Nginx、MySQL)或自定义需求(如 "将某类日志转发到第三方工具")单独配置;
(2)灵活扩展:
新服务的日志规则可直接在该目录下新增.conf文件,无需修改全局配置,降低维护风险。
如:
为 Nginx 服务创建/etc/rsyslog.d/nginx.conf,配置其日志存储:


完成后重启rsyslog服务使配置生效:
sudo systemctl restart rsyslog
2.2日志文件轮转
2.2.1概念
对日志文件的"周期性归档、新建与清理" 管理机制,核心目的是防止日志文件无限增长占满磁盘空间,同时保留必要的历史日志。
系统日志(如/var/log/messages、/var/log/nginx/access.log)会持续增长,若不加以管理,最终会占满/var/log所在磁盘的空间,导致系统写入失败、服务异常。
2.2.2logrotate工具
logrotate是 Linux 系统中专门用于管理日志轮转的工具;
工作机制:
(1)重命名归档旧日志:
轮转时,给旧日志文件添加时间戳或序号后缀(例如access.log会被重命名为access.log.20251030或access.log.1);
(2)创建新日志文件:
生成一个空的新access.log,供服务继续写入新日志;
(3)清理最旧日志:
默认保留4次轮转的日志(可配置),超过次数后会删除最旧的归档日志,释放磁盘空间。
运行机制:
logrotate通过系统计划任务(cron) 每天自动运行,根据配置文件定义的 "轮转频率"(如每天、每周、每月)执行操作。
配置文件:
(1)全局配置 :/etc/logrotate.conf
定义系统级 的轮转规则(如默认保留次数、压缩方式等);
(2)服务级配置:/etc/logrotate.d/
目录下的各服务配置文件(如nginx的日志轮转配置在/etc/logrotate.d/nginx),用于定义单个服务 的个性化轮转规则(如 "Nginx 的 access.log 每天轮转一次,保留 7 天")。
格式:

如:

Nginx 的所有.log文件会每天自动轮转,重命名为带日期的压缩文件(如access.log.20251030.gz),同时创建新的access.log;保留最近 7 天的归档日志,超过 7 天的会被自动删除。
2.3syslog条目
日志文件在末尾显示最新的信息,信息记录采用标准格式;
四个核心:
(1)时间戳:记录事件发生的精确时间
(2)发送信息的主机:标识生成日志的服务器主机名
(3)发送信息的程序名称和 PID 编号:关联系统中实际运行的进程
(4)具体信息:描述事件的具体内容,包含行为类型、涉及用户、来源 IP / 端口、协议等关键信息。
如:

解释:
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| 组成部分 | 日志内容对应信息 | 含义分析 |
| 时间戳 | Oct 24 21:56:38 | 事件发生的时间,三条日志为同一时间点。 |
| 发送信息的主机 | workstation | 生成日志的服务器主机名为 workstation。 |
| 程序名称和 PID | polkitd[333] | 程序为 polkitd(系统策略工具守护进程),进程 ID(PID)为 333。 |
| 具体信息 | 1. Loading rules from directory /etc/polkit-1/rules.d 2. Loading rules from directory /usr/share/polkit-1/rules.d 3. Finished loading, compiling and executing 12 rules | 1. 从 /etc/polkit-1/rules.d 目录加载策略规则 2. 从 /usr/share/polkit-1/rules.d 目录加载策略规则 3. 完成 12 条策略规则的加载、编译和执行 |
2.4监控日志
tail -f 文件路径:实时监控
如:

执行该命令后,终端会持续输出 /var/log/secure 的新增日志条目,管理员可以边运行命令,边实时查看日志更新(比如有新的 SSH 登录尝试时,日志会即时显示)。
2.5手动发送Syslog消息( logger命令)
logger是 Linux 系统中用于手动向rsyslog服务发送自定义日志消息的工具;主要用于:
(1)测试rsyslog的日志配置(如分类、存储、转发规则);
(2)模拟日志场景(如调试时手动注入日志,验证流程);
(3)排查日志服务的异常(如验证日志是否能正常接收、存储)。
默认情况下,logger发送的日志消息:
(1)优先级:notice(属于 Syslog 优先级的 "通知级",优先级中等);
(2)设备类型:user(即user.notice,属于用户级设备);
(3)存储逻辑:由rsyslog的全局配置决定(通常会记录到/var/log/messages等通用日志文件)。 除非使用-p选项另选指定的设备
如:

手动向 rsyslog 服务发送一条日志,设备类型为 local15、优先级为 notice、消息内容为 "Log entry on host",常用于测试 rsyslog 的日志接收、分类或存储配置。
3.查找system journal条目
3.1journalctl命令
journalctl 是 Linux 系统中用于查询 systemd-journald 守护进程收集的日志的核心命令。systemd-journald 会将系统、服务、用户进程等的日志以结构化二进制格式存储,而 journalctl 则提供了灵活的查询接口。
journalctl命令用于检索日志信息,建议以root用户执行;
直接执行 journalctl 会默认输出所有日志(按时间倒序,最新的在最后),并通过分页器。

3.2核心过滤选项
(1)按时间过滤
--since:指定起始时间
--until:指定结束时间

(2)按服务/单元过滤
-u <单元名>:查看指定服务(如 sshd、nginx)或系统单元的日志。

(3)按照日志优先级过滤
日志优先级从低到高为:debug(7)、info(6)、notice(5)、warning(4)、err(3)、crit(2)、alert(1)、emerg(0)。 通过 -p <级别> 过滤指定级别及更高级别的日志。

(4)查看最新日志
-n <数量>:显示最后 N 条日志(默认 10 条)
-f:实时跟踪日志(类似 tail -f,退出按 Ctrl+C)

(5)按进程/用户过滤
通过日志的元数据(如进程 ID、用户 ID)过滤:

4.维护准确时间
4.1管理本地时钟和时区
4.1.1概念
保证系统时间准确且及时同步,对 Linux 系统的稳定性、安全性、可审计性至关重要:
(1)日志审计:日志的时间戳需准确,才能精准排查故障、追溯操作行为;
(2)服务依赖:数据库、集群服务(如 Kubernetes)、认证服务(如 LDAP)对时间一致性要求极高,时间偏差会导致同步失败、认证报错;
(3)定时任务:crontab等定时任务需依赖准确时间才能按时执行。
4.1.2时间的同步的实现:NTP协议
时间同步采用NTP(网络时间协议),它通过网络将本地系统时间与公共时间服务器(如pool.ntp.org)同步,确保多设备时间一致。
Linux 系统中常见的 NTP 服务实现有:
chronyd(红帽系系统默认,轻量且适配动态网络);
ntpd(传统 NTP 服务,功能更全但资源消耗略高)。
4.1.3系统时钟信息的管理工具:timedatectl
timedatectl是 systemd系统中管理本地时钟、时区、NTP 同步的核心命令,执行 timedatectl 可查看以下关键信息:
如:

解释:
Local time:本地时间,显示为 Fri 2025-10-24 22:10:22 EDT,表示当前系统的本地时间是 2025 年 10 月 24 日 22:10:22,时区为 EDT(美国东部夏令时)。
Universal time:协调世界时(UTC),显示为 Sat 2025-10-25 02:10:22 UTC,是全球统一的时间标准。
RTC time:硬件时钟(实时时钟,由主板电池供电)的时间,显示为 Sat 2025-10-25 02:10:22。
Time zone:系统时区,显示为 America/New_York (EDT, -0400),即美国纽约时区,EDT 夏令时期间与 UTC 时差为 -4 小时。
System clock synchronized:系统时钟是否与 NTP 服务器同步,yes 表示已成功同步。
NTP service:NTP(网络时间协议)服务状态,active 表示服务正在运行,负责自动同步系统时间。
RTC in local TZ:硬件时钟是否使用本地时区,no 表示硬件时钟使用的是 UTC 时间(而非本地 EDT 时区)。
4.1.4 列出所有可用时区
命令:
timedatectl list-timezones
用于查看系统中所有支持的时区名称,这些时区遵循"地区/城市" 的命名格式(如Asia/Shanghai、Europe/Paris),源自全球标准时区数据库。
如:

可通过管道(如 | grep)筛选目标时区:
如查找上海时:

4.1.5交互式时区选择工具(tzselect)
通过交互式问答引导用户选择合适的时区,过程中会询问大洲、国家、具体区域等信息,最终给出对应的时区配置建议。
如:

解释:
|------------|---------------------------------------------------------|-------------------------------------------------|
| 步骤 | 操作&界面内容 | 含义 |
| 选择大洲 | 输入4,选择Asia(亚洲) | 第一步筛选时区的地理范围 |
| 选择国家 | 输入10,选China(中国) | 缩小时区的国家范围 |
| 选择具体时区 | 输 1,选择Beijing Time(北京时间) | 确定国内的细分时区(中国主要使用北京时间) |
| 确认配置 | 系统提示将使用TZ='Asia/Shanghai',并展示本地时间和 UTC 时间;输入1(对应 Yes)确认 | Asia/Shanghai是 Linux 系统中 "北京时间" 的标准时区标识,确认后完成选择 |
完成上述选择后,出现对 tzselect 时区选择结果的永久生效配置说明(下图):

解释:
(1)个人环境永久生效时区的方法
要让Asia/Shanghai 时区对当前用户永久生效,需执行以下操作:
在用户主目录的 .profile 文件中添加一行:TZ='Asia/Shanghai'; export TZ;
执行 "登出系统 → 重新登录" 的操作,使配置生效。
(2)脚本化使用时区值的指引
若需在 Shell脚本中使用 tzselect 选择的时区,可直接引用输出的标准值 Asia/Shanghai,例如在脚本中通过变量调用或直接写入配置。
4.1.6设置时区
命令格式:
timedatectl set-timezone 时区/城市;
用于指定系统的时区,时区名称需从系统支持的时区列表中选择(可通过timedatectl list-timezones查看)。
示例:
timedatectl set-timezone Asia/Shanghai
原来时区:America/New_York

修改时区:(输入当前用户密码)

显示修改后时区:Asia/Shanghai

4.1.7设置时间
命令格式:
timedatectl set-time 具体时间
在需要临时调整系统时间(或无网络 NTP 同步时),手动指定时间。
注:
系统启用了自动时间同步(NTP),因此无法手动设置时间(自动同步会覆盖手动设置的时间)。
示例:
当"System clock synchronized : yes"时

禁用自动时间同步(NTP):timedatectl set-ntp false

验证是否关闭NTP:inactive(已关闭)

再次设置时间:timedatectl set-time 20:20:00,完成后查看(timedatectl),发现成功(Local time)

4.2配置和监控chronyd
4.2.1 chronyd 服务的核心作用
chronyd 是基于 NTP 协议的时间同步服务,主要功能:
(1)网络正常时:与配置的 NTP 服务器同步,确保本地硬件时钟(RTC)准确;
(2)无网络时:计算 RTC 的 "时钟漂移"(时间偏差),并将其记录在****/etc/chrony.conf****配置文件的 driftfile 变量指定的文件中,保障离线时时间的相对准确性。
4.2.2配置文件关键配置
通过"sudo vim etc/chrony.conf"修改配置文件;
(1)NTP服务器源配置:
命令:
server 172.25.254.254 iburst
指定要同步的 NTP 服务器;

(2)时钟漂移率记录(时间偏差)
命令:
driftfile /var/lib/chrony/drift;
记录系统时钟的 "漂移率"(即时钟走快/走慢的速率);
注:
当网络不可用时,chronyd会通过该文件的漂移率计算时间,保障离线时时间的相对准确性。

修改完配置文件后,需要重启chronyd****服务使配置生效。
4.2.3同步状态监控
命令:
chronyc sources -v;
查看时钟同步的详细状态,输出关键字段解读:
如:
