来源:Shad0w-top | 发布日期:2025-08-29
systemd 日志管理与实时监控:journalctl 命令完全指南
journalctl 是 systemd 系统自带的日志管理工具,替代传统 syslog,将所有日志统一管理。熟练掌握 journalctl 是 Linux 系统管理员和开发者的必备技能。
基础实时监控
journalctl -f # 实时追踪所有系统日志
journalctl -n 50 -f # 先显示最近 50 条,再实时追踪
journalctl -xef # 显示带解释的实时日志(--catalog)
-f(follow)模式与 tail -f 类似,持续输出最新系统日志。
精准过滤
按服务单元过滤
journalctl -u sshd -f # 监控 sshd 服务
journalctl -u mysqld -f # 监控 MySQL 服务
journalctl -u docker -u nginx -f # 同时监控多个服务
注意: 服务名称严格区分大小写,建议先用 systemctl list-units 确认准确名称。
按日志级别过滤
journalctl 支持 8 种优先级(标准 syslog 级别):
| 等级 | 数字 | 含义 | 说明 |
|---|---|---|---|
| emerg | 0 | 紧急 | 系统不可用 |
| alert | 1 | 警报 | 必须立即采取行动 |
| crit | 2 | 临界 | 硬件故障等 |
| err | 3 | 错误 | 操作失败 |
| warning | 4 | 警告 | 需要注意的问题 |
| notice | 5 | 通知 | 正常但重要 |
| info | 6 | 信息 | 一般信息 |
| debug | 7 | 调试 | 调试信息 |
journalctl -p err -f # 仅查看错误及以上级别
journalctl -p3 -f # 同上,数字表示
journalctl -p warning -f # 监控警告级别
按时间范围过滤
journalctl --since "1 hour ago" -f # 近 1 小时日志实时追踪
journalctl --since "yesterday" -f # 昨日至今
journalctl --since "10 minutes ago" -f
journalctl --since "2025-08-29 09:00:00" -f # 指定时间点
高级组合查询
# 多服务 + 级别 + 历史上下文
journalctl -u docker -u sshd -p warning -n 20 -f
这个组合实现:
- 同时监控 docker 和 sshd 服务
- 仅显示 warning 及以上级别
- 先提供 20 条历史上下文
- 实时跟踪新产生的日志
内核日志监控
journalctl -k -f # 实时监控内核消息
-k(kernel)参数仅显示内核消息,对于排查网络设备、驱动问题非常有用。
与 grep 结合使用
journalctl -f | grep "connection refused"
journalctl -f | grep -i "error"
journalctl -f | grep -E "OOM|oom-killer"
磁盘占用管理
journald 日志会持续占用磁盘空间,需要定期管理:
journalctl --disk-usage # 查看日志占用
journalctl --vacuum-time=7d # 保留最近 7 天
journalctl --vacuum-size=500M # 限制最大 500MB
journalctl --rotate # 手动轮转日志文件
命令速查表
| 命令 | 功能 | 适用场景 |
|---|---|---|
journalctl -f |
实时所有日志 | 整体系统监控 |
journalctl -u sshd -f |
实时指定服务 | 服务故障排查 |
journalctl -p err -f |
实时错误日志 | 错误快速定位 |
journalctl -n 50 -f |
带上下文实时监控 | 问题分析 |
journalctl --since "1h ago" -f |
时间段实时监控 | 时段性问题 |
journalctl -k -f |
实时内核日志 | 内核/驱动问题 |
journalctl --disk-usage |
查看日志占用 | 磁盘空间管理 |
实战场景
SSH 暴力破解检测: 使用 journalctl -u sshd -f 实时监控 SSH 登录尝试,观察 Failed password 事件。日志中可清晰看到来自特定 IP 的自动化暴力破解尝试,结合 ssh-brute-force-protection-guide 中的 fail2ban 或公钥认证方案加固。
应用启动异常排查: 启动服务后使用 journalctl -u <service> -n 50 -f 追踪启动过程日志,定位启动失败根因。
内核网络问题: 使用 journalctl -k -f 观察网络设备状态变化(如 veth 接口的 promiscuous mode 切换、网桥端口状态)。
最佳实践
- 权限: 部分系统日志需要 sudo 权限
- 时区: journalctl 默认使用系统本地时区
- 服务名核对: 使用前确认服务单元名称准确性(
systemctl list-units) - 组合使用: 灵活组合
-u/-p/-n/--since/-f参数实现精准监控 - 实时分析: 结合 grep/awk 等工具进行实时模式匹配和分析
关联页面
| 页面 | 关联点 |
|---|---|
| linux-essential-commands-reference | 30 个高频命令速查(含 journalctl 基础用法) |
| server-performance-four-dimensions | 服务器性能五维排查(日志监控是重要维度) |
| linux-disk-space-troubleshooting | 磁盘空间排查(journalctl 磁盘清理) |
| online-troubleshooting-checklist | 线上故障排查速查清单 |
| ssh-brute-force-protection-guide | SSH 暴力破解防御(journalctl 是检测工具) |
| linux-filesystem-directory-structure-guide | Linux FHS 文件系统目录结构详解 — 含各目录用途、运维排查路径速查、磁盘分区方案 |
| linux-port-inspection-tools | ss/netstat/lsof 端口探查三工具 |