当前位置:首页>Linux>Linux日志查询神器 journalctl:从入门到精通,排查问题不再慌

Linux日志查询神器 journalctl:从入门到精通,排查问题不再慌

  • 2026-10-11 08:31:16
Linux日志查询神器 journalctl:从入门到精通,排查问题不再慌

在系统运维中,日志排查是定位问题的关键步骤,无论是服务器崩溃、任务启动失败、网络异常,几乎所有问题都能在日志中找到蛛丝马迹。

提到linux日志,一般人首先想到/var/log目录下的messages、secure等文件,但这些传统日志分散且功能有限。而今天要讲的journalctl,作为systemd生态中核心日志管理工具,能轻松整合所有日志,过滤、查询、分析一步到位,堪称linux日志查询神器。

一、journalctl是什么

journalctl是systemd 系统中用于查询和管理日志的核心工具,它直接与systemd-journald服务交互,统一收集内核日志、系统服务日志、应用程序日志甚至用户操作日志,无需手动切换多个日志文件。

默认情况下,journalctl的日志存储在内存中,重启系统后日志会丢失。如果需要持久化存储(部分版本默认已经启用),只需使用root权限执行以下命令:

mkdir -p /var/log/journalsystemctl restart systemd-journald

执行后,日志会默认存储在/var/log/journal/目录下,重启后也不会丢失。

二、journalctl的三个基础用法

journalctl 的基础用法非常简单,主要是以下三个命令:

1. 查看所有日志

journalctl

可查看系统所有日志,默认按“从旧到新”的顺序分页显示。

  • 按 空格键:向下翻页;

  • 按 Page Up/Page Down:上下翻页;

  • 按 q:退出日志查看;

  • 按 /关键词:在日志中搜索关键词(按 n 下一个、N 上一个)。

2. 查看最新日志

-n选择查询多少条记录

#查看最近10条日志(默认10条)journalctl -n#查看最近20条日志journalctl -n 5

加上 -r 选项,可倒序显示日志(最新的日志在最前面),适合快速查看最新异常。

journalctl -n 10 -r

3. 实时跟踪日志

journalctl -fjournalctl -f -u sshd  #实时监控ssh,成功或者失败都会有记录

按 ctrl + c 可退出实时监控模式。

三、journalctl组合过滤

1. 按时间过滤

用 --since(开始时间)和 --until(结束时间)选项,可指定日志的时间范围,支持绝对时间和相对时间,非常灵活:

#查看今天的所有日志journalctl --since today#查看昨天的日志journalctl --since yesterday  #日志是昨天0点到今天现在截止 #查看最近1小时的日志journalctl --since "1 hour ago"#查看指定时间段的日志(绝对时间)journalctl --since "2026-04-20 09:00:00" --until "2026-04-20 21:00:00"

2. 按服务/单元过滤

-u 选项(u = unit,服务单元),可过滤指定服务的所有日志,这是排查服务启动失败、运行异常的核心用法:

#查看网卡服务的所有日志journalctl -u network#查看docker服务今天的错误日志(结合时间和优先级)journalctl -u docker --since today -p err#查看所有以ss*开头的服务日志(支持通配符)journalctl -u ss*

3. 按日志优先级过滤

#查看错误(err)及以上级别的日志,这个使用比较多 journalctl -p err#查看警告(warning)及以上级别的日志journalctl -p warning#查看紧急(emerg)级别的日志(系统严重故障)journalctl -p emerg

日志分为8个优先级(0-7),从高到低依次为emerg(紧急)、alert(警报)、crit(严重)、err(错误)、warning(警告)、notice(通知)、info(信息)、debug(调试)。用 -p 选项,可过滤指定优先级及以上的日志,重点排查错误和警告。

四、日志导出、清理与维护

除了查询日志,journalctl 还支持日志导出、清理、查看磁盘占用等功能,满足日志管理的全场景需求。

1. 导出日志

#导出network服务今天的日志到文本文件journalctl -u network --since today -o short > network-today.log#导出为 JSON格式,在脚本脚本解析中经常使用 journalctl -u network -o json > network.json#导出为格式化JSON,容易阅读 journalctl -u network -o json-pretty > network-pretty.json

2. 查看日志磁盘占用

journalctl --disk-usage

快速查看 journal 日志占用的磁盘空间。

3. 清理旧日志

#保留最近 100MB的日志journalctl --vacuum-size=100M#保留最近 1个月的日志(删除超出部分)journalctl --vacuum-time=1month#直接删除所有日志,谨慎操作 journalctl --vacuum-time=1s

如果服务器运行较长时间后,日志占用过多磁盘空间时,可通过以上命令清理旧日志。

五、实战案例

案例1:nginx 服务启动失败,排查原因

#查看nginx服务最近的错误日志,倒序显示20条journalctl -u nginx.service -p err -r -n 20

案例2:监控 SSH 登录,排查异常登录

# 实时监控SSH服务日志,查看登录情况journalctl -f -u sshd# 查看今天的 SSH 登录失败日志journalctl -u sshd --since today -g "failed"

案例3:系统启动失败,排查启动故障

#查看上一次启动的日志(系统崩溃后)journalctl -b -1#查看上一次启动的错误日志,重点排查故障journalctl -b -1 -p err

六、常见问题

问题1:执行 journalctl 无输出,显示 -- No entries --

解决:检查 systemd-journald 服务是否运行,重启服务即可:

systemctl status systemd-journaldsystemctl restart systemd-journald    

若仍无输出,可能是日志未持久化或者程序没有启动或者运行,还没有产生日志。  

问题2:普通用户无法查看系统日志

解决:将用户加入 systemd-journal、adm 或 wheel 特权组,或使用root执行 journalctl。      

备注:清理日志时需谨慎,避免误删重要日志;导出日志时,建议指定时间范围和服务,避免日志文件过大。

journalctl作为linux系统自带的日志工具,无需额外安装,功能却足够强大。掌握它的基础用法和过滤技巧,能让你在排查系统问题时少走弯路,效率翻倍。更多参数可通过 man journalctl 或 journalctl --help 查看。

如果觉得这篇文章对你日常运维有帮助,欢迎点赞+关注。

#运维#linux运维#journalctl

最新文章

随机文章