详解journalctl日志管理
journalctl日志管理
systemd日志管理
systemd 提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。读取日志的命令:
#读取systemd日志 journalctl
默认情况下(当Storage= 在配置文件/etc/systemd/journald.conf中被设置为auto),日志记录将被写入/var/log/journal/;该目录是 systemd 软件包的一部分。若被删除,systemd不会自动创建它,直到下次升级软件包时重建该目录。如果/var/log/journal/目录缺失,systemd 会将日志记录写入/run/systemd/journal。这意味着,系统重启后日志将丢失。
配置systemd journald日志持久存储
参考: https://thinkit.co.jp/story/2014/12/18/5389?page=0%2C1
在CentOS7的journald设置中,日志文件存放在/run/log/journal目录下。但是/run目录是tmpfs文件系统挂载的,当OS重启时,/run/log/journal目录下存储的日志文件会被删除。
为了在操作系统重启后也能保存日志,在journald配置文件/etc/systemd/journald.conf中指定“Storage=persistent”
#配置日志持久存储 sed -i 's/^#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf #限制日志容量为128MB SystemMaxUse=128M
重启systemd-journald服务使配置生效
#重启systemd-journald服务 systemctl restart systemd-journald #检查当前由journald管理的所有日志的容量 journalctl --disk-usage
在这里插入图片描述
日志大小限制
可以修改配置文件指定最大限制。如限制日志最大 50MiB:
#修改全局配置文件 vim /etc/systemd/journald.conf #限制日志最大 50MiB SystemMaxUse=50M
还可以通过子配置而不是全局配置文件进行设置:
#修改子配置文件 vim /etc/systemd/journald.conf.d/00-journal-size.conf #限制日志最大 50MiB [Journal] SystemMaxUse=50M
配置rsyslogd和systemd journald
#创建 持久化保存日志的目录 mkdir -p /var/log/journal mkdir -p /etc/systemd/journald.conf.d
配置内容如下:
cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF [Journal] # 持久化保存到磁盘 Storage=persistent # 压缩历史记录 Compress=yes SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=1000 # 最大占用空间 SystemMaxUse=10G # 单文件最大200M SystemMaxFileSize=200M # 日志保存时间2周 MaxRetentionSec=2week # 是否将日志转发到syslog ForwardToSyslog=no EOF
重新加载配置或重启systemd-journald服务
#重启systemd-journald systemctl restart systemd-journald
无法发现/var/log/journal目录
#将Storage参数与更改成Storage=persistent vim /etc/systemd/journald.conf #持久化方式存储日志 Storage=persistent #重启systemd-journald服务 systemctl restart systemd-journald
配置自动删除日志
https://linux.cn/article-15526-1.html
建议使用/etc/systemd/journald.conf这个journald 配置文件来控制日志文件的清理过程。
systemd提供了许多参数来有效管理日志文件。
journald.conf 参数 | 描述 | 实例 |
SystemMaxUse | 指定日志在持久性存储中可使用的最大磁盘空间 | SystemMaxUse=500M |
SystemKeepFree | 指定在将日志条目添加到持久性存储时,日志应留出的空间量。 | SystemKeepFree=100M |
SystemMaxFileSize | 控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。 | SystemMaxFileSize=100M |
RuntimeMaxUse | 指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。 | RuntimeMaxUse=100M |
RuntimeKeepFree | 指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。 | RuntimeMaxUse=100M |
RuntimeMaxFileSize | 指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。 | RuntimeMaxFileSize=200M |
修改完配置文件,记得重启systemd-journald服务
#重启服务 systemctl restart systemd-journald
journalctl查看日志
journal读音:(ˈʤɜrnəl,周no)
#显示尾部的最新10行日志 journalctl -n #显示尾部指定行数的日志 journalctl -n 20 #实时滚动显示最新日志 journalctl -f
journalctl查看指定服务日志
参考:journalctl常见用法
#查看指定service日志 journalctl -u 服务名 ## 例如:docker起不来 journalctl -u docker ## -x 显示完整的日志信息,包括堆栈跟踪和其他相关信息 ## -e 自动滚动到最新的日志条目。 ## -u kubelet 指定了要查看的日志单元(unit) journalctl -xeu kubelet #将日志保存为文件 journalctl -xeu kubelet > kubelet.log #动态查看日志(持续输出,类似于logs -f) journalctl -eu kubelet -f ## 实时滚动显示某个Unit的最新日志 journalctl -u kubelet -f #只查看今天的kubelet日志 ## |less可以解决日志显示不全的问题 journalctl -u kubelet --since today |less #合并显示多个 Unit 的日志 journalctl -u nginx.service -u php-fpm.service --since today
根据日期查看
#只看今天的日志 journalctl --since today #查看指定时间的日志 journalctl --since="2021-10-02 2200" #查看20分钟内的日志 journalctl --since "20 min ago" #显示昨天记录的所有系统日志 journalctl --since yesterday #显示从2015年1月10日开始到2015年1月11日3:00的所有系统日志 ## --since和--until选项用于指定起始时间和结束时间 journalctl --since "2015-01-10" --until "2015-01-11 03:00" #显示从早上9点到1小时前记录的所有系统日志 journalctl --since 09:00 --until "1 hour ago"
查看指定用户的日志
#查看指定用户的日志 journalctl _UID=33 --since today
查看指定命令的日志
#查看指定命令的日志 journalctl /usr/bin/bash
在这里插入图片描述
#查看systemd命令行的日志 journalctl /usr/lib/systemd/systemd
查看指定进程的日志
#查看指定进程的日志 journalctl _PID=1
查看引导记录
#查看引导记录 journalctl -b #查看系统本次启动的日志 sudo journalctl -b sudo journalctl -b -0 #查看上一次启动的日志(需更改设置) sudo journalctl -b -1
journalctl删除日志
#手工触发日志轮转切割 systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service
轮转日志文件
#刷新日志缓冲区并轮转日志文件 ## --flush:刷新日志缓冲区,将缓冲区中的日志写入磁盘 ## --rotate:轮转日志文件,将当前日志文件重命名并创建个新的日志文件 journalctl --flush --rotate
删除指定时间之前的日志条目
#删除1s以前的日志条目 journalctl --vacuum-time=1s
--vacuum-time的数字后面提供以下后缀:
•s:秒
•m:分钟
•h:小时
•days:天
•months:月
•weeks:周
•years:年
保留指定大小的最后日志文件
#保留最后 400MB 的文件 journalctl --vacuum-size=400M
--vacuum-size的数字后面提供以下后缀:
•K:KB
•M:MB
•G:GB
保留指定数量的最后日志文件
#保留最后2个日志文件 journalctl --vacuum-files=2
检查日志文件的完整性
清理完日志文件后,检查日志文件的完整性是比较明智的。
#检查日志文件的完整性 journalctl --verify
该命令显示了日志文件是否通过(PASS)、失败(FAIL)。
链接:https://blog.csdn.net/omaidb/article/details/116019014