Administrator
发布于 2025-08-08 / 2 阅读
0
0

journalctl教程

journalctl 是 Linux 系统中用于查询 systemd-journald 服务收集的日志的命令行工具,它统一管理系统、服务、内核等各类日志,支持灵活的筛选和查询,是排查系统问题的核心工具之一。

一、基本用法

1. 查看所有日志(默认按时间倒序)

journalctl
  • q 退出查看,按 ↑↓ 滚动,按 G 跳至末尾,按 g 跳至开头。

2. 按时间正序查看(从最早开始)

journalctl --no-pager  # 不进入分页模式,直接输出
journalctl -r          # 反向查看(默认是倒序,-r 更明确)
journalctl --reverse   # 同上,反向显示(最新日志在前)

二、按服务 / 单元筛选

1. 查看指定服务的日志(最常用)

journalctl -u 服务名.service  # .service 可省略
# 示例:查看 nginx 服务日志
journalctl -u nginx
# 示例:查看 sshd 服务日志
journalctl -u sshd

2. 查看系统单元(如定时器、挂载点)的日志

# 查看定时器单元日志
journalctl -u certbot.timer
# 查看挂载单元日志
journalctl -u mnt-data.mount

三、按时间筛选

1. 查看最近一段时间的日志

# 最近 1 小时
journalctl --since "1 hour ago"
# 最近 30 分钟
journalctl --since "30 minutes ago"
# 今天的日志
journalctl --since today
# 昨天的日志
journalctl --since yesterday --until today

2. 查看具体时间范围的日志

# 2024-08-01 08:00 到 2024-08-01 12:00
journalctl --since "2024-08-01 08:00" --until "2024-08-01 12:00"
# 昨天 18:00 到现在
journalctl --since "yesterday 18:00"

四、实时监控日志(类似 tail -f)

# 实时跟踪所有日志
journalctl -f
# 实时跟踪指定服务日志(如 nginx)
journalctl -u nginx -f

五、按日志级别筛选(错误、警告等)

日志级别从低到高:debug(调试)、info(信息)、notice(通知)、warning(警告)、err(错误)、crit(严重)、alert(警报)、emerg(紧急)。

# 只看错误及以上级别日志(err, crit, alert, emerg)
journalctl -p err
# 只看警告及以上级别(warning, err, ...)
journalctl -p warning
# 结合服务和级别:查看 nginx 的错误日志
journalctl -u nginx -p err

六、按进程 / 用户 / 内核筛选

# 查看指定进程(PID)的日志
journalctl _PID=1234
# 查看指定用户(UID)的日志
journalctl _UID=1000
# 查看内核日志(类似 dmesg)
journalctl -k
# 查看最近的内核错误
journalctl -k -p err

七、日志输出格式与保存

1. 自定义输出格式

# 简洁格式(仅时间、主机、服务、消息)
journalctl -o short
# 详细格式(含 PID、UID、日志级别等)
journalctl -o verbose
# JSON 格式(便于解析)
journalctl -o json

2. 保存日志到文件

# 保存 nginx 错误日志到文件
journalctl -u nginx -p err > nginx_errors.log

八、日志清理与管理

默认日志由 systemd-journald 自动管理,可手动限制大小或清理:

# 保留最近 100MB 日志
sudo journalctl --vacuum-size=100M
# 保留最近 7 天的日志
sudo journalctl --vacuum-time=7d
# 强制轮转日志(立即切割当前日志)
sudo journalctl --rotate

九、注意事项

  1. 权限:部分日志(如系统级错误)需要 root 权限,需加 sudo

  2. 日志存储:默认日志可能保存在内存(重启丢失)或磁盘(/var/log/journal/,需启用持久化)。 启用磁盘存储:sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald

  3. 性能:日志量过大时,可通过时间、级别等条件缩小范围,避免查询缓慢。

journalctl 几乎覆盖了所有日志查询场景,熟练使用能极大提升系统问题排查效率。


评论