随机
Enter 搜索 ↑↓ 切换 Esc 清空

journalctl

命令

systemd 日志查看工具

journalctl

systemd 日志查看工具

补充说明

journalctl 是 systemd 的日志查看工具,用于查询和显示 systemd journal 日志。可以查看系统日志、服务日志、内核日志等。

语法

journalctl [OPTIONS...] [MATCHES...]

基本使用

# 查看所有日志
journalctl

# 查看最新日志
journalctl -n
journalctl -n 50                       # 最近 50 条
journalctl --lines=100

# 实时跟踪日志
journalctl -f
journalctl --follow

# 查看内核日志
journalctl -k
journalctl --dmesg

# 查看本次启动日志
journalctl -b
journalctl -b 0                        # 本次启动
journalctl -b -1                       # 上次启动
journalctl -b -2                       # 上上次启动

# 查看指定时间范围
journalctl --since "2024-01-01"
journalctl --since "2024-01-01 10:00:00"
journalctl --since "1 hour ago"
journalctl --since "yesterday"
journalctl --since today
journalctl --since "2024-01-01" --until "2024-01-02"
journalctl --since "09:00" --until "1 hour ago"

# 查看当前启动时间范围
journalctl --since "$(last reboot | head -1 | awk '{print $5, $6, $7, $8}')"

服务日志

# 查看指定服务日志
journalctl -u nginx
journalctl -u nginx.service
journalctl -u docker

# 查看多个服务日志
journalctl -u nginx -u php-fpm

# 实时跟踪服务日志
journalctl -u nginx -f

# 查看服务最近日志
journalctl -u nginx -n 50

# 查看服务启动以来的日志
journalctl -u nginx -b

# 查看服务失败日志
journalctl -u nginx --priority=err

# 查看多个单元
journalctl -u nginx -u mysql -u php

# 匹配单元模式
journalctl -u "docker*"

日志过滤

# 按优先级过滤
journalctl -p err                      # 错误级别
journalctl -p warning                 # 警告级别
journalctl -p info                    # 信息级别

# 优先级列表(从高到低)
# emerg    - 紧急:系统不可用
# alert    - 警报:必须立即处理
# crit     - 严重:严重错误
# err      - 错误:错误信息
# warning  - 警告:警告信息
# notice   - 通知:正常但重要
# info     - 信息:常规信息
# debug    - 调试:调试信息

# 范围过滤
journalctl -p err..alert              # 错误到警报
journalctl -p warning..crit

# 按进程 ID 过滤
journalctl _PID=1234

# 按可执行文件过滤
journalctl /usr/bin/nginx

# 按用户过滤
journalctl _UID=1000

# 按 group 过滤
journalctl _GID=1000

# 按设备过滤
journalctl /dev/sda

搜索过滤

# 搜索关键字
journalctl | grep "error"
journalctl | grep -i "nginx"

# 使用 --grep(需要 --since)
journalctl --since "1 hour ago" --grep "error"

# 过滤消息
journalctl MESSAGE="connection failed"

# 模糊匹配
journalctl MESSAGE=error

# 排除匹配
journalctl MESSAGE!="error"

# 组合过滤
journalctl -u nginx -p err

# 多字段过滤
journalctl _SYSTEMD_UNIT=nginx.service + _SYSTEMD_UNIT=php-fpm.service

输出格式

# JSON 输出
journalctl -o json
journalctl -o json-pretty
journalctl -u nginx -o json

# 导出格式(备份用)
journalctl -o export

# 详细输出
journalctl -o verbose

# 简洁输出(单行)
journalctl -o cat

# 指定输出字段
journalctl -o verbose --output-fields=MESSAGE,PRIORITY

# 显示完整信息
journalctl -o verbose -n 1

# 显示日志元数据
journalctl --output=verbose --no-pager -n 1

高级选项

# 显示日志字段
journalctl -F _SYSTEMD_UNIT
journalctl -F PRIORITY
journalctl -F _HOSTNAME

# 显示所有可用字段
journalctl --output=verbose -n 1 | grep '='

# 显示进程树
journalctl --cursor=file.cursor

# 显示所有引导
journalctl --list-boots

# 验证日志文件
journalctl --verify

# 磁盘使用
journalctl --disk-usage

# 清理日志(保留最近 N 天)
journalctl --vacuum-time=7d
journalctl --vacuum-time=1month

# 清理日志(保留最大大小)
journalctl --vacuum-size=100M
journalctl --vacuum-size=1G

# 限制日志大小(保留最近)
journalctl --vacuum-files=10

# 显示日志目录
journalctl --header

# 不分页显示
journalctl --no-pager

# 显示完整行(不截断)
journalctl --no-tail

常用组合

# 查看最近一小时错误日志
journalctl --since "1 hour ago" -p err

# 查看特定时间范围日志
journalctl --since "09:00" --until "18:00"

# 实时查看 nginx 错误
journalctl -u nginx -p err -f

# 查看某个服务的启动失败日志
journalctl -u nginx --since "1 hour ago" | grep -i "failed\|error"

# 查看本次启动错误
journalctl -b -p err

# 查看上次启动失败的日志
journalctl -b -1 -p err

# 查看内核错误
journalctl -k -p err

# 导出日志到文件
journalctl --since today > /tmp/today.log
journalctl --since "2024-01-01" --until "2024-01-02" -o json > logs.json

# 分析日志中的 IP 访问
journalctl -u nginx | grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sort | uniq -c | sort -nr

日志管理

# 查看日志大小
journalctl --disk-usage

# 清理旧日志
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M

# 配置日志保留
# /etc/systemd/journald.conf
SystemMaxUse=500M
RuntimeMaxUse=100M
MaxRetentionSec=7day

# 重启日志服务
sudo systemctl restart systemd-journald

# 查看日志配置
systemctl cat systemd-journald

# 日志文件位置
/var/log/journal/              # 持久化日志
/run/log/journal/              # 运行时日志