You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Kubernetes日志轮转时压缩文件?或解决日志轮转引发的日志丢失问题?

如何阻止Kubernetes日志轮转时压缩文件?或解决日志轮转引发的日志丢失问题?

嗨,我来帮你搞定这个日志丢失的问题~结合你描述的场景(Kubelet负责日志轮转,Filebeat读取/var/log/containers软链接),给你两个方向的解决方案:


一、直接让Kubelet停止压缩轮转后的日志

你的日志轮转是Kubelet内置机制在处理,和系统的logrotate无关,所以要通过修改Kubelet配置来关闭压缩:

  • 修改Kubelet配置:
    如果你用配置文件管理Kubelet(通常路径是/var/lib/kubelet/config.yaml),直接添加或修改这一行:
    containerLogCompression: false
    
    要是用启动参数配置Kubelet,就在Kubelet的启动命令里加上:
    --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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:03:04