Linux上查看systemd journald日志

Linux上查看systemd journal日志的方法非常丰富,从基础查看筛选过滤指定文件查看三个维度总结相关内容:

📋 一、基础查看方法

1. 基本查看命令

bash 复制代码
# 查看所有日志
sudo journalctl

# 实时查看新日志
sudo journalctl -f

# 查看本次启动后的日志
sudo journalctl -b

# 查看前一次启动的日志(需要持久化存储)sudo journalctl -b -1

# 查看导出的独立的.journal文件,--file选项,可一次性打开多个,多个文件中日志全部按照时间排序显示
 journalctl --file user-1000.journal --file system.journal

2. 控制输出格式

bash 复制代码
# 简短格式(默认)
sudo journalctl -n 10

# JSON格式(适合程序处理)
sudo journalctl -n 3 -o json

# JSON美化输出
sudo journalctl -n 3 -o json-pretty

# 详细输出(显示所有字段)
sudo journalctl -n 3 -o verbose

# 仅输出原始消息
sudo journalctl -n 3 -o cat

🎯 二、筛选过滤日志

1. 按时间筛选

bash 复制代码
# 查看最近2小时的日志
sudo journalctl --since "2 hours ago"

# 查看指定时间范围的日志
sudo journalctl --since "2024-01-15 09:00:00" --until "2024-01-15 10:00:00"

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

# 查看昨天日志
sudo journalctl --since yesterday --until today

# 查看最近10分钟
sudo journalctl --since "-10min"

2. 按服务/单元筛选

bash 复制代码
# 查看指定服务的日志
sudo journalctl -u nginx.service

# 查看多个服务的日志
sudo journalctl -u nginx.service -u mysql.service

# 查看所有失败的单元
sudo journalctl --failed

3. 按优先级筛选

bash 复制代码
# 查看紧急错误(优先级数字0-3)
sudo journalctl -p err

# 查看警告及以上级别
sudo journalctl -p warning

# 查看特定级别
# 级别:emerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7)
sudo journalctl -p 0..3

4. 按字段内容筛选

bash 复制代码
# 按进程ID筛选
sudo journalctl _PID=1234

# 按用户ID筛选
sudo journalctl _UID=1000

# 按可执行路径筛选
sudo journalctl _EXE=/usr/sbin/nginx

# 按命令行筛选
sudo journalctl _COMM=sshd

# 组合多个条件
sudo journalctl _UID=1000 _PID=1234

5. 按关键字/模式筛选

bash 复制代码
# 查找包含关键字的日志
sudo journalctl -k
sudo journalctl | grep "error"

# 使用正则表达式
sudo journalctl -g "error|fail"

# 反向匹配(排除某些内容)
sudo journalctl -u sshd --grep="Failed" --invert-match

6. 按引导(Boot)筛选

bash 复制代码
# 列出所有启动记录
sudo journalctl --list-boots

# 查看指定启动的日志(-0当前,-1上一次,-2上上次)
sudo journalctl -b -2

# 查看指定启动ID的日志
sudo journalctl -b 3a176f8c5d874c8a9e234b5c8d5e6f7a

📂 三、查看指定日志文件

1. 指定持久化日志文件

bash 复制代码
# 查看特定机器ID的日志文件
sudo journalctl --file=/var/log/journal/<machine-id>/system.journal

# 查看用户日志文件
sudo journalctl --file=/var/log/journal/<machine-id>/user-1000.journal

# 查看所有持久化日志文件
sudo journalctl --directory=/var/log/journal/

# 查看特定目录下的所有日志
sudo journalctl --directory=/var/log/journal/<machine-id>/

2. 指定运行时日志文件

bash 复制代码
# 查看运行时(内存)日志文件
sudo journalctl --file=/run/log/journal/<machine-id>/system.journal

# 合并查看多个日志文件
sudo journalctl --file=/var/log/journal/*/*.journal

3. 指定远程日志文件

bash 复制代码
# 查看远程主机的日志文件(需要预先复制文件)
sudo journalctl --file=remote-system.journal

# 从备份中查看日志
sudo journalctl --file=/backup/journal/system.journal

🔧 四、高级组合查询

1. 组合查询示例

bash 复制代码
# 查询nginx服务今天产生的错误日志
sudo journalctl -u nginx.service --since today -p err

# 查询指定时间段内特定进程的日志
sudo journalctl _PID=1234 --since "09:00" --until "10:00"

# 查看系统启动时内核相关错误
sudo journalctl -b -p err -k

# 查看指定用户产生的SSH登录失败
sudo journalctl _UID=1000 _COMM=sshd --grep="Failed"

2. 保存和导出日志

bash 复制代码
# 保存日志到文件
sudo journalctl --since "2024-01-01" > journal-2024.log

# 导出为JSON格式
sudo journalctl --since "2024-01-01" -o json > journal-2024.json

# 仅导出特定字段
sudo journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID > filtered.log

3. 日志分析和统计

bash 复制代码
# 统计各优先级日志数量
sudo journalctl --since "1 hour ago" -o json | jq '._PID,.PRIORITY,.MESSAGE'

# 查看日志磁盘使用情况
sudo journalctl --disk-usage

# 查看日志文件信息
sudo journalctl --header

# 验证日志文件完整性
sudo journalctl --verify

💡 五、实用技巧和小贴士

1. 快速定位问题

bash 复制代码
# 查看最新的50条错误
sudo journalctl -p err -n 50

# 追踪特定服务的实时日志
sudo journalctl -u docker.service -f

# 查看系统启动最耗时的服务
sudo journalctl -b | grep "Starting.*\.service" | tail -20

2. 配置相关查看

bash 复制代码
# 查看journald服务自身的日志
sudo journalctl -u systemd-journald

# 查看配置变更
sudo journalctl -u systemd-journald --grep="config\|storage\|directory"

3. 特殊查询语法

bash 复制代码
# +号表示"且"关系
sudo journalctl _UID=1000 + _PID=1234

# 使用OR操作
sudo journalctl '(_UID=1000 OR _UID=0)'

# 字段值包含特定字符串
sudo journalctl MESSAGE=*error*

4. 清理和管理日志

bash 复制代码
# 清理旧的日志(保留最近2周)
sudo journalctl --vacuum-time=2weeks

# 清理日志到指定大小
sudo journalctl --vacuum-size=500M

# 手动轮转日志
sudo journalctl --rotate

📊 六、可视化工具(可选)

如果需要图形界面,可以考虑:

bash 复制代码
# 方式1:
sudo apt install systemd-journal-remote
# 使用systemd-journal-gatewayd(Web界面)
sudo systemctl start systemd-journal-gatewayd
# 然后浏览器访问 http://localhost:19531

# 方式2:创建简单Web服务(端口8080)
python3 -m http.server 8080 --directory /var/log/journal/ & 
# 注意:这需要适当的权限和安全配置
# 然后浏览器访问 http://localhost:8080


# 使用journalctl配合less查看
sudo journalctl --since "1 hour ago" | less -S

# 导出后用其他工具分析
sudo journalctl --since "2024-01-01" -o json > logs.json
# 然后用jq、Python pandas等工具分析

🚀 快速参考表

用途 命令示例
实时查看 sudo journalctl -f
按服务查看 sudo journalctl -u nginx
按时间查看 sudo journalctl --since "2 hours ago"
按优先级 sudo journalctl -p err
查看启动日志 sudo journalctl -b
查看前次启动 sudo journalctl -b -1
查看指定文件 sudo journalctl --file=/path/to/journal/file
按进程ID sudo journalctl _PID=1234
搜索关键词 sudo journalctl -g "error"
导出日志 sudo journalctl > output.log
清理旧日志 sudo journalctl --vacuum-time=2weeks

⚠️ 重要注意事项

  1. 权限要求 :大多数journalctl命令需要sudo或root权限
  2. 持久化存储 :查看历史启动日志(如-b -1)需要启用持久化存储
  3. 时间格式 :时间参数支持灵活格式,如"yesterday""1 hour ago""2024-01-15 09:00:00"
  4. 机器ID :每个系统有唯一的机器ID,位于/etc/machine-id,日志目录以此命名

根据具体需求,可以组合使用这些命令来精确查找和分析系统日志。

相关推荐
研华嵌入式2 小时前
Ubuntu 20.04 停止支持怎么办?
linux·运维·ubuntu
是阿威啊3 小时前
【第二站】本地hadoop集群配置yarn模式
大数据·linux·hadoop·yarn
野熊佩骑3 小时前
一文读懂运维监控之 Ubuntu22.04安装部署Zabbix监控
linux·运维·服务器·网络·ubuntu·zabbix·database
双层吉士憨包3 小时前
Claude账号共享教程分享
运维·服务器
大聪明-PLUS3 小时前
了解 Docker:镜像是如何创建的
linux·嵌入式·arm·smarc
lllsure4 小时前
Linux 日志管理
linux·运维·服务器
yewq-cn4 小时前
自动更新 Docker 镜像
运维·docker·容器
haluhalu.4 小时前
Linux系统下进程池设计与实现详解
linux·运维·服务器
m0_537473494 小时前
Nginx 生产环境平滑升级实战:从 1.24.0 到 1.28.0 的零宕机操作全记录
运维·nginx