什么要用 journalctl?
在 Systemd 统治主流 Linux 发行版的今天,几乎所有服务都由 Systemd 管理。journalctl的核心优势在于统一视图和结构化查询。

传统方式 journalctl 方式
需要切换到 /var/log目录 无需关心日志文件存储位置
使用 cat, less, tail -f组合拳 一条命令查看所有服务日志
跨文件查询极其困难 强大的过滤器和时间轴
回到顶部
核心功能速查
下面我们直接进入实战,看看如何用几条命令解决日常运维 90% 的问题。

  1. 精准定位服务日志
    以前查 Nginx 报错,你得去 /var/log/nginx/找;查 MySQL,又得去别的地方。现在,不管什么服务,只要它跑在 Systemd 上:

查看 Nginx 服务的所有日志

journalctl -u nginx

查看 MySQL 服务的所有日志

journalctl -u mysql
这条命令会自动聚合该服务从安装到现在的所有日志,并按时间顺序排列。

  1. 实时监控(替代 tail -f)
    需要盯着日志看实时请求吗?-f参数是你的好帮手:

实时追踪 Docker 服务的日志

journalctl -u docker -f
这比 tail -f更强大,因为它不仅实时,还能结合后面的过滤条件。

  1. 时间范围筛选(杀手锏)
    这是 journalctl最好用的功能之一。再也不用计算日志滚动了多少次,直接用自然语言查询:

查看今天的日志

journalctl --since today

查看昨天的日志

journalctl --since yesterday

查看过去一小时的日志

journalctl --since “1 hour ago”

查看指定时间段(非常适合排查事故时间点)

journalctl --since “2024-01-01 00:00:00” --until “2024-01-02 12:00:00”
回到顶部
进阶实战技巧
掌握了基础,我们再来看看如何提升效率。

结合 grep 进行关键词过滤
虽然 journalctl自带过滤,但配合 grep依然是最顺手的:

journalctl -u nginx | grep “500 Internal Server Error”
输出为 JSON(便于程序处理)
如果你在做自动化运维,想要结构化数据:

journalctl -u nginx -o json
禁用分页(用于脚本)
当你把日志结果通过管道传给其他工具时,关闭分页器:

journalctl --no-pager -u nginx
回到顶部
总结
journalctl不仅仅是一个日志查看工具,它是 Linux 系统可观测性的重要一环。通过掌握 -u(服务)、-f(实时)、–since(时间)这三个核心参数,你可以将故障排查的时间缩短一半。

建议: 下次登录服务器时,试着忘掉 /var/log,从 journalctl开始你的排查之旅吧!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