journalctl
是 systemd
系统和服务管理器的一部分,用于查询和显示由 systemd
及其组件生成的日志条目。它提供了强大的日志管理和分析功能,适用于各种场景的日志查看和诊断。本文将详细介绍 journalctl
命令的用法和常见选项。
基本用法
- 查看所有日志:
journalctl
显示系统启动以来的所有日志。
常见选项
启动相关选项
- 查看当前启动周期的日志:
journalctl -b
- 查看上一个启动周期的日志:
journalctl -b -1
对于更早的启动周期,可以使用 -2
, -3
等。
时间相关选项
- 查看特定时间范围的日志:
journalctl --since "YYYY-MM-DD HH:MM:SS" --until "YYYY-MM-DD HH:MM:SS"
例如:
journalctl --since "2024-06-10 08:00:00" --until "2024-06-10 12:00:00"
- 查看某个时间点之后的日志:
journalctl --since "YYYY-MM-DD HH:MM:SS"
- 查看某个时间点之前的日志:
journalctl --until "YYYY-MM-DD HH:MM:SS"
- 列出全部生命周期:
journalctl --list-boots
列出系统中的所有启动周期及其对应的标识符、时间戳等信息,方便用户选择特定的启动周期进行分析。
服务相关选项
- 查看特定服务的日志:
journalctl -u <unit>
例如:
journalctl -u sshd
内核相关选项
- 查看内核日志:
journalctl -k
- 查看特定启动周期的内核日志:
journalctl -k -b -1
优先级相关选项
- 查看特定优先级及更高级别的日志:
journalctl -p <priority>
例如:
journalctl -p err
日志优先级从高到低依次为:
0
: emerg1
: alert2
: crit3
: err4
: warning5
: notice6
: info7
: debug
输出格式相关选项
- 指定输出格式:
journalctl -o <output>
常用输出格式有:
short
: 默认格式verbose
: 详细格式json
: JSON 格式json-pretty
: 美化的 JSON 格式json-sse
: JSON SSE 格式cat
: 仅消息内容 例如:
journalctl -o json-pretty
过滤相关选项
- 按用户标识过滤日志:
journalctl _UID=<UID>
例如,查看 root 用户的日志:
journalctl _UID=0
- 按进程标识过滤日志:
journalctl _PID=<PID>
- 按路径过滤日志:
journalctl /path/to/binary
例如,查看 sshd
可执行文件生成的日志:
journalctl /usr/sbin/sshd
持续查看日志
- 实时查看日志:
journalctl -f
类似于 tail -f
,用于实时查看日志的最新条目。
其他选项
- 限制日志条数:
journalctl -n <number>
例如,查看最近 100 条日志:
journalctl -n 100
- 查看日志大小:
journalctl --disk-usage
- 压缩日志:
journalctl --vacuum-size=<size>
例如,将日志压缩到 1G:
journalctl --vacuum-size=1G
实用案例
- 查看当前启动周期的所有错误日志:
journalctl -b -p err
- 查看上一个启动周期的 SSH 服务日志:
journalctl -b -1 -u sshd
- 查看特定时间段内的内核警告日志:
journalctl -k --since "2024-06-10 08:00:00" --until "2024-06-10 12:00:00" -p warning
- 实时查看特定服务的日志:
journalctl -u apache2 -f
- 以 JSON 格式查看最近 50 条日志:
journalctl -n 50 -o json-pretty
详细示例
示例 1:查看当前启动周期的所有日志
journalctl -b
此命令显示系统当前启动周期以来的所有日志,适用于一般性问题的初步诊断。
示例 2:查看上一个启动周期的内核错误日志
journalctl -k -b -1 -p err
此命令显示上一个启动周期内内核产生的所有错误级别的日志,有助于诊断系统在上一次启动过程中的内核问题。
示例 3:实时查看 SSH 服务的日志
journalctl -u sshd -f
此命令实时显示 SSH 服务的日志条目,适用于监控 SSH 服务的活动。
示例 4:查看特定时间段内的日志
journalctl --since "2024-06-10 08:00:00" --until "2024-06-10 12:00:00"
此命令显示在指定时间段内的所有日志,适用于分析特定时间段内发生的事件。
示例 5:查看特定用户的日志
journalctl _UID=1000
此命令显示由用户 ID 为 1000 的用户生成的所有日志,适用于跟踪和诊断特定用户的活动。
示例 6:压缩日志文件以释放磁盘空间
journalctl --vacuum-size=1G
此命令将日志文件压缩到 1GB 大小,有助于管理日志文件占用的磁盘空间。
示例 7:查看特定单元的详细日志
journalctl -u apache2 -o verbose
此命令以详细格式显示 Apache2 服务的日志,提供更全面的信息用于深入分析。
日志优先级级别
日志优先级从高到低依次为:
0
: emerg (紧急,系统不可用)1
: alert (警报,需要立即处理)2
: crit (严重,关键条件)3
: err (错误)4
: warning (警告)5
: notice (通知,正常但重要)6
: info (信息,正常消息)7
: debug (调试信息)
使用注意事项
- 权限:
journalctl
通常需要 root 权限或具有适当的systemd-journal
组权限来访问所有日志。
sudo journalctl -b
- 安全性: 日志可能包含敏感信息,应谨慎处理和共享。
- 性能: 对大日志文件的操作可能会影响系统性能,特别是在实时监控或过滤大量日志时。
总结
journalctl
是一个功能强大且灵活的日志查看和分析工具,适用于各种系统管理和故障排除任务。通过了解和使用 journalctl
的各种选项,管理员可以高效地查找、过滤和分析系统日志,快速定位问题根源并采取相应措施。