Linux 中的 journalctl 命令是查看、过滤和管理由 systemd-journald 管理的系统日志的最强大工具之一。
- 允许管理员快速准确地搜索和过滤特定的系统事件。
- 让用户可以自定义日志显示,以提高可读性并专注于分析。
- 通过控制日志的大小、保留时间和持久性,帮助高效地管理日志存储。
- 通过有条理且详细的日志洞察,简化系统监控和故障排除。
根据消息兴趣过滤日志
我们可以使用 journalctl 中的 -g 或 –grep 选项,根据特定的关键词或我们感兴趣的消息来过滤日志。这有助于我们只关注相关的日志条目,而无需阅读大量数据。
1. 根据关键词进行基本过滤
显示包含特定单词或消息的日志。
命令:
journalctl -g "error"
- 显示所有包含单词 “error” 的日志条目。
- 对于快速识别系统或服务错误非常有用。
输出:
2. 在时间范围内根据关键词过滤
过滤在给定时间段内包含特定关键词的日志条目。
命令:
journalctl -g "error" --since "2024-06-01 08:00:00" --until "2024-06-01 10:00:00"
- 显示 2024 年 6 月 1 日上午 8:00 到 10:00 之间所有包含 “error” 的日志条目。
- 这有助于在对时间敏感的故障排查中缩小特定事件的范围。
输出:
3. 根据多个关键词过滤
我们可以搜索包含不止一个关键词的日志。
命令:
journalctl -g "error" -g "warning"
- 显示所有包含 “error” 或 “warning” 的日志条目。
- 非常适合识别关键和警告性的系统消息。
输出:
!abc
4. 根据精确匹配过滤
我们可以使用正则表达式过滤完全匹配短语的日志消息。
命令:
journalctl -g "^Service started$"
- 仅显示与 “Service started” 完全匹配的日志消息。
修改日志显示
journalctl 命令提供了各种选项来自定义日志的显示方式,使其更具可读性,或更适合自动化的机器处理。
1. 默认输出
以默认的详细格式显示日志。
命令:
journalctl
输出:
!lala
- 显示带有时间戳、服务名称和消息的日志。
2. 简短输出格式
以紧凑的格式显示日志,仅包含必要详细信息。
命令:
journalctl -o short
输出:
!efg
3. JSON 输出格式
以 JSON 格式显示日志,以便于程序解析。
命令:
journalctl -o json
输出(截断):
!json
4. JSON 美化格式
以人类可读的 JSON 格式显示日志。
命令:
journalctl -o json-pretty
输出:
!ctl
5. 详细输出
显示具有最大细节的日志,包括内部元数据。
命令:
journalctl -o verbose
输出:
日志维护
维护系统日志有助于管理磁盘空间和性能。随着时间的推移,日志可能会变得很大——因此控制大小、保留时间和持久性非常重要。
1. 限制日志大小
限制日志日志使用的总空间。
命令:
sudo journalctl --vacuum-size=1G
输出:
!1g
- 通过自动删除较旧的条目,将日志大小保持在 1 GB 以内。
2. 限制日志保留时间
删除早于特定时间的日志。
命令:
sudo journalctl --vacuum-time=2weeks
输出:
- 保留最近 14 天的日志,删除较旧的日志。
3. 启用持久化日志存储
默认情况下,某些系统仅将日志保存在内存中(重启后丢失)。
- 为了使日志在重启后依然保留:
命令:
sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald
- 创建一个用于永久存储日志的目录并重启 journald 服务。
- 现在即使在系统重启后,日志也会保留。
4. 压缩旧日志
通过压缩旧日志来减少磁盘空间。