Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式

在 CentOS 7+、Ubuntu 16.04+ 现代 Linux 系统中,systemd 接管了系统和服务的所有管理工作,同时带来了全新的日志管理工具 journalctl。
以往我们排查问题,需要挨个查看/var/log/messages、/var/log/nginx、/var/log/secure 等零散日志文件,杂乱且低效。而 journalctl 统一收集系统、内核、所有服务、程序的日志,支持精准过滤、时间回溯、实时监控、日志归档,是运维、后端开发排查服务器问题的必备神器。
本文整理 零基础入门 → 高频实操 → 生产场景 → 日志清理优化 全套用法,看完直接告别传统日志排查方式。

一、journalctl 是什么?核心优势

1. 工作原理

journalctl 是 systemd 配套的日志查看工具,系统所有组件的日志都会统一写入 /var/log/journal/ 二进制日志文件,不再散落各处。
区别于传统文本日志,它存储的是结构化二进制日志,自带元数据(服务名、进程ID、用户ID、日志级别、时间戳),支持精准筛选,效率远超 grep 文本检索。

2. 核心优势

  • 统一管理:系统日志、内核日志、所有自定义服务日志全部整合
  • 精准过滤:按服务、时间、日志级别、进程、用户精准筛选
  • 开机回溯:可查看历史开机的日志,排查开机启动故障
  • 实时监控:类似 tail -f,实时输出最新日志
  • 自动归档:支持限制日志大小、过期自动清理,避免磁盘爆满

二、基础入门:最简单的查看命令

1. 查看全部系统日志

直接执行命令,输出系统所有日志,按时间正序展示(旧日志在前,新日志在后):

复制代码
 

journalctl

复制代码
 

默认进入分页模式,操作快捷键:

  • 空格:翻页
  • 回车:逐行下滑
  • q:退出查看

2. 倒序查看(最新日志在前)

默认日志从旧到新,排查问题不方便,-r 参数反向输出,最新日志优先展示:

复制代码
 

journalctl -r

复制代码
 

3. 查看最近 N 行日志

等价于 tail 命令,快速查看最新日志:

复制代码
 

查看最后100行日志 journalctl -n 100 # 默认查看最后10行 journalctl -n

复制代码
 

4. 实时监控日志(高频常用)

等价于 tail -f,实时刷新最新日志,适合动态排查服务报错:

复制代码
 

journalctl -f

复制代码
 

三、核心进阶:精准过滤日志(生产必备)

1. 按服务筛选日志(最常用)

通过 -u 参数指定 systemd 服务,只查看对应服务日志,精准定位问题。支持 Nginx、MySQL、SSH、自定义后台服务等。

复制代码
 

查看 nginx 服务全部日志 journalctl -u nginx.service # 查看 ssh 服务实时日志 journalctl -u sshd.service -f # 同时查看多个服务日志 journalctl -u nginx -u mysql

复制代码
 

💡 搭配 systemctl status 服务名,先看服务状态,再用 journalctl 查详细报错,是排查服务异常的标准流程。

2. 按时间范围筛选

支持人性化时间语法,无需计算时间戳,灵活筛选指定时段日志:

复制代码
 

查看今天所有日志 journalctl --since today # 查看最近1小时日志 journalctl --since "1 hour ago" # 查看昨天的日志 journalctl --since yesterday --until today # 指定精确时间范围 journalctl --since "2026-09-01 10:00:00" --until "2026-09-01 12:00:00"

复制代码
 

3. 按日志级别筛选(只看报错)

通过 -p 参数过滤日志等级,排查问题时直接过滤无效信息,只看错误、警告日志。
日志级别优先级(从低到高):debug < info < notice < warning < err < crit < alert < emerg

复制代码
 

只查看错误及以上级别日志(生产排查首选) journalctl -p err # 查看警告、错误日志 journalctl -p warning # 结合服务+时间+错误级别,精准排查 journalctl -u nginx --since "1 hour ago" -p err

复制代码
 

4. 按开机批次筛选日志

服务器重启后,旧日志不会丢失,可通过开机批次回溯历史启动日志,专治开机启动失败、重启报错问题。

复制代码
 

