journalctl 日志分析工具
journalctl 是一个用于查询和显示从systemd 日志管理系统(systemd-journald 服务)收集的日志的工具。journalctl 内置了日志旋转功能(logrotate)同时具备丰富的过滤能力,可以查看所有systemd 服务单元的日志,帮助用户快速的定位日志信息。
systemd-journald 守护进程是一个系统服务,它将日志数据整合到一起并进行存储。Journal中的条目可能来自多个来源,包括服务器消息,用户层程序消息,syslogd收集的内核消息等。另外,journal条目也来自系统的服务信息,例如生成的错误信息或者启动时的信息。
systemd-journald 系统日志组件:
- 守护程序:
systemd-journald
- 配置文件:
/etc/systemd/journald.conf
- 日志搜索程序:
journalctl
默认情况下 journald 会在每次重启时覆盖其日志。rsyslog 通过加载 journal 驱动来获取日志并将日志保存到硬盘上(/var/log/messages
)文件中。
journald 持久化存储日志需要修改journald.conf
文件Storage=auto
参数。修改Storage=persistent
,重启 systemd-journald 服务。
sed -i 's/Storage=auto/Storage=persistent/g' /etc/systemd/journald.confsystemctl restart systemd-journald
1、systemd-journald 存储类型
systemd-journald存储类型在journald.conf 配置文件中,在 [Journal]
部分修改存储类型。支持包括 "volatile", "persistent", "auto" 和 "none"。默认storage 类型为 "auto"。
- volatile:journal的日志数据仅被保存在内存中,如/run/log/journal
- persistent:数据将会保存在磁盘,如/var/log/journal,如果磁盘不可写入,早期启动日志将会退回到 /run/log/journal。
- auto:在(/var/log/journal/)目录下存储journal日志 (/var/log/journal/) 目录必须已经存在且有合适的权限值,如果目录不存在,journal数据将被保存在 /run/log/journal/ 目录,当系统被关闭的时候数据将被擦除。
- none: 会关闭所有的存储,所有收到的日志数据将会被丢弃。
2、systemd-journald常用参数介绍
[Journal] Storage=auto Compress=yes SystemMaxUse=2G SystemMaxFileSize=100M SystemMaxFiles=2 RuntimeMaxUse=100M RuntimeMaxFileSize=100M RuntimeMaxFiles=2 MaxRetentionSec=7day # Storage:systemd-journald存储模式 # Compress=yes:压缩历史日志 # SystemMaxUse:日志最多可以使用多少空间,默认为自己文件系统的10% # SystemMaxFileSize:日志文件最大大小 # SystemMaxFiles:保留的最多文件数 # RuntimeMaxUse=100M:存储在内存中的日志文件大小 # RuntimeMaxFileSize=100M:存储在内存中最大文件大小 # RuntimeMaxFiles=2:存储的最多文件数 # MaxRetentionSec=7day 日志持久化存储天数
3、查询systemd-journald的日志
systemd-journald 服务不会像rsyslog将日志保存在不同的日志文件中。为了避免因为issues问题检查不同的日志,systemd-journald以二进制的形式保存事件和信息。systemd-journald日志文件使用普通文件编辑器无法读取,需要通过 journalctl 命令进行查询。
查看全部日志:
journalctl journalctl -xe # -x 是目录(catalog)的意思,在报错的信息下会附加解决问题的网址 # -e pager-end 从末尾开始看
查看内核日志,等同于 demsg:
journalctl -k journalctl --dmesg
查看系统引导日志:
journalctl -b journalctl --list-boots
查看实时日志:
journalctl -f journalctl -f -n 20
查看最新日志:
journalctl -r
查看最新20行日志:
journalctl -n 20
查看特定用户日志:
id root journalctl _UID=0 -n 5
查看特定进程日志:
journalctl _PID=1
查看日志占用的磁盘空间:
journalctl --disk-usage
3.1 按时间段显示日志信息
显示最近30分钟的日志:
journalctl --since=-30m
显示2024年1月1日以来的日志:
journalctl --since="2024-01-01" journalctl --since="2024-01-01 12:00:00"
显示今天的日志:
journalctl --since=today
从今天上午9点开始,到1小时前的日志:
journalctl --since 09:00 --until "1 hour ago"
查看昨天到现在的日志:
journalctl --since yesterday
查看时间段日志:
journalctl --since "2024-02-16 20:00:00" --until "2024-02-17 20:10:00"
3.2 按日志级别显示日志
系统中所有日志严重程度从高到低:emerg 0(紧急)、alert 1(警告)、crit 2(严重)、err 3(错误)、warning 4(警告提醒)、notice 5(通知)、info 6(信息)、debug 7(调试)。
查看紧急级别日志:
journalctl -p emerg
显示 0、1、2 级别的所有日志:
journalctl -p 2
3.3 查看特定 systemd 服务的日志
列出服务名称:
systemctl list-units --type=service
查看 NetworkManager.service 服务日志:
journalctl -u NetworkManager.service
查看 nginx.service 服务日志:
journalctl -u nginx.service
查看可执行文件应用程序日志:
journalctl /usr/local/zabbix-agent2/sbin/zabbix_agent2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律