Linux journald与journalctl命令

参考资料

  1. Linux管理・運用の基本:journalctlを使いこなすログ管理術
  2. 【2023年1月版】 journalctl 覚えておきたい使い方メモ

目录

  • [一. 简介](#一. 简介)
    • [1.1 systemd 出现之前的日志体系](#1.1 systemd 出现之前的日志体系)
    • [1.2 systemd 普及后的日志体系](#1.2 systemd 普及后的日志体系)
  • [二. journald](#二. journald)
    • [2.1 简介](#2.1 简介)
    • [2.2 与传统`syslog`对比](#2.2 与传统syslog对比)
    • [2.3 `/var/log/journal/`目录下的日志文件](#2.3 /var/log/journal/目录下的日志文件)
    • [2.4 配置文件](#2.4 配置文件)
  • [三. journalctl](#三. journalctl)
    • [3.1 `-f` 实时查看日志](#3.1 -f 实时查看日志)
    • [3.2 `--boot` 查看启动日志](#3.2 --boot 查看启动日志)
    • [3.3 `-u` 查看某个服务的日志](#3.3 -u 查看某个服务的日志)
    • [3.4 `--since` 与 `--until` 按时间查找](#3.4 --since--until 按时间查找)
    • [3.5 `-p err` 查看错误日志](#3.5 -p err 查看错误日志)
    • [3.6 查看系统日志磁盘空间占用](#3.6 查看系统日志磁盘空间占用)
    • [3.7 系统日志的清理](#3.7 系统日志的清理)

一. 简介

journaldjournalctl 是一对 后台服务 + 查看工具,用来统一收集、存储和查看系统日志的。

  • systemd-journald(简称 journald
    • 日志服务本体:负责记录系统日志
  • journalctl
    • 日志查看命令:负责查看 / 查询日志

1.1 systemd 出现之前的日志体系

🔷特点

  • 纯文本
  • 行为简单、透明
  • 管道清晰

🔷存在的问题:

  • 日志格式不统一
  • 字段没有结构化
  • 高并发下性能一般
  • 服务启动前的日志容易丢
bash 复制代码
应用程序
   ↓
syslog() / logger
   ↓
rsyslog / syslog-ng
   ↓
/var/log/*.log(纯文本)

1.2 systemd 普及后的日志体系

🔷自2012年之后,systemd开始普及,日志体系如下所示

bash 复制代码
应用 / 内核 / systemd
        ↓
  systemd-journald   ← 核心
        ↓
   ┌──────────────┐
   │   二进制日志  │
   │/run /var/log │
   └──────────────┘
        ↓(可选)
   rsyslog / syslog-ng
        ↓
   传统文本日志

🔷因为传统的syslog的生态十分庞大,网络设备和安全审计规范等领域依然需要syslog,所以并没有被取消。

  • journald 不是 syslog 的替代品,而是 syslog 的上游。
  • 现代 Linux:journald 负责,syslog 负责
bash 复制代码
systemd-journald
   ├─ 保存二进制日志
   └─ 转发到 /run/systemd/journal/syslog
           ↓
        rsyslog

🔷整体鸟瞰图

bash 复制代码
┌───────────────────────────────┐
│        日志产生源              │
│───────────────────────────────│
│  kernel (printk)              │
│  systemd services             │
│  用户程序 / 守护进程           │
│  logger / syslog()            │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│     systemd-journald          │   ←【日志入口 / 中枢】
│───────────────────────────────│
│  • 接收所有日志                │
│  • 打时间戳 / PID / UID        │
│  • 结构化存储(二进制)         │
│  • 自动轮转 / 限额             │
└───────────────┬───────────────┘
        │       │
        │       ├─────────────┐
        │       │             │
        ▼       ▼             ▼
┌───────────────┐   ┌──────────────────┐
│ /run/log/     │   │ /var/log/journal │
│ journal       │   │(持久化 journal) │
│(内存)        │   └──────────────────┘
└───────────────┘
        │
        │  (ForwardToSyslog=yes)
        ▼
┌───────────────────────────────┐
│     rsyslogd                  │   ←【传统兼容层 / 输出器】
│───────────────────────────────│
│  • 从 journald 读日志          │
│  • 规则过滤 / 分类             │
│  • 输出文本日志                │
│  • 网络转发                    │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│     /var/log/*.log            │
│───────────────────────────────│
│ syslog / auth.log / kern.log  │
│ daemon.log / app.log ...      │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│        logrotate              │   ←【文本日志轮转】
│───────────────────────────────│
│  • 定期切割                    │
│  • 压缩                        │
│  • 删除旧日志                  │
│  • 通知 rsyslog reopen        │
└───────────────────────────────┘

二. journald

2.1 简介

🔷journald会接收来自以下来源的日志:

  • 内核日志(dmesg)
  • systemd 服务日志
  • 各种系统服务(sshcronsudo 等)
  • 用户程序通过 syslog / stdout / stderr 输出的日志

🔷接收到日之后,会存储在下面的地方:

  • /run/log/journal:内存
  • /var/log/journal:磁盘

🔷特点

  • 二进制日志(不是纯文本)
  • 自动带上结构化信息:
    • 时间戳
    • PID
    • UID
    • 服务名(unit)
    • 可执行文件路径
  • 支持:
    • 日志轮转 
      ※无需logrotate
    • 压缩
    • 按大小 / 时间自动清理

2.2 与传统syslog对比

对比项 journald 传统 syslog
日志格式 二进制(结构化) 纯文本
查询能力 非常强(按字段) 弱(grep)
统一入口 否(分散)
实时性 支持 支持
systemd 集成 原生 非原生

2.3 /var/log/journal/目录下的日志文件

  • *.journal 文件,就是 journald 的二进制日志数据库
  • journalctl 实际就是在读取这些文件
bash 复制代码
apluser@FengYeHong-HP:~$ tree /var/log/journal/
/var/log/journal/
└── 7b644cb526e843fc910b92994eacfb94
    ├── system.journal
    ├── system@00063c5b254352e2-4f53057312b77dc2.journal~
    ├── system@00063d0283fb5bc6-904ac48255bcb5a2.journal~
    ├── system@00063d04ffcd0142-2a71f4e52179981f.journal~
    └── user-1000.journal

1 directory, 5 files
apluser@FengYeHong-HP:~$

2.4 配置文件

bash 复制代码
apluser@FengYeHong-HP:~$ ls -l /etc/systemd/journald.conf
-rw-r--r-- 1 root root 1282 Apr  8  2022 /etc/systemd/journald.conf

🔷下面是一份journald.conf文件的例子

bash 复制代码
[Journal]
# ---------- 存储方式 ----------
# 持久化日志写入
Storage=persistent

# ---------- 空间控制(重点) ----------
# journal 总占用上限
SystemMaxUse=1G
# 磁盘最少剩余空间
SystemKeepFree=1G
# 单个文件最大大小
SystemMaxFileSize=100M

# ---------- 时间控制 ----------
# 最多保留30天的日志
MaxRetentionSec=30day

# ---------- 写入与性能 ----------
# 开启 journal 文件自动压缩, 减少日志量
Compress=yes
SyncIntervalSec=5m
# 防止某个服务疯狂刷日志把磁盘写爆, 30秒内, 最多允许 10000 条, 超出的直接丢弃并记录警告
RateLimitIntervalSec=30s
RateLimitBurst=10000

# ---------- 安全 ----------
# 开启安全审计, journal 文件带完整性校验, 可检测日志是否被篡改
Seal=yes
# 多用户系统, 可确保 root / 用户日志分开
SplitMode=uid

# ---------- 其他 ----------
# 保留传统日志,journald → rsyslog → /var/log/*.log
ForwardToSyslog=yes

🔷如果journald的配置文件被修改了,需要通过下面的命令重启journald

bash 复制代码
sudo systemctl restart systemd-journald

三. journalctl

🔷journalctl 是 查看 / 查询 journald日志的命令行工具

3.1 -f 实时查看日志

  • 类似于tail -f
bash 复制代码
apluser@ubuntu24-01:~$ journalctl -f
Dec 30 15:34:46 ubuntu24-01 PackageKit[95942]: daemon start
Dec 30 15:34:46 ubuntu24-01 dbus-daemon[885]: [system] Successfully activated service 'org.freedesktop.PackageKit'
Dec 30 15:34:46 ubuntu24-01 systemd[1]: Started packagekit.service - PackageKit Daemon.
Dec 30 15:35:01 ubuntu24-01 CRON[96144]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
Dec 30 15:35:01 ubuntu24-01 CRON[96145]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 30 15:35:01 ubuntu24-01 CRON[96144]: pam_unix(cron:session): session closed for user root
Dec 30 15:35:01 ubuntu24-01 systemd[1]: apt-daily.service: Deactivated successfully.
Dec 30 15:35:01 ubuntu24-01 systemd[1]: Finished apt-daily.service - Daily apt download activities.
Dec 30 15:35:01 ubuntu24-01 systemd[1]: apt-daily.service: Consumed 19.351s CPU time.

3.2 --boot 查看启动日志

bash 复制代码
apluser@ubuntu24-01:~$ journalctl --boot | head
Aug 14 07:35:18 ubuntu24-01 kernel: Linux version 6.8.0-71-generic (buildd@lcy02-amd64-053) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 (Ubuntu 6.8.0-71.71-generic 6.8.12)
Aug 14 07:35:18 ubuntu24-01 kernel: Command line: BOOT_IMAGE=/vmlinuz-6.8.0-71-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro
Aug 14 07:35:18 ubuntu24-01 kernel: KERNEL supported cpus:
Aug 14 07:35:18 ubuntu24-01 kernel:   Intel GenuineIntel
Aug 14 07:35:18 ubuntu24-01 kernel:   AMD AuthenticAMD
Aug 14 07:35:18 ubuntu24-01 kernel:   Hygon HygonGenuine
Aug 14 07:35:18 ubuntu24-01 kernel:   Centaur CentaurHauls
Aug 14 07:35:18 ubuntu24-01 kernel:   zhaoxin   Shanghai
Aug 14 07:35:18 ubuntu24-01 kernel: Disabled fast string operations
Aug 14 07:35:18 ubuntu24-01 kernel: BIOS-provided physical RAM map:

3.3 -u 查看某个服务的日志

bash 复制代码
apluser@FengYeHong-HP:~$ journalctl -u ssh | head
Aug 14 20:51:11 FengYeHong-HP systemd[1]: Starting OpenBSD Secure Shell server...
Aug 14 20:51:13 FengYeHong-HP sshd[334]: Server listening on 0.0.0.0 port 22.
Aug 14 20:51:13 FengYeHong-HP sshd[334]: Server listening on :: port 22.
Aug 14 20:51:13 FengYeHong-HP systemd[1]: Started OpenBSD Secure Shell server.
-- Boot 31d0ca0261ca4c60bed5ff678f5be714 --
Aug 15 07:53:47 FengYeHong-HP systemd[1]: Starting OpenBSD Secure Shell server...
Aug 15 07:53:48 FengYeHong-HP sshd[277]: Server listening on 0.0.0.0 port 22.
Aug 15 07:53:48 FengYeHong-HP sshd[277]: Server listening on :: port 22.
Aug 15 07:53:48 FengYeHong-HP systemd[1]: Started OpenBSD Secure Shell server.
apluser@FengYeHong-HP:~$

3.4 --since--until 按时间查找

  • --since:从某个时间点开始的日志
bash 复制代码
apluser@ubuntu24-01:~$ journalctl --since "2025-12-20 10:00" | head
Dec 20 10:00:31 ubuntu24-01 systemd[1]: Starting sysstat-collect.service - system activity accounting tool...
Dec 20 10:00:31 ubuntu24-01 systemd[1]: sysstat-collect.service: Deactivated successfully.
Dec 20 10:00:31 ubuntu24-01 systemd[1]: Finished sysstat-collect.service - system activity accounting tool.
Dec 20 10:01:34 ubuntu24-01 systemd[1]: Starting fwupd-refresh.service - Refresh fwupd metadata and update motd...
Dec 20 10:01:34 ubuntu24-01 systemd[1]: fwupd-refresh.service: Deactivated successfully.
Dec 20 10:01:34 ubuntu24-01 systemd[1]: Finished fwupd-refresh.service - Refresh fwupd metadata and update motd.
Dec 20 10:05:01 ubuntu24-01 CRON[82718]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
Dec 20 10:05:01 ubuntu24-01 CRON[82719]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 20 10:05:01 ubuntu24-01 CRON[82718]: pam_unix(cron:session): session closed for user root
Dec 20 10:10:34 ubuntu24-01 systemd[1]: Starting sysstat-collect.service - system activity accounting tool...
  • 查看今天指定服务的日志
bash 复制代码
apluser@ubuntu24-01:~$ journalctl -u ssh --since today
Dec 30 15:34:45 ubuntu24-01 sshd[95637]: Accepted publickey for apluser from 192.168.137.1 port 11122 ssh2: RSA SHA256:VNI4N/2gk8hX7hf4dp1rY1cHJ23SumccXly1777Eitw
Dec 30 15:34:45 ubuntu24-01 sshd[95637]: pam_unix(sshd:session): session opened for user apluser(uid=1000) by apluser(uid=0)
Dec 30 20:39:52 ubuntu24-01 sshd[97492]: Accepted publickey for apluser from 192.168.137.1 port 7988 ssh2: RSA SHA256:VNI4N/2gk8hX7hf4dp1rY1cHJ23SumccXly1777Eitw
Dec 30 20:39:52 ubuntu24-01 sshd[97492]: pam_unix(sshd:session): session opened for user apluser(uid=1000) by apluser(uid=0)
Dec 30 20:40:42 ubuntu24-01 sshd[97614]: Accepted publickey for apluser from 192.168.137.1 port 7994 ssh2: RSA SHA256:VNI4N/2gk8hX7hf4dp1rY1cHJ23SumccXly1777Eitw
Dec 30 20:40:42 ubuntu24-01 sshd[97614]: pam_unix(sshd:session): session opened for user apluser(uid=1000) by apluser(uid=0)
  • --until:截止到某个时间点的日志
bash 复制代码
apluser@ubuntu24-01:~$ journalctl --since "2025-12-10 10:00" --until "2025-12-30 10:00" | head
Nov 30 20:45:15 ubuntu24-01 systemd-networkd[72683]: ens33: Gained carrier
Dec 14 19:45:45 ubuntu24-01 systemd-resolved[27545]: Clock change detected. Flushing caches.
Dec 14 19:45:45 ubuntu24-01 systemd-networkd[72683]: ens33: Lost carrier
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting apt-daily.service - Daily apt download activities...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting dpkg-db-backup.service - Daily dpkg database backup service...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting e2scrub_all.service - Online ext4 Metadata Check for All Filesystems...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting fstrim.service - Discard unused blocks on filesystems from /etc/fstab...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting fwupd-refresh.service - Refresh fwupd metadata and update motd...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting motd-news.service - Message of the Day...
Dec 14 19:45:45 ubuntu24-01 systemd[1]: Starting sysstat-collect.service - system activity accounting tool...

3.5 -p err 查看错误日志

⏹日志级别如下:

  • emerg
  • alert
  • crit
  • err
  • warning
  • notice
  • info
  • debug
bash 复制代码
apluser@ubuntu24-01:~$ journalctl -p err | head
Sep 25 22:16:07 ubuntu221 kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
Sep 25 22:16:30 ubuntu221 login[1303]: PAM unable to dlopen(pam_lastlog.so): /usr/lib/security/pam_lastlog.so: cannot open shared object file: No such file or directory
Sep 25 22:16:30 ubuntu221 login[1303]: PAM adding faulty module: pam_lastlog.so
-- Boot d2c210f3a91f485786968cd34d0d4d9f --
Sep 25 22:20:13 ubuntu221 kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
Sep 25 22:20:23 ubuntu221 login[1060]: PAM unable to dlopen(pam_lastlog.so): /usr/lib/security/pam_lastlog.so: cannot open shared object file: No such file or directory
Sep 25 22:20:23 ubuntu221 login[1060]: PAM adding faulty module: pam_lastlog.so
-- Boot fe4732dd1ba34132b12361fea4fa0ad2 --
Sep 25 22:21:03 ubuntu221 kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
Sep 25 22:21:24 ubuntu221 login[1197]: PAM unable to dlopen(pam_lastlog.so): /usr/lib/security/pam_lastlog.so: cannot open shared object file: No such file or directory

3.6 查看系统日志磁盘空间占用

bash 复制代码
apluser@ubuntu24-01:~$ journalctl --disk-usage
Archived and active journals take up 257.6M in the file system.

3.7 系统日志的清理

  • 手动触发日志轮转
bash 复制代码
sudo journalctl --rotate
  • 清理14天之前的旧日志
bash 复制代码
sudo journalctl --vacuum-time=14d
  • 将所有 journal 日志的【总占用空间】压缩到 ≤ 500MB
  • journald 会 从最旧的日志开始删除,一直删除到总占用 ≤ 500M
bash 复制代码
sudo journalctl --vacuum-size=500M
相关推荐
米高梅狮子2 小时前
1. Cockpit 管理服务器
linux·运维·服务器
m0_737302582 小时前
云服务器 vs 传统服务器:核心区别与选型指南
服务器
一颗青果8 小时前
HTTP协议详解
linux·网络·网络协议·http
Joy T10 小时前
【AI运维】02 云上基础部署:ECS、OSS 与 Nginx 的体系化理解与实践
运维·nginx
Dreamboat-L10 小时前
云服务器上部署nginx
java·服务器·nginx
广州灵眸科技有限公司11 小时前
瑞芯微(EASY EAI)RV1126B CAN使用
linux·网络·单片机·嵌入式硬件
石小千11 小时前
Nexus升级(3.63.0--3.87.1)
运维
咕噜签名-铁蛋12 小时前
AI扣子:重构人机交互的智能连接点
服务器
AI科技星13 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活