跳转到内容

journalctl命令详解

课程介绍

journalctl是systemd系统的日志管理工具,用于查询和显示systemd日志。本课程将详细讲解journalctl命令的使用方法,包括基本用法、过滤选项、输出格式、实时监控等内容,帮助你掌握systemd日志系统的管理技巧。

1. journalctl概述

1.1 什么是journalctl

journalctl是systemd系统的日志管理工具。

journalctl的特点

特点说明
集中管理集中管理所有日志
结构化存储以结构化方式存储日志
索引查询支持索引查询
实时监控支持实时监控日志
持久化支持日志持久化

1.2 journalctl与syslog的区别

journalctl和syslog都是日志管理工具,但有一些区别。

区别对比

特性journalctlsyslog
存储方式二进制格式文本格式
查询效率
结构化支持不支持
实时监控支持支持
兼容性systemd系统所有Linux系统

2. 基本用法

2.1 查看所有日志

查看所有系统日志。

命令

bash
# 查看所有日志
journalctl

# 查看所有日志(分页显示)
journalctl | less

2.2 查看最新日志

查看最新的系统日志。

命令

bash
# 查看最新的100条日志
journalctl -n 100

# 查看最新的日志
journalctl -n

2.3 查看实时日志

实时查看系统日志。

命令

bash
# 实时查看日志
journalctl -f

# 实时查看最新的日志
journalctl -f -n 100

2.4 查看启动日志

查看系统启动日志。

命令

bash
# 查看当前启动的日志
journalctl -b

# 查看上一次启动的日志
journalctl -b -1

# 查看指定启动的日志
journalctl -b 2

3. 过滤选项

3.1 按时间过滤

按时间过滤日志。

命令

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

# 查看昨天的日志
journalctl --since yesterday

# 查看指定时间之后的日志
journalctl --since "2024-01-01 00:00:00"

# 查看指定时间之前的日志
journalctl --until "2024-01-01 23:59:59"

# 查看指定时间段的日志
journalctl --since "2024-01-01 00:00:00" --until "2024-01-01 23:59:59"

# 查看最近1小时的日志
journalctl --since "1 hour ago"

# 查看最近1天的日志
journalctl --since "1 day ago"

3.2 按优先级过滤

按日志优先级过滤日志。

命令

bash
# 查看所有ERROR日志
journalctl -p err

# 查看所有WARNING日志
journalctl -p warning

# 查看所有INFO日志
journalctl -p info

# 查看所有DEBUG日志
journalctl -p debug

# 查看ERROR及以上级别的日志
journalctl -p err..alert

# 查看WARNING及以上级别的日志
journalctl -p warning..alert

优先级

优先级说明
emerg紧急
alert警报
crit严重
err错误
warning警告
notice通知
info信息
debug调试

3.3 按服务过滤

按服务过滤日志。

命令

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

# 查看nginx服务的日志
journalctl -u nginx

# 查看mysql服务的日志
journalctl -u mysql

# 查看多个服务的日志
journalctl -u sshd -u nginx

3.4 按进程过滤

按进程过滤日志。

命令

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

# 查看指定进程的日志
journalctl _COMM=sshd

3.5 按用户过滤

按用户过滤日志。

命令

bash
# 查看指定用户的日志
journalctl _UID=1000

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

3.6 按设备过滤

按设备过滤日志。

命令

bash
# 查看指定设备的日志
journalctl _SYSTEMD_UNIT=sshd.service

# 查看指定设备的日志
journalctl _SYSTEMD_UNIT=nginx.service

4. 输出格式

4.1 默认输出格式

默认输出格式是易读格式。

命令

bash
# 默认输出格式
journalctl

输出示例

Jan 01 00:00:00 server sshd[1234]: Accepted password for user from 192.168.1.10 port 22 ssh2

4.2 JSON输出格式

JSON输出格式用于程序处理。

命令

bash
# JSON输出格式
journalctl -o json

# JSON输出格式(美化)
journalctl -o json-pretty

输出示例

json
{
  "__CURSOR": "s=12345;i=12345;b=12345;m=12345;t=12345;x=12345",
  "__REALTIME_TIMESTAMP": "1234567890123456",
  "__MONOTONIC_TIMESTAMP": "1234567890",
  "_BOOT_ID": "1234567890abcdef",
  "PRIORITY": "6",
  "SYSLOG_FACILITY": "4",
  "SYSLOG_IDENTIFIER": "sshd",
  "_PID": "1234",
  "_UID": "0",
  "_GID": "0",
  "_COMM": "sshd",
  "_EXE": "/usr/sbin/sshd",
  "_CMDLINE": "sshd: user [priv]",
  "_SYSTEMD_UNIT": "sshd.service",
  "_SYSTEMD_SLICE": "system.slice",
  "_MACHINE_ID": "1234567890abcdef",
  "MESSAGE": "Accepted password for user from 192.168.1.10 port 22 ssh2"
}

