journalctl


systemd-journald是Systemd管理的日志服务工具,负责收集、记录和存储系统所有Unit的日志。通过journalctl命令,可以查看所有内核日志和应用程序日志。
这些日志信息以二进制格式存储在内存中,记录内核信息、启动过程、守护进程等产生的日志,并输出标准化的系统日志和错误信息。

示例命令:

journalctl命令选项
-n:限制显示最新的日志行数
-b:显示特定于某次启动的日志
-f:实时监测日志内容,类似于tail -f
–since –until:查看某时间段的日志,例如 “2024-07-08 00:00:00” 或 “30 min ago”
-p:指定日志级别,例如err、crit
-u:查看特定服务的日志
-k:查看内核日志(等同于dmesg)
_PID=pid:只显示指定PID号相关的日志信息
–disk-usage:查看日志占用的磁盘空间
示例
#显示本次启动以来的全部日志。
journalctl

#显示内核日志:
journalctl -k

#使用-n参数可以显示最后n行日志,如果不指定行数,默认显示10行。
journalctl -n 20

#查看指定进程的日志:
journalctl _PID=1

#显示最近30分钟的日志:
journalctl –since=-30m

#显示2021年以来的日志:
journalctl –since=”2023-11-01”

#显示今天的日志:
journalctl –since=today

#使用-f参数可以实现类型tail -f的功能,持续监控最新的日志:
journalctl -f

#查看尾部最新的n行日志:
journalctl -n 20

#查看指定Unit的日志:
journalctl -u nginx.service

#查看日志占用的磁盘空间:
journalctl –disk-usage

#要求日志守护进程滚动日志文件,日志滚动可以确保所有活动的日志文件都被关闭、并被重命名以完成归档,同时新的空白日志文件将被创建,并成为新的活动日志文件。
journalctl –rotate

#清理一个周前的日志。
journalctl –vacuum-time=1week
journalctl –vacuum-time=1years

#将磁盘占用减少到指定大小以下。
journalctl –vacuum-size=10M

#查看内核日志
journalctl _TRANSPORT=kernel

#查看指定服务的日志
journalctl -u docker

#查看指定用户的日志:
$journalctl -u user

#查看特定时间范围的日志
journalctl –since “2020-10-27” –until “2020-12-28”
journalctl –since “1 hour ago”

#查看错误级别及以上的日志
journalctl -p err
日志级别从高到低包括:
emerg (0): 紧急消息,系统无法使用,必须立即采取行动。
alert (1): 需要立即修复,例如硬盘故障。
crit (2): 关键情况,如应用程序组件失败。
err (3): 错误事件,但不影响系统运行。
warning (4): 警告,可能出现潜在问题。
notice (5): 正常但重要的消息。
info (6): 信息性消息,用于监控或调试。
debug (7): 调试信息,用于开发者诊断问题

#查看特定单元(unit)的日志消息(如服务):
journalctl -u <单元名称>

#过滤特定优先级的日志消息:
journalctl -p <优先级>

#查看特定用户的日志消息:
journalctl _UID=<用户ID>

journalctl –disk-usage 查看日志占用磁盘大小

#查看本次启动的所有日志
journalctl -b
journalctl –list-boots 查看每一次启动的分割
journalctl -b -1 上一次启动的日志

#查看内核消息:
journalctl -k

#journalctl 查看ssh服务日志:
journalctl -u sshd
– Logs begin at Thu 2024-03-13 10:09:59 CST, end at Tue 2024-04-01 15:37:30 CST. –
Mar 13 10:10:14 test36 systemd[1]: Starting OpenSSH server daemon…
Mar 13 10:10:14 test36 sshd[1009]: Server listening on 0.0.0.0 port 22.
Mar 13 10:10:14 test36 sshd[1009]: Server listening on :: port 22.
Mar 13 10:10:14 test36 systemd[1]: Started OpenSSH server daemon.
Mar 13 10:12:16 test36 sshd[1828]: Accepted password for root from 192.168.2.17 port 50405 ssh2

这只是 journalctl 命令的一些示例用法,您可以使用 man journalctl 命令来查看完整的命令文档和更多选项。

journalctl –vacuum-size=100M 是一个用于清理系统日志(由system-journald管理)的命令,它会将日志存档的总大小缩减至100MB以下:
命令功能:
. –vacuum-size=100m:
强制日志文件的总占用空间不超过100MB,系统会从最旧的日志开始删除,直到总大小满足要求。
适用于需要严格控制日志磁盘占用的场景。
. 操作对象:清理的是/var/log/journal/目录下的二进制日志文件,若日志仅存在内存无须手动清理,重启后会自动丢失。
支持K(KB),M(MB),G(GB),T(TB),如:500k,20G;
无副作用:不会影响到正在运行的日志服务(systemd-journald),仅删除已归档的旧文件。
其他清理选项:
按时间清理:
journalctl –vacuum-time=10d #保留最近10天的日志
按文件数量清理:
journalctl –vacuum-files=5 #保留最多5个日志文件;
组合使用:
可同时指定多个条件,系统会优先满足最样啊的限制。
配置文件预设:
通过 /etc/systemd/journald.conf 可永久设置日志大小限制:
[journal]
SystemMaxUse=1G #持久化日志最大占用空间;
RuntimeMaxUse=50M #临时日志(内存中)最大占用空间;

修改后重启服务生效:
systemctl restart systemd-journald

journal配置参考

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=500
SystemMaxUse=2048M
#SystemKeepFree=1024M
#SystemMaxFileSize=
RuntimeMaxUse=2048M
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
ForwardToKMsgno=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
MaxLevelStore=warning
MaxLevelSyslog=warning
MaxLevelKMsg=warning
MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K

注意事项:
需要权限:
通常需sudo执行。除非用户在adm或systemd-journal组;
日志完整性:
清理后无法恢复已删除的日志,必要时可先备份 /var/log/journal/
效果验证:
使用journalctl –disk-usage 查看清理前后空间

流程:
journalctl –disk-usage #查看当前日志占用空间;
journalctl –disk-usage
Archived and active journals take up 134.1M on disk.
sudo journalctl –vacuum-size=100M 清理日志空间;
sudo journalctl –vacuum-size=100M
Deleted archived journal /run/log/journal/b5e9be5e26204ce5b6033990010b2e48
/system@db56ed8b0ecd4b1fa570edbb2b4f7b85-0000000000000001-00062bddfaf718f1.journal (23.0M).
Deleted archived journal /run/log/journal/b5e9be5e26204ce5b6033990010b2e48
/system@db56ed8b0ecd4b1fa570edbb2b4f7b85-00000000000066fa-00062bde69fad8b6.journal (23.0M).
Vacuuming done, freed 46.1M of archived journals on disk.
journalctl –disk-usage #查看日志空间
journalctl –disk-usage
Archived and active journals take up 88.0M on disk.


文章作者: 云上的小雨滴
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 云上的小雨滴 !
评论
  目录