目录
Journalctl 是 systemd 系统中用于查询和管理日志的核心工具,它统一收集并管理系统、服务和应用程序的日志,支持灵活的筛选、查询和导出功能。以下是 journalctl 的详细使用指南:
1. 基本语法
journalctl [OPTIONS...] [MATCHES...]
- OPTIONS:控制输出格式、过滤条件、时间范围等。
- MATCHES:键值对形式的过滤条件,如
UNIT=sshd.service。
2. 基础用法
✅ 查看所有日志
journalctl
-
按时间顺序(从旧到新)显示所有日志。
-
使用
Page Up/Page Down、箭头键导航。 -
按
End跳到日志末尾(查看最新日志)。 -
按
/搜索,按n/N查找下一个/上一个匹配项。 -
按
q退出。
✅ 查看实时日志(类似 tail -f)
journalctl -f
- 实时跟踪最新日志,按
Ctrl+C退出。
✅ 查看指定行数的最新日志
journalctl -n 30 # 查看最后30条日志
journalctl # 默认显示最后10条
✅ 禁用分页输出
journalctl --no-pager
- 将日志直接输出到标准输出,适合脚本处理。
✅ 按服务查看日志
journalctl -u nginx.service # 查看nginx服务的日志
journalctl -u docker.service --since today # 查看今天以来的docker日志
journalctl -u nginx.service -u php-fpm.service # 合并显示多个服务日志
journalctl -u nginx.service -f # 实时查看某个服务
journalctl -u nginx.service -p err -f # 实时监控nginx服务的错误日志
✅ 按进程 ID(PID)或可执行文件路径
sudo journalctl _PID=1234 # 按 PID 查看
sudo journalctl /usr/bin/nginx # 按可执行文件路径
✅ 按时间范围过滤
# 查看今天日志
sudo journalctl --since today
# 查看昨天日志
sudo journalctl --since yesterday
# 查看最近 1 小时
sudo journalctl --since "1 hour ago"
# 查看指定时间段
sudo journalctl --since "2025-08-15 10:00:00" --until "2025-08-15 12:00:00"
sudo journalctl --since="2012-10-30 18:17:16"
sudo journalctl --since 09:00 --until "1 hour ago"
# 查看最近 10 分钟
sudo journalctl -S -10min
✅ 按日志等级(Priority)过滤查看
日志等级从 0(紧急)到 7(调试):
| 等级 | 名称 | 说明 |
|---|---|---|
| 0 | emerg | 系统不可用 |
| 1 | alert | 必须立即采取行动 |
| 2 | crit | 严重情况 |
| 3 | err | 错误 |
| 4 | warning | 警告 |
| 5 | notice | 正常但重要 |
| 6 | info | 信息性 |
| 7 | debug | 调试信息 |
# 查看错误及以上级别(err, crit, alert, emerg)
sudo journalctl -p err
# 查看警告及以上
sudo journalctl -p warning
# 查看调试信息(包含所有级别)
sudo journalctl -p debug
✅ 按主机名、用户、组件过滤
# 按主机名
sudo journalctl _HOSTNAME=lzmf_server
# 按内核日志(dmesg)
sudo journalctl -k
# 或
sudo journalctl SYSLOG_IDENTIFIER=kernel
# 按可执行文件
sudo journalctl SYSLOG_IDENTIFIER=sshd
# 按用户(UID 或用户名)
sudo journalctl _UID=1008
✅ 查看引导(Boot)日志
# 查看本次启动日志
sudo journalctl -b
# 查看上一次启动日志
sudo journalctl -b -1
# 查看指定次数前的启动
sudo journalctl -b -2
# 列出所有启动记录
sudo journalctl --list-boots
✅ 按关键词过滤
# 查找包含 "Out of memory" 或 "oom-killer" 的日志
sudo journalctl -g "out of memory" -g "oom-killer"
# 包含指定关键词的日志
sudo journalctl | grep "error occurred"
3. 高级技巧
✅ 组合过滤条件
# 查看 sshd 服务在今天 10 点后的错误日志
sudo journalctl -u sshd.service --since "today 10:00" -p err
# 查看特定 IP 的 SSH 登录尝试
sudo journalctl -u sshd.service | grep "Failed password for"
⚠️ 注意:管道过滤会丢失结构化信息,建议优先使用
journalctl内置过滤。
✅ 保存日志到文件
# 保存为 JSON 格式
sudo journalctl -u nginx.service -o jsonl > nginx.log
# 保存指定时间范围
sudo journalctl --since "2025-08-15" --until "2025-08-16" > system.log
✅ 清理日志(释放磁盘空间)
# 查看日志占用的磁盘空间
sudo journalctl --disk-usage
# 删除 7 天前的日志
sudo journalctl --vacuum-time=7d
# 删除日志直到占用空间小于 100M
sudo journalctl --vacuum-size=100M
# 删除除当前启动外的所有日志
sudo journalctl --vacuum-files=1
⚠️ 生产环境建议设置日志保留策略,避免日志占满磁盘。
✅ 配置日志保留策略
编辑 /etc/systemd/journald.conf:
[Journal]
# 保留 30 天日志
SystemMaxUse=500M
SystemMaxFileSize=100M
MaxRetentionSec=30day
# 是否持久化日志(默认不保存重启后日志)
Storage=persistent
重启服务生效:
sudo systemctl restart systemd-journald
✅ 日志分析与格式化
-
JSON 输出
journalctl -o json # 以 JSON 格式输出(适合编程解析)
journalctl -o json-pretty # 格式化 JSON
journalctl -o json-sse # Server-Sent Events格式
-
自定义输出模板
journalctl --template="{{.Timestamp}} {{.Message}}" --output short-iso
- 通过
--template定义输出字段,支持所有日志字段(如TIMESTAMP,MESSAGE,_PID等)。
-
合并多台机器的日志
journalctl --merge -D /path/to/logs # 合并多个日志目录
4. 常用命令速查表
| 目的 | 命令 |
|---|---|
| 实时查看日志 | sudo journalctl -f |
| 查看某个服务 | sudo journalctl -u nginx.service |
| 查看本次启动 | sudo journalctl -b |
| 查看上次启动 | sudo journalctl -b -1 |
| 查看错误日志 | sudo journalctl -p err |
| 按时间过滤 | sudo journalctl --since "2 hours ago" |
| 输出 JSON | sudo journalctl -o json |
| 清理日志 | sudo journalctl --vacuum-size=100M |
| 查看日志占用 | sudo journalctl --disk-usage |
1148

被折叠的 条评论
为什么被折叠?



