清理systemd日志
systemd journal
之于 systemd
犹如 syslog
之于 init
,其日志文件保存在 /var/log/journal
目录下。随着时间的流逝,该目录下会积累大量日志文件,占用不少的磁盘空间。如果硬盘容量较小或可用空间紧张,可以考虑清理过期日志释放占用的空间。
本文介绍清理systemd日志的方法。
开启 kubelet
详情日志:
在 /var/lib/kubelet/kubeadm-flags.env
文件追加 --v=4
1 | KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --v=4 |
重启 kubelet 服务:
1 | systemctl restart kubelet |
清理systemd日志
清理之前,可查看一下 systemd
日志所占用的磁盘空间。既可以用常用的 du
命令:
1 | sudo du -sh /var/log/journal/ |
但更推荐使用systemd日志管理专用命令 journalctl
:
1 | journalctl --disk-usage |
知道了日志占用的磁盘空间,接下来便可以清理过期日志。开始之前,建议 rotate
当前日志(rotate是日志操作中的一个术语,其归档旧日志,后续日志写入新创建的日志文件中):
1 | sudo journalctl --rotate |
journalctl
提供了三种清理 systemd
日志的方式。第一种是清理指定时间之前的日志:
1 | # 清理7天之前的日志 |
第二种是限制日志占用的空间大小:
1 | # 限制systemd日志占用不超过1G空间 |
第三种是保留日志文件个数:
1 | # 保留最近的5个日志文件 |
不知道 journalctl
管理日志功能之前,本人用过 find 配合 exec (或者管道加xargs)的土办法清理过期日志:
1 | # 删除7天前的日志 |
一劳永逸的办法
上文介绍的清理systemd日志方法适合一次性手动管理,重复做就没意思了。一劳永逸的办法是配置systemd journal,让其自动管理日志,不占用过多磁盘空间。
方法是编辑 /etc/systemd/journald.conf
文件,对其中的参数进行设置。例如限制日志最大占用1G空间:
1 | [Journal] |
保存配置文件后记得重新加载:sudo systemctl restart systemd-journald