Linux 操作系统结构与日志体系
Linux 操作系统结构
[用户空间]
────────────────────────────────────────────────
应用程序:MySQL / Nginx / Mosquitto / Python
系统组件: systemd / sshd / bash / 系统库 / 工具
────────────────────────────────────────────────
│
│ 系统调用
↓ [内核空间]
────────────────────────────────────────────────
Kernel
进程 / 内存 / VFS / 网络 / 驱动
│
↓ [硬件资源]
────────────────────────────────────────────────
硬件: CPU / 内存 / 磁盘 / 网卡 等
操作系统可以理解为就是介于计算机硬件 和 应用程序之间的一种基础系统软件,两个作用:
-
管理计算机资源
-
屏蔽底层硬件复杂性,为应用程序提供统一接口和运行环境
操作系统的简化模型:
-
操作系统的核心是内核,内核负责 CPU 调度、内存管理、进程管理、文件系统、网络协议栈、设备驱动 等核心功能,并提供系统调用接口。
-
在内核之上还有系统库、系统服务、工具、接口等,是利用内核提供的能力实现更高层的系统功能。
Linux 日志体系结构
日志产生者
│
┌──────────────┴────────────────────┐
│ │
Kernel 用户空间程序
│ │
│ │
↓ │
Kernel Ring Buffer │
│ │ │
│ │ │
↓ └───────────┌──────────────────┐
dmesg ↓ ↓
systemd-journald 自己直接写日志文件
│
┌────────────┴─────────────┐
│ │
↓ ↓
journal日志存储 转发日志消息(将日志消息转发给 rsyslog)
│ │
↓ ↓
journalctl rsyslog
│
┌──────────┼─────────┐
↓ ↓ ↓
日志文件 远程日志 其他处理
日志本质上就是某段程序代码主动记录出来的信息,是程序运行过程中,主动记录相关信息,让人知道某个时刻发生了什么。
日志可以分为 内核产生的日志 和 用户空间程序产生的日志 两大类:
-
因为内核本质也是程序代码,内核程序代码主动打印的日志,在 Linux 中可以通过 dmesg 或 journalctl -k 查看。
-
用户空间程序产生的日志,一种是直接写入对应文件存储,另一种是通过日志系统来统一管理。
很多现代 Linux 发行版会同时使用 systemd-journald 和 rsyslog
-
现在操作系统使用 systemd 做为 PID 为1 的进程,systemd 体系引入了 systemd-journald 作为日志收集组件;
-
但是很多 Linux 发行版仍然同时部署 rsyslog,用于传统文本日志、日志分类和远程日志转发等功能。
查看内核日志有两种方式:
-
通过 dmesg 工具:直接从 Kernel Ring Buffer(内核环形缓冲区) 中读取日志信息,重启会被清空,所以只能看到机器开机到当前的日志信息,并且 Ring Buffer 容量有限,较早的日志可能被后续日志覆盖,不能保证看到当前启动以来的全部内核日志。
-
通过 journalctl -k:systemd-journald 收集日志,并使用自己的二进制 journal 格式进行存储,通过 -k 看到的就是内核日志。
浙公网安备 33010602011771号