journalctl——systemd日志查询工具详解
标签搜索

journalctl——systemd日志查询工具详解

mrui
2025-09-14 / 0 评论 / 21 阅读 / 正在检测是否收录...

journalctl是systemd日志系统的查询工具。当你某个服务启动失败或出现错误时,系统会提示你使用这个工具来排查。
mh30u4qd.png

使用grep、awk这类工具对日志进行处理时,可能遇到下面的情况导致排查困难。

  • 日志文件太大,grep半天没反应
  • 想看某个时间段的日志,结果要写一堆复杂的正则表达式
  • 系统重启后,之前的日志找不到了
  • 想看某个服务的完整日志链路,结果要翻好几个不同的文件

基础用法

直接使用journalctl命令,会看到系统从启动开始的所有日志。不过这样看起来会很乱,而且信息量巨大。

加个-f参数,就像tail -f一样,可以实时显示最新的日志。当怀疑某个服务有问题的时候,开着这个命令,然后去操作一下,立马就能看到相关的日志输出。

按时间查看日志

#查看今天的日志
journalctl --since today

#或者看昨天的:
journalctl --since yesterday

#看某个时间段的
journalctl --since "2024-01-15 14:00:00" --until "2024-01-15 15:00:00"

按服务查看日志

#只看nginx服务的日志
journalctl -u nginx

#实时监控某个服务:
journalctl -u nginx -f

#有时候一个服务重启了好几次,你想看它的历史记录:
journalctl -u nginx --since "1 hour ago"

进阶技巧

按优先级过滤

#只显示错误级别的日志
journalctl -p err

查看内核日志

journalctl -k

该命令等同于dmesg,但是journalctl的输出格式更友好,而且可以结合其他参数使用。

按进程ID查看
有时候你知道某个进程有问题,可以直接按PID查看:

journalctl _PID=1234

查看启动信息

想看系统启动过程中发生了什么:

journalctl -b

如果系统重启过多次,你想看上一次启动的日志:

journalctl -b -1

这个功能在排查系统启动异常时特别有用。

高级功能

JSON格式输出

有时候你需要程序化处理日志,可以用JSON格式:

journalctl -u nginx -o json

这样输出的每一行都是一个JSON对象,方便后续处理。

查看磁盘使用情况

journal日志会占用磁盘空间,你可以查看当前使用情况:

journalctl --disk-usage

如果空间不够,可以清理旧日志:

journalctl --vacuum-time=7d

只保留最近7天的日志。

导出日志

有时候需要把日志发给其他人分析:

journalctl -u myapp --since today > app_logs.txt

反向查看日志

从最新的日志开始看:

journalctl -r

这个在查看最近发生的问题时很有用。

配置优化

持久化存储

默认情况下,有些系统的journal日志是存储在内存中的,重启后就丢失了。要启用持久化存储:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

限制日志大小

编辑/etc/systemd/journald.conf:

SystemMaxUse=1G
SystemMaxFileSize=100M

这样可以避免日志占用太多磁盘空间。

常见问题和解决方案

日志查看权限问题

有时候普通用户看不到某些日志,需要加入systemd-journal组:

sudo usermod -a -G systemd-journal username

日志时间显示问题

如果时间显示不对,可能是时区设置问题:

journalctl --utc

使用UTC时间显示。

性能问题

如果journalctl查询很慢,可能是因为日志文件太大。可以考虑:

  • 清理旧日志
  • 调整日志级别
  • 使用更精确的过滤条件

一些小技巧

# 查看最近的错误日志,按时间倒序
journalctl -p err -r --since "1 hour ago"

# 查看某个用户的所有日志
journalctl _UID=1000

# 查看系统启动耗时
systemd-analyze blame
0

评论 (0)

取消