RH134学习进程——三.分析与存储日志

三.分析与存储日志

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;

查看时钟同步的详细状态,输出关键字段解读:

如:

相关推荐
Ghost Face...2 小时前
SoC启动流程详解:从Bootrom到多核负载均衡
运维·负载均衡
篱笆院的狗2 小时前
yum install 发生 Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64
linux·运维·centos
磊磊cpp2 小时前
Ubuntu 22.04 手动安装 XRDP(RDP 远程桌面)教程
linux·运维·ubuntu
2401_865854882 小时前
云服务器有哪些支持win10的
运维·服务器
dongpengli2 小时前
2026年iPaas系统集成平台综合分析及选型参考
大数据·运维·人工智能·自动化办公·ipaas·企业系统集成
FeelTouch Labs2 小时前
云计算数据中心架构的五大核心模块
服务器·架构·云计算
有谁看见我的剑了?2 小时前
在Linux和Windows上查看 块存储的WWN号
运维·服务器
定偶2 小时前
Ubuntu 20.04 网络与软件源问题
网络·ubuntu·php·系统优化
一路往蓝-Anbo2 小时前
【第48期】:嵌入式工程师的自我修养与进阶之路
开发语言·网络·stm32·单片机·嵌入式硬件