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

如何在Envoy基于文件的日志功能中配置日志轮转?

Envoy FileAccessLog 日志轮转相关问题解答

原生FileAccessLog的内置滚动机制

type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog 本身没有任何内置的日志滚动/轮转逻辑。它的工作逻辑非常简单:Envoy启动时打开配置中指定的日志文件,持有该文件的句柄,之后所有访问日志以追加模式持续写入这个句柄,全程不会主动判断文件大小、写入时间,也不会主动切分、重命名、清理旧日志。

默认配置下日志文件是否会持续增大

会。只要Envoy进程持续运行、没有外部介入操作,日志文件会随着请求写入持续增大,没有上限,直到占满所在磁盘分区的可用空间。
如果手动对日志文件做重命名/移动操作但没有通知Envoy,Envoy依然会持有原文件的句柄继续写入,被移动走的旧日志文件体积依然会持续增长,不会释放磁盘空间。

日志轮转的实现方案

生产环境通用的实现方案有两种,都不需要修改Envoy本身的日志写入逻辑:

  • 方案1:宿主机部署场景使用系统logrotate
    这是物理机/虚拟机部署Envoy时最通用的方案,依赖Linux系统自带的logrotate组件完成日志切分、压缩、保留周期管理,只需要在切分完成后给Envoy进程发送SIGUSR1信号,通知Envoy重新打开日志文件句柄即可。
    参考配置(放置在/etc/logrotate.d/envoy路径下):
    /var/log/envoy/access.log {
        # 按天轮转
        daily
        # 单文件超过1G也触发轮转,避免短时间大流量打满磁盘
        size 1G
        # 保留14份历史日志
        rotate 14
        # 轮转后的旧日志用gzip压缩
        compress
        # 最新一份轮转日志不压缩,方便排查问题
        delaycompress
        # 日志文件不存在时不报错
        missingok
        # 文件为空时不轮转
        notifempty
        # 轮转后创建新文件,设置权限和属主
        create 0640 envoy envoy
        # 所有日志切分完成后统一执行脚本
        sharedscripts
        postrotate
            # 给Envoy进程发SIGUSR1信号触发日志句柄重开
            /bin/kill -SIGUSR1 $(cat /var/run/envoy/envoy.pid 2>/dev/null) 2>/dev/null || true
        endscript
    }
    
  • 方案2:容器/K8s场景将日志输出到标准输出
    云原生部署场景下不需要在容器内部处理日志轮转,直接将FileAccessLog的日志路径配置为/dev/stdout,让日志输出到标准输出流:
    access_log:
    - name: envoy.access_loggers.file
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
        path: /dev/stdout
        log_format:
          # 可按需自定义日志格式
          text_format_source:
            inline_string: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\"\n"
    
    后续日志轮转、采集工作交给容器运行时、K8s kubelet或者部署的边车日志组件(如Fluent Bit、Filebeat)完成即可,不需要在Envoy侧做额外配置。

注意:不要使用手动复制、直接清空日志文件的方式处理日志,未发送SIGUSR1信号的情况下,这类操作会导致日志丢失、磁盘空间无法正常释放。

内容的提问来源于stack exchange,提问作者Bishnu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:24:21