Linux 日志神器 journalctl 完全指南:告别杂乱的 /var/log

18次阅读
没有评论

Linux 运维、服务器排查故障的小伙伴,大概率都有过这样的经历:系统报错后,翻遍 /var/log 目录下的一堆日志文件,messagessecure、服务专属日志混杂在一起,格式不统一、查询繁琐、新旧日志混乱,排查问题效率极低。

从 CentOS 7、Ubuntu 16.04 等新版本系统开始,systemd 接管了系统与服务的所有日志管理工作,而 journalctl 就是配套的日志查询、管理核心工具。它彻底颠覆了传统文本日志的管理模式,统一收集系统内核、系统启动、所有服务、进程的日志,支持精准筛选、时间检索、优先级过滤,是线上故障排查的必备神器。今天就带大家从零吃透 journalctl 的核心用法。

一、什么是 journalctl?核心优势是什么?

journalctl 是 systemd 体系下的统一日志查看工具,所有基于 systemd 启动的进程、系统服务、内核运行日志,都会被 journald 服务统一收集、结构化存储,摒弃了传统分散的文本日志模式。

对比传统 /var/log 日志,它的核心优势非常突出:

  • 日志统一归集:内核日志、系统启动日志、所有 systemd 服务日志、用户进程日志全部汇总,无需切换多个日志文件
  • 结构化存储:二进制格式存储日志,自带时间戳、进程ID、服务名、日志优先级等元数据,筛选精度远超文本日志
  • 灵活筛选能力:支持按时间、服务、PID、日志级别、用户ID 多维度精准过滤
  • 持久化可控:支持自动日志轮转、手动清理、日志大小限制,避免磁盘爆满
  • 实时监控便捷:替代 tail -f,支持实时刷新日志,适配调试、故障实时排查场景

简单说:所有系统问题,用 journalctl 基本都能一站式查到日志,不用再到处找文件。

二、基础入门:最简常用命令

首先掌握基础用法,快速上手查看系统日志,所有命令默认需要 root 权限,普通用户建议加 sudo 执行。

1. 查看全部系统日志

journalctl

直接执行会输出系统所有归档日志,按时间顺序排列,默认分页展示,支持上下翻页、搜索。

2. 实时监控日志(替代 tail -f)

journalctl -f

高频实用命令!实时刷新最新系统日志,调试服务、复现报错时使用,退出按 Ctrl+C

3. 查看内核日志(替代 dmesg)

journalctl -k

专门筛选内核层面的日志,排查内核崩溃、硬件异常、驱动故障必备。

4. 查看本次开机所有日志

journalctl -b

-b 代表本次系统启动,只展示开机后的所有日志,过滤掉历史旧日志,专注本次运行状态。

拓展:查看上一次开机的日志(排查开机崩溃、重启故障)

journalctl -b -1

三、核心进阶:精准筛选日志(排查故障核心)

journalctl 最强大的能力就是多维度精准筛选,日常排查服务报错、程序异常,全靠这些命令。

1. 按服务筛选:查看指定服务日志

排查 Nginx、Docker、MySQL、kubelet 等 systemd 服务日志,最常用参数 -u

# 查看 Nginx 服务日志
journalctl -u nginx.service

# 查看 Docker 服务日志
journalctl -u docker.service

# 组合:本次开机 + 指定服务 + 最新500行
journalctl -b -u nginx -n 500

2. 按时间筛选:定位特定时间段故障

线上故障大多需要回溯特定时间点日志,journalctl 支持人性化时间参数,无需手写时间戳:

# 查看今天所有日志
journalctl --since today

# 查看昨天所有日志
journalctl --since yesterday

# 查看近2小时日志
journalctl --since "2 hours ago"

# 精准时间区间
journalctl --since "2026-07-29 10:00:00" --until "2026-07-29 12:00:00"

# 组合筛选:Nginx 近2天警告及以上日志
journalctl -u nginx --since "2 days ago" -p warning

3. 按日志级别筛选:只看错误、警告

日志优先级从高到低分为 0-7 八个等级,可精准过滤无效日志,只关注报错信息:

  • 0:emerg(系统崩溃)
  • 1:alert(必须立即处理)
  • 2:crit(严重错误)
  • 3:err(普通错误,日常排查核心)
  • 4:warning(警告信息)
  • 5-7:notice、info、debug(普通日志、调试日志)
# 查看本次开机所有错误及以上级别日志
journalctl -b -p err

# 查看上一次开机内核崩溃、错误日志
journalctl -b -1 -p err -k

4. 按进程/用户筛选

排查特定进程、指定用户运行程序的日志:

# 查看指定 PID 进程日志
journalctl _PID=1234

# 查看指定 UID 用户的所有日志
journalctl _UID=1000

四、日志输出格式与可视化

journalctl 支持多种输出格式,适配人工查看、程序解析、日志分析等不同场景,通过 -o 参数切换:

# 默认简短格式(简洁易懂,日常查看首选)
journalctl -o short

# 完整格式(展示所有日志元数据)
journalctl -o verbose

# JSON 格式(结构化数据,适配自动化运维、日志采集)
journalctl -o json

# 格式化 JSON(方便人工查看结构化日志)
journalctl -o json-pretty

# 纯文本格式(只输出日志内容,无多余字段)
journalctl -o cat

同时支持组合过滤,搭配 grep 精准匹配关键词:

# 筛选 Nginx 500 报错日志
journalctl -u nginx | grep "500 Internal Server Error"

五、日志管理:清理、轮转、空间管控

journal 日志默认二进制存储在 /var/log/journal,长期运行会占用大量磁盘空间,必须掌握日志清理与管控方法。

1. 查看日志占用磁盘空间

journalctl --disk-usage

2. 手动清理日志

# 保留最新100M日志,删除旧日志
journalctl --vacuum-size=100M

# 保留近7天日志,删除更早日志
journalctl --vacuum-time=7d

3. 永久配置日志最大占用(推荐)

编辑 journald 配置文件,永久限制日志存储空间,避免磁盘爆满:

# 编辑配置文件
vim /etc/systemd/journald.conf

# 修改以下参数,自定义限制
SystemMaxUse=500M    # 日志最大占用500M
SystemMaxFileSize=100M  # 单个日志文件最大100M

# 重启服务生效
systemd restart systemd-journald

六、常见问题与实用技巧

1. 日志显示不完整、被截断

默认分页模式会截断长日志,添加参数完整输出:

journalctl --no-pager

2. 无法查看历史归档日志

默认只加载部分日志,添加参数加载全部归档日志:

journalctl -a

3. 开机日志乱序、信息杂乱

搭配排序与搜索,精准定位启动异常:

# 查看本次开机所有服务启动日志
journalctl -b | grep "Starting"

七、总结:日常运维高频命令清单

最后整理一份高频刚需命令,直接收藏复用,覆盖90%运维排查场景:

# 实时监控日志
journalctl -f

# 本次开机错误日志
journalctl -b -p err

# 查看指定服务最新日志
journalctl -u nginx -b -n 300

# 近1天服务报错日志
journalctl -u docker --since "1 day ago" -p err

# 清理过期日志
journalctl --vacuum-size=200M

# 查看磁盘占用
journalctl --disk-usage

写在最后

journalctl 作为 systemd 时代的标准日志工具,相比传统日志体系,极大降低了 Linux 日志排查的门槛,统一、高效、精准是它的最大亮点。熟练掌握时间筛选、服务筛选、日志级别过滤这三大核心能力,基本可以搞定绝大多数服务器故障排查场景。

如果你还在依赖 grep 翻杂乱的文本日志,赶紧切换 journalctl,运维效率会直接翻倍!

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码