Linux下journalctl命令怎么使用

发布时间:2022-02-18 14:47:07 作者:iii
来源:亿速云 阅读:846
# Linux下journalctl命令怎么使用

## 一、journalctl简介

`journalctl`是Linux系统中用于查询和显示systemd日志的强大工具。作为systemd生态系统的一部分,它提供了对系统日志的统一查看方式,替代了传统的syslog服务。

### 1.1 journalctl与传统日志系统的区别

| 特性        | 传统syslog               | journalctl                  |
|------------|-------------------------|----------------------------|
| 存储格式     | 纯文本文件               | 二进制索引格式               |
| 日志存储位置 | /var/log/目录下多个文件  | 集中存储在/run/log/journal/ |
| 查询能力     | 需结合grep等工具         | 内置强大过滤和查询功能       |
| 元数据支持   | 有限                    | 丰富的元数据(如单元、PID等)|

### 1.2 journald服务

journalctl实际上是与`systemd-journald`服务交互的前端工具。该服务在系统启动早期就开始运行,能够收集内核、早期启动过程以及所有系统服务的日志。

查看服务状态:
```bash
systemctl status systemd-journald

二、基本使用方法

2.1 查看完整日志

不加任何参数时,显示所有日志记录:

journalctl

输出示例:

-- Logs begin at Mon 2023-05-01 09:00:00 CST, end at Wed 2023-05-03 15:30:45 CST. --
May 01 09:00:01 server01 systemd[1]: Starting Daily apt upgrade and clean activities...
May 01 09:00:15 server01 systemd[1]: Started Daily apt upgrade and clean activities.
...

2.2 实时监控新日志

类似于tail -f的功能:

journalctl -f

2.3 按时间筛选

查看特定时间段的日志:

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

# 查看最近2小时日志
journalctl --since "2 hours ago"

# 指定时间范围
journalctl --since "2023-05-01 14:00:00" --until "2023-05-01 15:30:00"

时间格式支持: - “YYYY-MM-DD HH:MM:SS” - “yesterday”, “today”, “tomorrow” - “-1h” (1小时前) - “1 week ago”

2.4 按服务/单元筛选

查看特定systemd单元的日志:

# 查看sshd服务日志
journalctl -u sshd

# 查看多个服务
journalctl -u nginx -u mysql

# 查看服务从启动开始的完整日志
journalctl -u apache2 -b

2.5 按优先级过滤

使用优先级(Priority)过滤日志,优先级定义如下:

数值 优先级 说明
0 emerg 紧急/系统不可用
1 alert 需要立即采取行动
2 crit 严重情况
3 err 错误条件
4 warn 警告条件
5 notice 正常但重要的情况
6 info 信息性消息
7 debug 调试级消息

示例:

# 只显示错误及以上级别
journalctl -p err -b

# 显示警告到错误级别
journalctl -p warn..err

三、高级查询技巧

3.1 按进程ID过滤

# 查看指定PID的日志
journalctl _PID=1234

# 查看父进程为systemd的进程日志
journalctl _PPID=1

3.2 按用户/组过滤

# 查看特定用户进程的日志
journalctl _UID=1000

# 查看root用户日志
journalctl _UID=0

3.3 按可执行文件路径过滤

journalctl /usr/sbin/sshd

3.4 组合多个条件

# 组合时间、服务和优先级
journalctl -u nginx --since "1 hour ago" -p err

3.5 显示内核消息

journalctl -k
# 或
journalctl -k -b  # 本次启动的内核日志

四、输出格式控制

4.1 简洁输出格式

journalctl -o short

4.2 JSON格式输出

适合程序解析:

journalctl -o json

4.3 详细输出

显示所有可用字段:

journalctl -o verbose

示例输出:

Tue 2023-05-02 10:30:15.123456 CST [s=abcdef123456]
    _TRANSPORT=syslog
    PRIORITY=6
    _UID=0
    _GID=0
    _COMM=sshd
    _EXE=/usr/sbin/sshd
    _CMDLINE=sshd: root@pts/0
    MESSAGE=Accepted password for root from 192.168.1.100 port 54322 ssh2

4.4 分页和行数控制

# 显示最后20行
journalctl -n 20

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

# 持续输出新日志(类似tail -f)
journalctl -f

五、日志维护与管理

5.1 查看日志占用的磁盘空间

journalctl --disk-usage

输出示例:

Archived and active journals take up 1.2G in the file system.

5.2 清理日志

# 只保留最近2天的日志
journalctl --vacuum-time=2d

# 限制日志大小不超过500MB
journalctl --vacuum-size=500M

# 保留最多1000个日志文件
journalctl --vacuum-files=1000

5.3 持久化日志存储

默认情况下,日志存储在/run/log/journal/中,重启后会丢失。要永久保存:

  1. 创建存储目录:
sudo mkdir -p /var/log/journal
  1. 设置正确的权限:
sudo chown root:systemd-journal /var/log/journal
sudo chmod 2755 /var/log/journal
  1. 重启journald服务:
sudo systemctl restart systemd-journald

六、实战案例

6.1 诊断系统启动问题

# 查看本次启动的所有日志
journalctl -b

# 查看上次启动的日志(如果已保存)
journalctl -b -1

# 查看启动过程中的错误
journalctl -b -p err..alert

6.2 追踪服务问题

# 查看服务从启动到现在的完整日志
journalctl -u mysql --no-pager -n 1000

# 实时监控服务日志
journalctl -u nginx -f

6.3 分析用户登录情况

# 查看所有SSH登录
journalctl _COMM=sshd -o verbose | grep "Accepted password"

# 查看特定用户的登录
journalctl _COMM=sshd | grep "Accepted publickey for username"

6.4 性能问题排查

# 查看高优先级消息
journalctl -p err..emerg --since "1 hour ago"

# 查看磁盘相关错误
journalctl -k | grep -i "disk\|io\|scsi"

七、常见问题解决

7.1 日志显示不完整

如果发现日志被截断:

journalctl --no-tail

7.2 时间显示问题

使用UTC时间:

journalctl --utc

7.3 无法查看历史日志

确保已启用持久化存储(见5.3节),然后检查:

sudo journalctl --list-boots

7.4 日志损坏修复

sudo journalctl --verify

如果发现损坏:

sudo rm -rf /var/log/journal/*
sudo systemctl restart systemd-journald

八、总结

journalctl作为systemd的日志工具,提供了比传统syslog更强大的查询和分析能力。通过熟练掌握各种过滤条件和输出格式,可以高效地诊断系统问题。关键点总结:

  1. 使用时间、单元、优先级等组合过滤条件
  2. 灵活运用各种输出格式满足不同需求
  3. 定期维护日志防止磁盘空间耗尽
  4. 重要环境启用持久化日志存储

通过本文介绍的各种技巧和实例,您应该能够充分利用journalctl来监控和排查Linux系统问题。

提示:在生产环境中,考虑将重要日志转发到远程日志服务器或ELK等集中式日志管理系统,以实现长期存储和更复杂的分析需求。 “`

推荐阅读:
  1. 如如何使用journalctl命令?
  2. 使用linux的journalctl命令查看日志

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux journalctl

上一篇:Swift语言中怎么自定义操作符

下一篇:Git怎么删除远程仓库

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》