linux journalctl 命令
什么是 journalctl?
journalctl 是 linux 系统中用于查看和检索 systemd 日志的高效工具。作为 systemd 的一部分,它实现了统一的日志管理系统,取代了传统的 syslog 机制。
主要特性
- 二进制日志格式:采用二进制方式存储日志,提升查询效率
- 结构化信息支持:允许附加元数据和结构化字段
- 实时追踪功能:可动态监控日志更新
- 灵活过滤机制:支持按时间、服务名、优先级等条件筛选日志
基本语法
journalctl 的命令结构如下所示:
journalctl [选项] [匹配条件...]
常见参数说明
参数 | 描述 |
---|---|
`-b` | 显示当前系统启动后的日志 |
`-f` | 持续输出新增日志(类似 tail -f) |
`-k` | 仅显示内核相关消息 |
`-u` | 查看指定单元的日志 |
`-n` | 显示最近的n条记录 |
`–since` | 筛选指定时间之后的日志 |
`–until` | 筛选指定时间之前的日志 |
常用操作示例
1. 查看完整日志内容
示例
journalctl
2. 显示本次开机产生的日志
示例
journalctl -b
3. 实时跟踪日志变化
示例
journalctl -f
4. 查询特定服务日志
示例
journalctl -u nginx.service
5. 按时间段筛选日志
示例
journalctl –since “2023-01-01 00:00:00” –until “2023-01-02 12:00:00”
6. 过滤错误级别日志
示例
journalctl -p err
日志优先级筛选
journalctl 提供基于优先级的过滤能力,具体等级定义如下:
等级 | 数值 | 描述 |
---|---|---|
emerg | 0 | 紧急事件 |
alert | 1 | 需要立即处理 |
crit | 2 | 严重错误 |
err | 3 | 一般性错误 |
warning | 4 | 警告信息 |
notice | 5 | 需要注意的情况 |
info | 6 | 常规信息 |
debug | 7 | 调试信息 |
使用案例:
示例
# 查看错误及更高级别的日志
journalctl -p err
# 查看警告及以上级别的日志
journalctl -p warning
高级功能应用
1. 查看日志磁盘占用情况
示例
journalctl –disk-usage
2. 清理过期日志
示例
# 保留最近两天内的日志
journalctl –vacuum-time=2d
# 将日志总大小限制为500MB
journalctl –vacuum-size=500M
3. 输出json格式
示例
journalctl -o json
4. 展示完整字段详情
示例
journalctl -o verbose
5. 根据字段精确过滤
示例
# 查看指定进程ID的日志
journalctl _PID=1234
# 查看某个用户相关的日志
journalctl _UID=1000
实用技巧分享
1. 多条件组合查询
示例
# 查询nginx服务从昨天开始的错误日志
journalctl -u nginx.service –since yesterday -p err
2. 分页浏览日志
示例
journalctl | less
3. 导出日志到文件
示例
journalctl –since “2023-01-01” > journal.log
4. 显示内核环形缓冲区信息
示例
journalctl -k
5. 查看系统启动过程中的日志
示例
journalctl -b0 | grep “Starting”
常见问题处理
问题一:日志内容显示不全
解决方法:
示例
# 取消分页限制直接输出
journalctl –no-pager
问题二:如何访问旧的日志归档?
解决方法:
示例
# 显示所有日志包括历史存档
journalctl -a
问题三:精准查询特定时刻的日志?
解决方法: