前言
journal是systemd的日志系统,journalctl是journal的命令行工具用来查看和管理日志
arch-wiki#journal
名词解释
日志会携带syslog的 优先级标记日志重要性 也就是日志等级
数值 |
优先级 |
关键字 |
描述 |
示例 |
0 |
Emergency |
emerg |
系统无法使用 |
严重的内核错误,systemd 导致核心转储。 此级别不应被应用程序使用。 |
1 |
Alert |
alert |
应立即纠正 |
关键子系统失效,数据丢失。 内核:无法处理内核分页请求。 |
2 |
Critical |
crit |
关键条件 |
崩溃、核心转储。例如:systemd-coredump[25319]:用户 1000 的进程 25310 (plugin-container) 转储核心 |
3 |
Error |
err |
错误条件 |
非致命错误报告: 内核:usb 1-3: 3:1: 无法获取 ep 0x84 的频率 systemd: 无法卸载 /var libvirtd[1720]: 内部错误:无法初始化有效的防火墙后端 |
4 |
Warning |
warning |
可能指示如果不采取行动将发生错误 |
非 root 文件系统只剩下 1GB 空间。 org.freedesktop.Notifications[1860]: (进程:5999):Gtk-WARNING **: C 库不支持的本地,使用回退 ‘C’ 本地。 |
5 |
Notice |
notice |
异常事件,但不是错误条件 |
systemd: var.mount: 将要挂载的目录 /var 不为空,仍然继续挂载。 gcr-prompter[4997]: Gtk: GtkDialog 没有瞬时父窗口。这不建议。 |
6 |
Informational |
info |
正常操作消息,无需采取行动 |
lvm[585]: 7 个逻辑卷现在在卷组 “archvg” 中激活。 |
7 |
Debug |
debug |
可能需要首先启用的消息,仅对调试有用 |
kdeinit5[1900]: powerdevil: 从 “:1.14” “firefox” 排程抑制,cookie 13,原因 “screen” |
功能
syslog的功能码
功能码 |
关键字 |
描述 |
信息 |
0 |
kern |
内核消息 |
旧版 POSIX 仍支持并有时使用的系统,更多信息见 mail(1) |
1 |
user |
用户级消息 |
所有用户级别的消息 |
2 |
mail |
邮件系统 |
旧版 POSIX 仍支持并有时使用的系统,更多信息见 mail(1) |
3 |
daemon |
系统守护进程 |
包括 systemd 及其子系统 |
4 |
auth |
安全/授权消息 |
同时注意不同的设施 10 |
5 |
syslog |
由 syslogd 生成的消息 |
标准化用于 syslogd ,不用于 systemd (参见设施 3) |
6 |
lpr |
行式打印机子系统(过时的子系统) |
旧版行式打印机子系统 |
7 |
news |
网络新闻子系统(过时的子系统) |
旧版网络新闻子系统 |
8 |
uucp |
UUCP 子系统(过时的子系统) |
旧版 UUCP 子系统 |
9 |
clock |
时钟守护进程 |
systemd-timesyncd |
10 |
authpriv |
安全/授权消息 |
同时注意不同的设施 4 |
11 |
ftp |
FTP 守护进程 |
FTP 守护进程 |
12 |
- |
NTP 子系统 |
NTP 子系统 |
13 |
- |
审计日志 |
审计日志 |
14 |
- |
警告日志 |
警告日志 |
15 |
cron |
计划任务守护进程 |
计划任务守护进程 |
16 |
local0 |
本地使用 0 |
本地使用 0 |
17 |
local1 |
本地使用 1 |
本地使用 1 |
18 |
local2 |
本地使用 2 |
本地使用 2 |
19 |
local3 |
本地使用 3 |
本地使用 3 |
20 |
local4 |
本地使用 4 |
本地使用 4 |
21 |
local5 |
本地使用 5 |
本地使用 5 |
22 |
local6 |
本地使用 6 |
本地使用 6 |
23 |
local7 |
本地使用 7 |
本地使用 7 |
journalctl 命令
1
| journalctl --grep=PATTERN
|
1 2 3 4 5 6 7 8
| # 显示本次启动后的所有日志 -0 journalctl -b # 显示本次启动的信息 journalctl -b -0 # 显示上次启动的信息 journalctl -b -1 # 显示上上次启动的信息 journalctl -b -2
|
代码和编号 参考 优先级
1 2 3 4 5
| # 显示 err到alert的日志 journalctl -p err..alert # 显示 err到 alert的日志 journalctl -p 3..1 journalctl -p 3
|
注意在报告 bug 和寻求帮助时不要使用此命令,因为这个命令会产生大量的输出。用 journalctl –list-catalog 可以查看所有类型的描述。
1
| journalctl --since="2012-10-30 18:17:16"
|
- 显示从某个时间 ( 例如 20分钟前 ) 的消息:
1
| journalctl --since "20 min ago"
|
1
| journalctl /usr/lib/systemd/systemd
|
1 2 3 4 5
| journalctl -u man-db.service # 显示指定服务的近 100行数据 journalctl -u man-db.service -n 100 # 实时显示指定服务日志 journalctl -u man-db.service -f
|
1
| journalctl --user -u dbus
|
- 通过在syslog工具上过滤显示auth.log等效项:
1
| journalctl -f -l SYSLOG_FACILITY=10
|
- 如果您的日志目录(默认位于/var/log/journal下)包含大量日志数据,那么journalctl可能需要几分钟来过滤输出。通过使用–file选项强制journalctl只查看最近的日志,可以显著加快速度:
1
| journalctl --file /var/log/journal/*/system.journal -f
|
1
| journalctl --since="2017-01-01" --until="2017-02-01"
|
1
| journalctl -o export > test.log
|
输出模式 |
描述 |
示例命令 |
short |
显示简短的日志格式,这是系统默认的日志显示格式。 |
journalctl -o short |
verbose |
显示详细的日志格式,包括日志的全部字节。 |
journalctl -o verbose |
export |
以适合传输和备份的二进制格式显示日志。 |
journalctl -o export |
json |
将日志以 JSON 格式输出。 |
journalctl -o json |
json-pretty |
将日志以美化后的 JSON 格式输出,使得 JSON 数据更易读。 |
journalctl -o json-pretty |
直接grep也可以 或者直接用–grep
1
| journalctl --grep "xxxx"
|
其他操作
配置日志大小限制
默认为当前所在文件系统的百分10 如果 /var/log/journal 储存在 50GiB 的根分区中,那么日志最多存储 5GiB 数据
1 2 3
| journalctl -b -u systemd-journald # 重启 systemctl restart systemd-journald.service
|
/etc/systemd/journald.conf
清理日志
直接rm /var/log/journal 或者使用journalctl
1
| journalctl --vacuum-size=100M
|
1
| journalctl --vacuum-time=2weeks
|
总结
如果懒得采集日志和管理日志 不妨直接使用systemd的日志系统 方便管理
直接定义成system service unit 输出stdout stderr 让journal采集和管理