主题
journalctl命令详解
课程介绍
journalctl是systemd系统的日志管理工具,用于查询和显示systemd日志。本课程将详细讲解journalctl命令的使用方法,包括基本用法、过滤选项、输出格式、实时监控等内容,帮助你掌握systemd日志系统的管理技巧。
1. journalctl概述
1.1 什么是journalctl
journalctl是systemd系统的日志管理工具。
journalctl的特点:
| 特点 | 说明 |
|---|---|
| 集中管理 | 集中管理所有日志 |
| 结构化存储 | 以结构化方式存储日志 |
| 索引查询 | 支持索引查询 |
| 实时监控 | 支持实时监控日志 |
| 持久化 | 支持日志持久化 |
1.2 journalctl与syslog的区别
journalctl和syslog都是日志管理工具,但有一些区别。
区别对比:
| 特性 | journalctl | syslog |
|---|---|---|
| 存储方式 | 二进制格式 | 文本格式 |
| 查询效率 | 高 | 低 |
| 结构化 | 支持 | 不支持 |
| 实时监控 | 支持 | 支持 |
| 兼容性 | systemd系统 | 所有Linux系统 |
2. 基本用法
2.1 查看所有日志
查看所有系统日志。
命令:
bash
# 查看所有日志
journalctl
# 查看所有日志(分页显示)
journalctl | less2.2 查看最新日志
查看最新的系统日志。
命令:
bash
# 查看最新的100条日志
journalctl -n 100
# 查看最新的日志
journalctl -n2.3 查看实时日志
实时查看系统日志。
命令:
bash
# 实时查看日志
journalctl -f
# 实时查看最新的日志
journalctl -f -n 1002.4 查看启动日志
查看系统启动日志。
命令:
bash
# 查看当前启动的日志
journalctl -b
# 查看上一次启动的日志
journalctl -b -1
# 查看指定启动的日志
journalctl -b 23. 过滤选项
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 nginx3.4 按进程过滤
按进程过滤日志。
命令:
bash
# 查看指定PID的日志
journalctl _PID=1234
# 查看指定进程的日志
journalctl _COMM=sshd3.5 按用户过滤
按用户过滤日志。
命令:
bash
# 查看指定用户的日志
journalctl _UID=1000
# 查看root用户的日志
journalctl _UID=03.6 按设备过滤
按设备过滤日志。
命令:
bash
# 查看指定设备的日志
journalctl _SYSTEMD_UNIT=sshd.service
# 查看指定设备的日志
journalctl _SYSTEMD_UNIT=nginx.service4. 输出格式
4.1 默认输出格式
默认输出格式是易读格式。
命令:
bash
# 默认输出格式
journalctl输出示例:
Jan 01 00:00:00 server sshd[1234]: Accepted password for user from 192.168.1.10 port 22 ssh24.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 verbose4.4 cat输出格式
cat输出格式只显示消息内容。
命令:
bash
# cat输出格式
journalctl -o cat5. 高级用法
5.1 统计日志
统计日志信息。
命令:
bash
# 统计日志数量
journalctl | wc -l
# 统计ERROR日志数量
journalctl -p err | wc -l
# 统计服务日志数量
journalctl -u sshd | wc -l5.2 搜索日志
搜索日志内容。
命令:
bash
# 搜索包含ERROR的日志
journalctl | grep ERROR
# 搜索包含ERROR或WARN的日志
journalctl | grep -E "ERROR|WARN"
# 搜索包含ERROR的日志,并显示行号
journalctl | grep -n ERROR
# 搜索包含ERROR的日志,并显示前后3行
journalctl | grep -C 3 ERROR5.3 导出日志
导出日志到文件。
命令:
bash
# 导出日志到文件
journalctl > /tmp/journal.log
# 导出ERROR日志到文件
journalctl -p err > /tmp/error.log
# 导出JSON格式日志到文件
journalctl -o json > /tmp/journal.json5.4 清理日志
清理旧的日志。
命令:
bash
# 清理所有日志
journalctl --rotate
journalctl --vacuum-time=1s
# 清理指定时间之前的日志
journalctl --vacuum-time=1d
# 清理指定大小之前的日志
journalctl --vacuum-size=1G6. 实战案例
案例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 -f7. 常见问题
问题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服务的日志。