Journalctl Systemd 日志查看教程
Journalctl 是 Systemd 自带的日志查看工具,用于查询 systemd-journald 收集的所有系统和服务日志。与传统的文本日志文件不同,Journal 使用二进制格式存储,支持结构化查询和高效过滤。在搬瓦工 VPS 上,Journalctl 是排查服务故障、查看启动日志和进行安全审计的首选工具。
一、基本用法
# 查看所有日志(从旧到新)
journalctl
# 查看最新日志(倒序)
journalctl -r
# 查看最近 N 行
journalctl -n 50
# 实时跟踪日志(类似 tail -f)
journalctl -f
# 不分页直接输出
journalctl --no-pager
# 输出为 JSON 格式
journalctl -o json-pretty -n 5
二、按服务过滤
# 查看特定服务的日志
journalctl -u nginx
journalctl -u mysql
journalctl -u sshd
# 实时跟踪服务日志
journalctl -u nginx -f
# 查看多个服务
journalctl -u nginx -u php-fpm
# 查看最近 100 行服务日志
journalctl -u nginx -n 100
# 查看服务的错误日志
journalctl -u nginx -p err
三、按时间范围查询
# 今天的日志
journalctl --since today
# 昨天的日志
journalctl --since yesterday --until today
# 指定时间范围
journalctl --since "2026-03-01 00:00:00" --until "2026-03-01 23:59:59"
# 最近一小时
journalctl --since "1 hour ago"
# 最近 30 分钟
journalctl --since "30 min ago"
# 过去两天
journalctl --since "2 days ago"
四、按优先级过滤
日志优先级从 0(最紧急)到 7(调试):
# 只看错误及以上级别
journalctl -p err
# 只看警告及以上级别
journalctl -p warning
# 只看紧急和严重错误
journalctl -p crit
# 指定优先级范围
journalctl -p err..crit
# 某服务的错误日志
journalctl -u nginx -p err --since today
五、按进程和用户过滤
# 按 PID 过滤
journalctl _PID=1234
# 按用户过滤
journalctl _UID=1000
# 按可执行文件过滤
journalctl /usr/sbin/nginx
# 按主机名过滤
journalctl _HOSTNAME=my-vps
# 查看内核日志
journalctl -k
journalctl --dmesg
六、启动日志
# 查看本次启动的日志
journalctl -b
# 查看上次启动的日志
journalctl -b -1
# 查看所有启动记录
journalctl --list-boots
# 查看上次启动中的错误
journalctl -b -1 -p err
# 查看启动耗时
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
七、输出格式
# 简短格式(默认)
journalctl -o short
# 详细格式
journalctl -o verbose -n 5
# JSON 格式
journalctl -o json -n 5
# JSON 美化格式
journalctl -o json-pretty -n 5
# 只输出消息内容
journalctl -o cat -u nginx -n 10
# 导出日志
journalctl -u nginx --since today > /tmp/nginx-today.log
# 导出为 JSON
journalctl -u nginx -o json --since today > /tmp/nginx-today.json
八、磁盘空间管理
Journal 日志会占用大量磁盘空间,在搬瓦工 VPS 上需要合理控制:
8.1 查看日志占用
# 查看日志磁盘使用量
journalctl --disk-usage
8.2 清理日志
# 保留最近 7 天的日志
journalctl --vacuum-time=7d
# 限制日志总大小为 500MB
journalctl --vacuum-size=500M
# 保留最近 5 个归档文件
journalctl --vacuum-files=5
# 验证日志完整性
journalctl --verify
8.3 持久化配置
# 编辑 journald 配置
vi /etc/systemd/journald.conf
# 推荐配置
[Journal]
Storage=persistent
SystemMaxUse=500M
SystemMaxFileSize=50M
MaxRetentionSec=30day
MaxFileSec=1week
Compress=yes
ForwardToSyslog=yes
# 重启 journald 使配置生效
systemctl restart systemd-journald
九、实际运维场景
9.1 排查服务启动失败
# 查看服务状态
systemctl status nginx
# 查看服务最近的日志
journalctl -u nginx -n 50 --no-pager
# 查看服务启动时的错误
journalctl -u nginx -p err -b
# 实时监控服务重启
journalctl -u nginx -f &
systemctl restart nginx
9.2 安全审计
# 查看 SSH 登录记录
journalctl -u sshd --since today | grep "Accepted\|Failed"
# 查看 sudo 操作记录
journalctl _COMM=sudo --since "1 week ago"
# 查看认证失败记录
journalctl -u sshd -p warning --since "24 hours ago"
# 监控可疑登录
journalctl -u sshd -f | grep "Failed password"
9.3 系统问题诊断
# 查看 OOM(内存不足)事件
journalctl -k | grep -i "oom\|out of memory"
# 查看磁盘错误
journalctl -k | grep -i "error\|i/o"
# 查看网络相关日志
journalctl | grep -i "network\|eth0\|ens"
# 查看定时任务日志
journalctl -u cron --since today
十、与传统日志文件的对比
- 查询效率:Journalctl 的结构化查询远快于在文本文件中使用 grep。
- 存储格式:Journal 使用二进制格式存储,自动压缩,节省空间。
- 元数据:Journal 自动记录 PID、UID、服务名等元数据,方便过滤。
- 完整性:Journal 支持日志签名和验证,防止篡改。
总结
Journalctl 是现代 Linux 系统中查看和管理日志的核心工具。在搬瓦工 VPS 上,善用 Journalctl 的过滤和查询功能可以快速定位问题。注意合理控制日志磁盘占用,避免撑满磁盘。建议搭配 Rsyslog 日志管理 和 Logrotate 日志轮转 教程一起学习。选购搬瓦工 VPS 请参考全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 循环折扣。