为什么要用 journalctl?在 Systemd 统治主流 Linux 发行版的今天,几乎所有服务都由 Systemd 管理。journalctl的核心优势在于统一视图和结构化查询。 为什么要用 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这条命令会自动聚合该服务从安装到现在的所有日志并按时间顺序排列。2. 实时监控替代 tail -f需要盯着日志看实时请求吗-f参数是你的好帮手# 实时追踪 Docker 服务的日志 journalctl -u docker -f这比tail -f更强大因为它不仅实时还能结合后面的过滤条件。3. 时间范围筛选杀手锏这是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