4.3 verbose输出格式

verbose输出格式显示详细信息。

命令

bash
# verbose输出格式
journalctl -o verbose

4.4 cat输出格式

cat输出格式只显示消息内容。

命令

bash
# cat输出格式
journalctl -o cat

5. 高级用法

5.1 统计日志

统计日志信息。

命令

bash
# 统计日志数量
journalctl | wc -l

# 统计ERROR日志数量
journalctl -p err | wc -l

# 统计服务日志数量
journalctl -u sshd | wc -l

5.2 搜索日志

搜索日志内容。

命令

bash
# 搜索包含ERROR的日志
journalctl | grep ERROR

# 搜索包含ERROR或WARN的日志
journalctl | grep -E "ERROR|WARN"

# 搜索包含ERROR的日志,并显示行号
journalctl | grep -n ERROR

# 搜索包含ERROR的日志,并显示前后3行
journalctl | grep -C 3 ERROR

5.3 导出日志

导出日志到文件。

命令

bash
# 导出日志到文件
journalctl > /tmp/journal.log

# 导出ERROR日志到文件
journalctl -p err > /tmp/error.log

# 导出JSON格式日志到文件
journalctl -o json > /tmp/journal.json

5.4 清理日志

清理旧的日志。

命令

bash
# 清理所有日志
journalctl --rotate
journalctl --vacuum-time=1s

# 清理指定时间之前的日志
journalctl --vacuum-time=1d

# 清理指定大小之前的日志
journalctl --vacuum-size=1G

6. 实战案例

案例1:分析登录日志

场景:分析登录日志,找出登录失败的用户。

命令

bash
# 查看登录失败的日志
journalctl -u sshd | grep Failed

# 统计登录失败的用户
journalctl -u sshd | grep Failed | awk '{print $9}' | sort | uniq -c | sort -nr

# 统计登录失败的IP
journalctl -u sshd | grep Failed | awk '{print $11}' | sort | uniq -c | sort -nr

案例2:分析系统日志

场景:分析系统日志,找出ERROR日志。

命令

bash
# 查看ERROR日志
journalctl -p err

# 统计ERROR日志数量
journalctl -p err | wc -l

# 查看ERROR日志的详细信息
journalctl -p err -o verbose

案例3:监控服务日志

场景:实时监控服务日志。

命令

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

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

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

7. 常见问题

问题1:journalctl命令不存在

问题:journalctl命令不存在。

解决方法

bash
# 检查systemd是否安装
systemctl --version

# 安装systemd
apt-get install systemd

问题2:没有权限查看日志

问题:没有权限查看日志。

解决方法

bash
# 使用sudo权限
sudo journalctl

# 添加用户到adm组
usermod -aG adm username

问题3:日志文件过大

问题:日志文件过大。

解决方法

bash
# 清理旧的日志
sudo journalctl --vacuum-time=1d

# 限制日志大小
sudo journalctl --vacuum-size=1G

课程总结

这节课我们学习了journalctl命令详解。

核心内容:

  • journalctl概述
  • 基本用法(查看所有日志、查看最新日志、查看实时日志、查看启动日志)
  • 过滤选项(按时间过滤、按优先级过滤、按服务过滤、按进程过滤、按用户过滤、按设备过滤)
  • 输出格式(默认输出格式、JSON输出格式、verbose输出格式、cat输出格式)
  • 高级用法(统计日志、搜索日志、导出日志、清理日志)
  • 实战案例
  • 常见问题

重要命令:

  • journalctl:查看日志
  • journalctl -f:实时查看日志
  • journalctl -u:按服务过滤
  • journalctl -p:按优先级过滤
  • journalctl --since:按时间过滤
  • journalctl -o:指定输出格式

journalctl是systemd系统的日志管理工具,掌握这些知识后,我们将在后续课程中学习日志分析、日志轮转等内容。

课后练习

练习1(基础)

查看所有系统日志。

练习2(进阶)

查看ERROR级别的日志。

练习3(拓展)

实时监控sshd服务的日志。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径