0%

journal笔记

前言

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 命令

  • 显示 PATTERN 模式的日志:
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
  • 包含日志消息类型的描述:
1
journalctl -x

注意在报告 bug 和寻求帮助时不要使用此命令,因为这个命令会产生大量的输出。用 journalctl –list-catalog 可以查看所有类型的描述。

  • 显示从某个日期 ( 或时间 ) 开始的消息:
1
journalctl --since="2012-10-30 18:17:16"
  • 显示从某个时间 ( 例如 20分钟前 ) 的消息:
1
journalctl --since "20 min ago"
  • 显示最新信息
1
journalctl -f
  • 显示特定程序的所有消息:
1
journalctl /usr/lib/systemd/systemd
  • 显示特定进程的所有消息:
1
journalctl _PID=1
  • 显示指定单元的所有消息:
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
  • 显示内核环缓存消息r:
1
journalctl -k
  • 通过在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

1
SystemMaxUse=5G
清理日志

直接rm /var/log/journal 或者使用journalctl

  • 清理日志使总大小小于100M
1
journalctl --vacuum-size=100M
  • 清理最早两周前的日志
1
journalctl --vacuum-time=2weeks

总结

如果懒得采集日志和管理日志 不妨直接使用systemd的日志系统 方便管理
直接定义成system service unit 输出stdout stderr 让journal采集和管理