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

如何在Envoy 1.18中分离上游与下游访问日志?

Envoy 1.18 分离入站/出站访问日志实现方案

Envoy 1.18 没有提供直接的filter_direction字段,但可以通过两种方式实现按流量方向分离访问日志:

方式一:使用表达式过滤器判断流量方向

通过ExpressionFilter结合request.direction属性,精准过滤入站或出站流量日志:

入站日志配置(仅记录客户端到Envoy的流量)

access_log:
  - name: envoy.file_access_log
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
      path: /var/log/envoy/access-inbound.log
      filter:
        name: envoy.filters.access_log.expression
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.access_loggers.expression.v3.ExpressionFilter
          # 仅匹配入站流量
          expression: "request.direction == 'INBOUND'"

出站日志配置(仅记录Envoy到上游集群的流量)

access_log:
  - name: envoy.file_access_log
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
      path: /var/log/envoy/access-outbound.log
      filter:
        name: envoy.filters.access_log.expression
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.access_loggers.expression.v3.ExpressionFilter
          # 仅匹配出站流量
          expression: "request.direction == 'OUTBOUND'"

如果已有自定义过滤器,可通过逻辑运算符结合,比如:

expression: "request.direction == 'INBOUND' and (request.path starts_with '/api')"

方式二:按Envoy组件分离配置(更严谨)

入站流量由listeners组件处理,出站流量由clusters组件处理,分别在对应块中配置访问日志,无需额外过滤即可天然分离:

Listener级别(入站流量日志)

listeners:
  - name: ingress_listener
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
      - filters:
          - name: envoy.filters.network.http_connection_manager
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
              stat_prefix: ingress_http
              route_config:
                name: local_route
                virtual_hosts:
                  - name: local_service
                    domains: ["*"]
                    routes:
                      - match: { prefix: "/" }
                        route: { cluster: upstream_service }
              http_filters:
                - name: envoy.filters.http.router
                  typed_config: {}
              # 入站流量日志配置在listener的http_connection_manager下
              access_log:
                - name: envoy.file_access_log
                  typed_config:
                    "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
                    path: /var/log/envoy/access-inbound.log

Cluster级别(出站流量日志)

clusters:
  - name: upstream_service
    connect_timeout: 0.25s
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: upstream_service
      endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  socket_address: { address: upstream, port_value: 80 }
    # 出站流量日志配置在cluster下
    access_log:
      - name: envoy.file_access_log
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
          path: /var/log/envoy/access-outbound.log

两种方式对比

  • 表达式过滤器方式:适合需要在全局或单一配置块中区分流量方向的场景,灵活性高。
  • 组件分离配置方式:逻辑更清晰,日志归属明确,避免过滤规则出错,推荐用于生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:15:09