linux系统学习(14.日志管理)
目录
📌 1. Ubuntu 日志系统的两大组成
📌 2. journald 特点
📌 3. rsyslog 的角色
📌 4. journald 与 rsyslog 的关系
📌 5. 日志优先级
📌 6. 日志持久化
✅ 总结
📌 journald 的存储策略
📌 1. Ubuntu 日志系统的两大组成
在 Ubuntu 20.04 里,日志主要有两套机制:
-
systemd-journald(核心,默认启用)
-
属于 systemd 的一部分,负责收集所有系统日志(内核、服务、用户进程的 stdout/stderr)。
-
日志默认存放在内存(/run/log/journal)或者
/var/log/journal/
(如果开启持久化)。 -
可以用
journalctl
命令查看。
-
-
rsyslog(兼容 Syslog 的传统日志守护进程,Ubuntu 20.04 默认仍安装)
-
会从 journald 或应用直接收集日志,写入
/var/log/*.log
文件。 -
比如
/var/log/syslog
、/var/log/auth.log
、/var/log/kern.log
等。 -
它主要是为了兼容老习惯:很多管理员还是习惯直接
cat /var/log/syslog
。
-
👉 简单理解:
-
journald:日志的“总入口”
-
rsyslog:把日志分门别类写入传统文件
📌 2. journald 特点
-
统一收集:内核日志 (dmesg)、systemd 服务日志、用户应用的标准输出/错误,都会被收集。
-
结构化存储:不仅存文本,还存 metadata(时间戳、PID、UID、服务名、SYSLOG_IDENTIFIER 等)。
-
二进制格式:日志存储在二进制文件里,用
journalctl
来查看。 -
支持过滤:可以按服务、时间、优先级、PID 来查。
常用命令:
# 查看所有日志 journalctl
# 查看内核日志 journalctl -k
# 查看某个服务 journalctl -u ssh
# 实时跟踪日志(类似 tail -f) journalctl -f
# 查看今天的日志 journalctl --since today
# 查看错误级别以上的日志 journalctl -p err
📌 3. rsyslog 的角色
-
配置文件在
/etc/rsyslog.conf
和/etc/rsyslog.d/*.conf
-
默认规则会把不同 facility 的日志写入不同文件:
常见日志文件:
日志文件 | 内容 |
---|---|
/var/log/syslog | 系统通用日志,几乎所有服务的消息 |
/var/log/auth.log | 认证与安全相关(sudo、ssh 登录等) |
/var/log/kern.log | 内核日志 |
/var/log/dpkg.log | 软件安装/卸载信息 |
/var/log/apt/ | apt 包管理相关日志 |
/var/log/Xorg.0.log | X11 图形界面日志 |
/var/log/boot.log | 系统启动信息 |
/var/log/faillog | 登录失败信息 |
/var/log/wtmp | 登录/登出历史(last 命令查看) |
/var/log/btmp | 登录失败历史(lastb 命令查看) |
📌 4. journald 与 rsyslog 的关系
-
journald 启动 → 收集所有日志。
-
rsyslog 从 journald 读日志(/run/systemd/journal/syslog),再写入传统
/var/log/xxx
文件。 -
这样既有新式的结构化日志(journalctl),也保留了老的文件日志方式。
👉 如果你卸载 rsyslog,那么 /var/log/syslog
等文件不会再更新,但你仍然可以用 journalctl
查看日志。
📌 5. 日志优先级
systemd/journald 使用 Syslog 兼容的优先级(0-7):
数字 | 名称 | 说明 |
---|---|---|
0 | emerg | 紧急,系统不可用 |
1 | alert | 必须立即修复 |
2 | crit | 严重错误 |
3 | err | 错误 |
4 | warning | 警告 |
5 | notice | 正常但值得注意 |
6 | info | 一般信息 |
7 | debug | 调试信息 |
示例:
journalctl -p err # 查看错误及以上日志
📌 6. 日志持久化
默认 journald 只保存在 /run/log/journal
(内存里,重启丢失)。
如果你想让日志重启后还在:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
这样日志会写入 /var/log/journal/
,不会随重启丢失。
✅ 总结
-
journald:systemd 自带,收集全部日志,用
journalctl
查看。 -
rsyslog:把日志写入
/var/log/*.log
文件,兼容传统方式。 -
关系:journald 是入口,rsyslog 是输出。
-
查询方式:
-
新方式 →
journalctl
(强大、可过滤) -
旧方式 → 查看
/var/log/
下的文件
-
📌 journald 的存储策略
配置文件 /etc/systemd/journald.conf
里有一行:
Storage=auto
在 auto 模式下,systemd-journald 会做判断:
-
如果目录
/var/log/journal/
存在
→ 认为你想要 持久化,日志全部写入这里。 -
如果目录
/var/log/journal/
不存在
→ 就退回到内存目录/run/log/journal/
,重启后日志会丢失。