查看所有开机记录 journalctl --list-boots # 查看本次开机以来的所有日志 journalctl -b # 查看上一次开机的日志(排查重启前的报错) journalctl -b -1 # 查看两次开机前的日志 journalctl -b -2

复制代码
 

5. 高级筛选:按进程、用户、内核

复制代码
 

查看内核日志(等价于 dmesg) journalctl -k # 查看 root 用户(UID=0)的所有日志 journalctl _UID=0 --since today # 查看指定进程的日志 journalctl _PID=1234

复制代码
 

四、实用输出格式优化

默认日志格式冗长,可自定义输出格式,适配不同排查场景:

复制代码
 

简洁模式:只输出日志内容,隐藏多余元数据 journalctl -u nginx -o cat # JSON 格式输出(适合程序解析、日志对接) journalctl -u nginx -o json-pretty # 完整详细格式(排查疑难杂症用) journalctl -o verbose

复制代码
 

五、日志导出与清理(生产关键)

1. 导出日志备份

排查问题后可导出指定日志,用于留存、复盘、上报:

复制代码
 

导出今日 Nginx 错误日志到文件 journalctl -u nginx --since today -p err > nginx-error.log

复制代码
 

2. 手动清理旧日志(避免磁盘爆满)

journalctl 日志默认持续累积,长期不清理会占用大量磁盘空间,生产环境必须定期维护:

复制代码
 

只保留最近 100M 日志 journalctl --vacuum-size=100M # 只保留最近 1 个月日志 journalctl --vacuum-time=1month # 只保留最近 7 天日志 journalctl --vacuum-time=7d

复制代码
 

3. 永久配置日志大小限制(推荐)

修改配置文件,永久限制日志最大占用空间,自动清理过期日志:

复制代码
 

编辑配置文件 vim /etc/systemd/journald.conf # 修改以下参数 SystemMaxUse=500M # 日志最大占用500M SystemMaxFileSize=100M # 重启服务生效 systemctl restart systemd-journald

复制代码
 

六、生产高频排查场景(直接复制即用)

整理运维日常最常用的组合命令,直接适配各类故障排查场景:

复制代码
 

1. 实时监控 SSH 登录报错 journalctl -u sshd -f -p err # 2. 排查 Nginx 最近1小时所有错误日志 journalctl -u nginx --since "1 hour ago" -p err -r # 3. 查看服务器上次开机的启动报错 journalctl -b -1 -p err # 4. 查看今日系统所有严重错误 journalctl --since today -p crit # 5. 实时监控自定义服务日志 journalctl -u myserver.service -f

复制代码
 

七、常见踩坑与注意事项

  • 权限问题 :普通用户执行部分筛选命令可能无结果,排查系统日志建议加 sudo
  • 日志丢失问题 :部分极简系统默认关闭持久化日志,重启后日志清空。开启方式:修改 /etc/systemd/journald.conf,设置 Storage=persistent
  • 分页卡顿 :日志量过大时,加 --no-pager 直接一次性输出,避免分页卡顿
  • 区分大小写 :服务名必须准确,如 sshd.service 不能写成 ssh.service

八、命令速查表(收藏备用)

命令 作用
journalctl -r 倒序查看日志(最新在前)
journalctl -f 实时监控日志
journalctl -u 服务名 筛选指定服务日志
journalctl -p err 只查看错误级别日志
journalctl -b 查看本次开机日志
journalctl --since "1 hour ago" 筛选指定时间范围日志
journalctl --vacuum-size=100M 清理旧日志,保留指定大小

总结

journalctl 是现代 Linux 系统的日志核心工具,相比传统文本日志,具备统一、精准、高效、可回溯的优势。掌握这套用法,可覆盖 99% 的服务器日志排查场景,彻底告别挨个找日志文件、疯狂 grep 的低效操作。
日常排查优先记住核心组合:服务筛选 + 时间范围 + 错误级别 + 实时监控,足够应对所有生产故障。

相关推荐
Lsetea4 天前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls
fox_charon6 天前
Windows 下 CLI 参数的引号陷阱:为什么 --resume 'uuid' 会失败
windows·shell·cmd·cli·引号
吴声子夜歌15 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌16 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌16 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌16 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌17 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌17 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生17 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌20 天前
Shell编程实例——bash入门
linux·运维·shell