Syslog、journald、rsyslog
一、核心概念(强化版)
| 名称 | 核心定位 | 核心特征 |
|---|---|---|
| Syslog | 日志标准协议 | 仅定义格式+传输规则,无实际进程 |
| journald | 系统日志统一收集器 | 二进制、结构化、依赖systemd |
| rsyslog | 日志处理/分发引擎 | 文本化、分类过滤、跨节点转发 |
二、工作流程(可视化+关键补充)
stdout/syslog API
二进制存储
/run/systemd/journal/syslog socket
分类过滤
分类过滤
可选
应用/内核/服务
journald
run/var/log/journal
rsyslog
var/log/messages
var/log/secure
远程日志服务器
关键补充:
- journald 是第一入口:系统所有日志(包括内核、服务、应用)先过 journald,无遗漏;
- rsyslog 是加工出口:仅处理 journald 转发的日志,专注"分类、持久化、转发";
- 二者协同:默认情况下 journald 负责"存",rsyslog 负责"用"(文本化便于查阅/分析)。
三、核心操作命令(背诵级)
1. journald 操作(journalctl)
| 命令 | 作用 | 备注 |
|---|---|---|
journalctl |
查看所有日志 | 默认按时间倒序 |
journalctl -f |
实时跟踪日志(类似 tail -f) | 排障常用 |
journalctl -u nginx.service |
只看nginx服务的日志 | 指定unit,高频使用 |
journalctl --since "10min ago" |
查看最近10分钟日志 | 时间筛选:"2026-02-12"、"yesterday" |
journalctl -p err |
只看错误级别日志 | p=priority,级别:info/warning/err/emerg |
journalctl --disk-usage |
查看journal日志占用磁盘空间 | 检查存储配置是否生效 |
mkdir /var/log/journal && systemctl restart systemd-journald |
开启journald永久存储 | 默认仅存内存,需手动创建目录 |
2. rsyslog 操作
| 命令 | 作用 | 备注 |
|---|---|---|
systemctl restart rsyslog |
重启rsyslog(配置生效) | 修改rsyslog.conf后必执行 |
systemctl enable rsyslog |
开机自启rsyslog | 生产环境建议开启 |
tail -f /var/log/messages |
实时查看系统核心日志 | 排障最常用 |
grep "error" /var/log/secure |
筛选安全日志中的错误信息 | 结合grep高效分析 |
四、核心配置示例(可直接套用)
1. journald.conf 关键配置(/etc/systemd/journald.conf)
ini
[Journal]
Storage=persistent # 强制永久存储(必配)
SystemMaxUse=2G # 日志最大占用2GB磁盘
SystemMaxFileSize=200M # 单个日志文件最大200MB
MaxRetentionSec=1month # 日志保留1个月
ForwardToSyslog=yes # 转发给rsyslog(默认开启,勿改)
RuntimeMaxUse=100M # 内存日志上限100MB
配置生效:systemctl restart systemd-journald
2. rsyslog.conf 关键配置(/etc/rsyslog.conf)
ini
# 1. 加载对接journald的模块(必加)
module(load="imjournal" StateFile="imjournal.state")
# 2. 核心规则示例(过滤+输出)
*.info;mail.none;authpriv.none;cron.none /var/log/messages # 普通日志存messages
authpriv.* /var/log/secure # 认证日志存secure
mail.* -/var/log/maillog # -表示异步写入,提升性能
cron.* /var/log/cron # 定时任务日志存cron
*.emerg * # 紧急日志广播给所有登录用户
# 可选:转发到远程日志服务器
# *.info;mail.none;authpriv.none;cron.none @192.168.1.10:514
配置生效:systemctl restart rsyslog
五、故障排查核心思路
-
日志看不到?
- 先查 journald:
journalctl -f→ 确认日志是否产生; - 再查 rsyslog:
systemctl status rsyslog→ 确认服务是否运行; - 最后查配置:
grep -v "^#" /etc/rsyslog.conf→ 确认规则是否匹配。
- 先查 journald:
-
journald 日志重启丢失?
- 检查
/var/log/journal目录是否存在 → 不存在则创建并重启 journald; - 检查
Storage=persistent是否配置。
- 检查
-
rsyslog 不生成文本日志?
- 确认 journald 的
ForwardToSyslog=yes; - 确认 rsyslog 加载了
imjournal模块; - 检查日志文件权限:
ls -l /var/log/messages→ 确保rsyslog可写入。
- 确认 journald 的
总结
- 核心分工:journald 管"收集+二进制存储",rsyslog 管"加工+文本化+分发",Syslog 是二者遵循的协议;
- 关键操作:journalctl 查二进制日志,tail/less 查rsyslog生成的文本日志,修改配置后需重启对应服务;
- 核心配置:journald 重点配"持久化(Storage=persistent)",rsyslog 重点配"来源+级别+输出路径"。