惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
博客园_首页
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
MongoDB | Blog
MongoDB | Blog
美团技术团队
H
Help Net Security
G
Google Developers Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
M
MIT News - Artificial intelligence
腾讯CDC
IT之家
IT之家
Vercel News
Vercel News
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
I
InfoQ
博客园 - 司徒正美
A
About on SuperTechFans

博客园 - Swizard

还在被框架绑架?一文看懂“六边形架构”,让你的核心业务稳如泰山! 逐行解剖:扒开 Lovable Agent 源码,看顶级 AI 是如何“思考”与“动刀”的 还在无脑堆砌提示词?三分钟看懂 Vercel v0 价值千万的 System Prompt 底层逻辑 OpenClaw+OpenViking + NVIDIA API 配置教程 拒绝“挤牙膏”!用苏格拉底提示法,让 AI 从“复读机”进化为“咨询顾问” 别再写丑陋的 Shell 脚本了:用 Gum 给你的终端穿上“高定西装” 告别 sudo 滥用!用 gosu 优雅解决 Docker 容器权限的“千古难题” 拒绝视觉噪音:用“数据墨水比”法则重塑你的专业图表 告别 Git Stash:用 Git Worktree 实现多任务并行,效率起飞! 手机里的 Linux 实验室:Termux 让你随时随地开启“黑客”模式 拒绝“隐形”!用 JSON-LD 让你的网页在 Google 搜索结果中“自带光环” ⚔️ Google SGE vs. Perplexity:一场内容争夺战,两套生存法则 SEO 已死?拥抱 AEO/GEO:如何让 AI 主动“推荐”你的网站 Python 重构神器:告别 ast 模块的痛苦,三行代码搞定复杂批量修改 别再手写递归找文件了!用 Python rglob 一行代码搞定海量搜索 告别笨重的 For 循环:用 xargs 打造 Linux 命令行流水线神器 告别“断网即崩溃”:像存档游戏一样管理你的终端会话(Tmux 终极入门) 沉默的观察者:Multi-Agent 架构如何实现“零指令”主动服务? 杀死那个提示词框:揭秘“意图识别 + 动态组装”的幕后逻辑 UI 设计如何落地“Boss Mode”?告别聊天框的四个交互法则 用 100 倍 Token 换取 10% 体验:关于 AI Agent 的“暴力美学”
Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式
Swizard · 2026-09-15 · via 博客园 - Swizard

在 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 的低效操作。

日常排查优先记住核心组合:服务筛选 + 时间范围 + 错误级别 + 实时监控,足够应对所有生产故障。