如何阻止Kubernetes日志轮转时压缩文件?或解决日志轮转引发的日志丢失问题?
如何阻止Kubernetes日志轮转时压缩文件?或解决日志轮转引发的日志丢失问题?
嗨,我来帮你搞定这个日志丢失的问题~结合你描述的场景(Kubelet负责日志轮转,Filebeat读取/var/log/containers软链接),给你两个方向的解决方案:
一、直接让Kubelet停止压缩轮转后的日志
你的日志轮转是Kubelet内置机制在处理,和系统的logrotate无关,所以要通过修改Kubelet配置来关闭压缩:
- 修改Kubelet配置:
如果你用配置文件管理Kubelet(通常路径是/var/lib/kubelet/config.yaml),直接添加或修改这一行:
要是用启动参数配置Kubelet,就在Kubelet的启动命令里加上:containerLogCompression: false--container-log-compression=false - 重启Kubelet生效:
根据你的系统服务管理器执行重启命令,比如用systemd的话:systemctl restart kubelet
这样Kubelet轮转日志时只会重命名文件(比如xxx.log→xxx.log.1),不会压缩成.gz,Filebeat就能正常追踪所有轮转后的文件了。
二、不改Kubelet配置,让Filebeat适配压缩的轮转日志
如果因为某些限制不能修改Kubelet配置,那可以调整Filebeat的配置,让它能正确读取压缩后的日志文件,避免丢失:
调整监控路径:
确保Filebeat监控的路径包含所有轮转后的文件,把原来的/var/log/containers/*.log改成:paths: - /var/log/containers/*.log*这样会匹配到
.log、.log.1、.log.1.gz这类轮转后的文件。优化Filebeat的文件句柄管理:
在Filebeat的input配置里添加以下参数,让它能及时追踪文件轮转和压缩的变化:filebeat.inputs: - type: log paths: - /var/log/containers/*.log* harvester: close_inactive: 5m # 5分钟没有写入就关闭文件句柄,避免一直盯着旧文件 close_renamed: true # 文件被重命名(轮转)时关闭旧句柄 ignore_older: 24h # 忽略24小时以上的旧文件,减少资源占用Filebeat默认支持读取gzip压缩文件,只要路径匹配到
.gz文件,就会自动解压读取,不用额外开启压缩支持。
最后再补充下你提到的细节:你的日志轮转确实是Kubelet在负责,和系统的logrotate完全无关,所以/etc/logrotate.d和/var/lib/logrotate/status里找不到相关配置是正常的,不用纠结这部分~
备注:内容来源于stack exchange,提问作者user432024
相关产品推荐
相关产品推荐

