









在 CentOS 7+、Ubuntu 16.04+ 现代 Linux 系统中,systemd 接管了系统和服务的所有管理工作,同时带来了全新的日志管理工具 journalctl。
以往我们排查问题,需要挨个查看/var/log/messages、/var/log/nginx、/var/log/secure 等零散日志文件,杂乱且低效。而 journalctl 统一收集系统、内核、所有服务、程序的日志,支持精准过滤、时间回溯、实时监控、日志归档,是运维、后端开发排查服务器问题的必备神器。
本文整理 零基础入门 → 高频实操 → 生产场景 → 日志清理优化 全套用法,看完直接告别传统日志排查方式。
journalctl 是 systemd 配套的日志查看工具,系统所有组件的日志都会统一写入 /var/log/journal/ 二进制日志文件,不再散落各处。
区别于传统文本日志,它存储的是结构化二进制日志,自带元数据(服务名、进程ID、用户ID、日志级别、时间戳),支持精准筛选,效率远超 grep 文本检索。
统一管理:系统日志、内核日志、所有自定义服务日志全部整合
精准过滤:按服务、时间、日志级别、进程、用户精准筛选
开机回溯:可查看历史开机的日志,排查开机启动故障
实时监控:类似 tail -f,实时输出最新日志
自动归档:支持限制日志大小、过期自动清理,避免磁盘爆满
直接执行命令,输出系统所有日志,按时间正序展示(旧日志在前,新日志在后):
journalctl
默认进入分页模式,操作快捷键:
空格:翻页
回车:逐行下滑
q:退出查看
默认日志从旧到新,排查问题不方便,-r 参数反向输出,最新日志优先展示:
journalctl -r
等价于 tail 命令,快速查看最新日志:
# 查看最后100行日志 journalctl -n 100 # 默认查看最后10行 journalctl -n
等价于 tail -f,实时刷新最新日志,适合动态排查服务报错:
journalctl -f
通过 -u 参数指定 systemd 服务,只查看对应服务日志,精准定位问题。支持 Nginx、MySQL、SSH、自定义后台服务等。
# 查看 nginx 服务全部日志 journalctl -u nginx.service # 查看 ssh 服务实时日志 journalctl -u sshd.service -f # 同时查看多个服务日志 journalctl -u nginx -u mysql
💡 搭配 systemctl status 服务名,先看服务状态,再用 journalctl 查详细报错,是排查服务异常的标准流程。
支持人性化时间语法,无需计算时间戳,灵活筛选指定时段日志:
# 查看今天所有日志 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"
通过 -p 参数过滤日志等级,排查问题时直接过滤无效信息,只看错误、警告日志。
日志级别优先级(从低到高):debug < info < notice < warning < err < crit < alert < emerg
# 只查看错误及以上级别日志(生产排查首选) journalctl -p err # 查看警告、错误日志 journalctl -p warning # 结合服务+时间+错误级别,精准排查 journalctl -u nginx --since "1 hour ago" -p err
服务器重启后,旧日志不会丢失,可通过开机批次回溯历史启动日志,专治开机启动失败、重启报错问题。
# 查看所有开机记录 journalctl --list-boots # 查看本次开机以来的所有日志 journalctl -b # 查看上一次开机的日志(排查重启前的报错) journalctl -b -1 # 查看两次开机前的日志 journalctl -b -2
# 查看内核日志(等价于 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
排查问题后可导出指定日志,用于留存、复盘、上报:
# 导出今日 Nginx 错误日志到文件 journalctl -u nginx --since today -p err > nginx-error.log
journalctl 日志默认持续累积,长期不清理会占用大量磁盘空间,生产环境必须定期维护:
# 只保留最近 100M 日志 journalctl --vacuum-size=100M # 只保留最近 1 个月日志 journalctl --vacuum-time=1month # 只保留最近 7 天日志 journalctl --vacuum-time=7d
修改配置文件,永久限制日志最大占用空间,自动清理过期日志:
# 编辑配置文件 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 的低效操作。
日常排查优先记住核心组合:服务筛选 + 时间范围 + 错误级别 + 实时监控,足够应对所有生产故障。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。