首页/系统/信创系统运维速查/journalctl 日志查询基础
服务与运维65 条

journalctl 日志查询基础

systemd 日志统一入口:-u 按服务、-f 实时跟踪、-p 过滤级别、-n 限量、--no-pager 便于复制与脚本处理;麒麟、UOS、openEuler 通用。

信创系统运维速查系统更新于 2026-10-13

journalctl 是什么

journalctl 是 systemd-journald 的查询客户端。systemd 把内核日志、服务标准输出、syslog 消息统一收进结构化日志库,每条记录都带来源、优先级、进程号、启动会话等元数据字段,因此可以按服务、按级别、按时间精确过滤,不必像翻 /var/log/messages 那样全文搜索。日志默认存在 /run/log/journal 下的内存文件系统里,机器重启即清空;要让历史日志落盘,需要启用持久化存储。麒麟 V10、UOS 服务器版、openEuler 都是同一套机制,用法一致。

基本信息

所属组件systemd-journald
适用平台Kylin V10 / UOS 服务器版 / openEuler / CentOS 7+
默认日志位置/run/log/journal(内存,重启清空)
语法journalctl [选项] [匹配字段=值]
权限root 或 systemd-journal 组、adm 组成员可看全部日志

典型使用场景

  • 服务启动失败时定位原因:先 status 看提示,再用 -u 单元名 把该服务的日志单独拉出来
  • 实时跟踪:部署或复现问题时用 -f 持续输出,等价于 tail -f 但带结构化字段
  • 缩小范围:用 -b 只看本次启动的日志,用 --since 卡住变更时间点,避免被历史信息淹没
  • 按级别筛错误:-p err 只保留错误及以上,快速判断规模
  • 排查内核与硬件问题:-k 只看内核环形缓冲转过来的消息
  • 脚本与工单取证:--no-pager 加 -o short-iso 输出可复制的纯文本,时间带时区便于跨系统对账

常用用法

常用用法
journalctl -u nginx -n 100 --no-pager        # 该服务最近 100 行
journalctl -u nginx -f                        # 实时跟踪该服务
journalctl -p err -b --no-pager               # 本次启动的错误级日志
journalctl -xe                                # 最近错误并展开上下文,排障首选
journalctl --since "1 hour ago" --until now   # 按时间窗口
journalctl -o short-iso -n 50 --no-pager      # 时间带时区的易读格式
journalctl -u nginx --since "2026-10-13 08:00" --until "2026-10-13 09:00"   # 精确窗口
journalctl --disk-usage                       # 当前日志占用的磁盘空间

常用选项逐项

选项作用使用提示
-u 单元按服务过滤可写多个 -u,等于取并集
-b限定某次启动会话-b -1 上次启动,-b -2 再上一次
-f持续跟踪新日志按 Ctrl+C 退出,不产生分页
-p 级别按优先级过滤emerg/alert/crit/err/warning/notice/info/debug
--since/--until时间范围接受 1 hour ago、2026-10-13 08:00 等写法
-o 格式输出格式short-iso 带时区,cat 最简,json-pretty 看全字段
-n 行数限制输出条数默认 10 行,脚本里建议显式指定

按字段定位进程

按字段定位进程
journalctl _PID=1234                       # 只看某个进程号写的日志
journalctl _COMM=mysqld -n 200             # 按可执行文件名过滤
journalctl -u myapp -o json-pretty         # 展开全部结构化字段
journalctl -u nginx | grep -i upstream     # 在结果里做二次过滤
输出被 pager 接管时长行会截断、复制困难,脚本或粘贴场景一律加 --no-pager;如果只关心错误,用 -p err -b 比翻全量日志快得多。日志占满磁盘时先看 --disk-usage,再按保留策略清理。
默认日志在内存里,重启即丢,线上事故回溯常常因此断档。生产环境应确认持久化已开启(/var/log/journal 目录存在或 journald 配置了持久化存储),否则重启后只能靠其它日志系统兜底。

排障时的取日志顺序

  • 先用 -xe 看最近的错误与其上下文,拿第一手线索
  • 再按服务过滤:-u 服务名 -n 100 拿到包含程序自身输出的完整记录
  • 用 -b 限定本次启动,排除上一轮遗留信息造成的误判
  • 用 --since 卡住变更时间点,例如部署前后各五分钟
  • 把结果重定向到文件再 grep 二次过滤,避免分页器干扰
优先级代表严重程度:emerg、alert、crit 属于严重级别,err 是可确认的错误,warning 多为可恢复异常,notice 与 info 是常规记录,debug 默认通常不落盘。用 -p err 过滤一遍,能迅速判断是单点报错还是成片故障。
同一台机器上多个程序往 syslog 写日志时,用标识过滤比按单元过滤更直接:-t 标识 按程序自己的标识名筛选,适合脚本、计划任务这类没有独立单元的进程;再配合 -n 与时间范围,就能把某一次执行产生的记录单独取出来核对。

易错点

  • 只看 /var/log/messages 不看 journalctl:服务直接输出到标准错误的内容不会进 syslog 文本文件,会漏掉关键报错
  • 忘了 --no-pager,日志被分页器接管导致复制粘贴被截断,截图交给同事后信息不完整
  • 用 -n 默认 10 行去判断启动失败原因,往往是历史错误在前、真正原因被挤掉,应给到 100 行以上
  • 日志不落盘时机器一重启线索全无,排查高抖动机器问题前先确认持久化状态

数据来源与参考

  • man 1 journalctl
  • openEuler 文档:journalctl 日志管理
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