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

Envoy Proxy无请求日志问题求助:gRPC流量转发配置排查

Envoy转发gRPC流量无请求日志问题排查

问题背景

尝试通过localhost:8081访问Envoy容器,将gRPC流量转发至宿主机的localhost:8080端点,但Envoy未生成任何请求日志,仅输出启动/关闭阶段的基础日志。

当前Envoy配置

admin:
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
  listeners:
    - name: listener_0
      address:
        socket_address: { address: 127.0.0.1, port_value: 8081 }
      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
                codec_type: AUTO
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: local_service
                      domains: ["*"]
                      routes:
                        - match: { prefix: "/" }
                          route: { cluster: some_service }
                http_filters:
                  - name: envoy.filters.http.router
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
    - name: some_service
      connect_timeout: 0.25s
      type: STATIC
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: some_service
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 127.0.0.1
                      port_value: 8080

现有Envoy日志输出

[2023-01-17 13:21:20.502][9][info][admin] [source/server/admin/admin.cc:67] admin address: 127.0.0.1:9901
[2023-01-17 13:21:20.502][9][info][config] [source/server/configuration_impl.cc:131] loading tracing configuration
[2023-01-17 13:21:20.502][9][info][config] [source/server/configuration_impl.cc:91] loading 0 static secret(s)
[2023-01-17 13:21:20.502][9][info][config] [source/server/configuration_impl.cc:97] loading 1 cluster(s)
[2023-01-17 13:21:20.511][9][info][config] [source/server/configuration_impl.cc:101] loading 1 listener(s)
[2023-01-17 13:21:20.514][9][info][config] [source/server/configuration_impl.cc:113] loading stats configuration
[2023-01-17 13:21:20.514][9][info][runtime] [source/common/runtime/runtime_impl.cc:463] RTDS has finished initialization
[2023-01-17 13:21:20.514][9][info][upstream] [source/common/upstream/cluster_manager_impl.cc:226] cm init: all clusters initialized
[2023-01-17 13:21:20.514][9][warning][main] [source/server/server.cc:794] there is no configured limit to the number of allowed active connections. Set a limit via the runtime key overload.global_downstream_max_connections
[2023-01-17 13:21:20.517][9][info][main] [source/server/server.cc:896] all clusters initialized. initializing init manager
[2023-01-17 13:21:20.517][9][info][config] [source/extensions/listener_managers/listener_manager/listener_manager_impl.cc:852] all dependencies initialized. starting workers
[2023-01-17 13:21:20.520][9][info][main] [source/server/server.cc:915] starting main dispatch loop
[2023-01-17 13:36:19.810][9][info][main] [source/server/drain_manager_impl.cc:171] shutting down parent after drain

Docker容器信息

af885ab28109   poc_gateway            "/docker-entrypoint.…"   33 minutes ago   Up 33 minutes   0.0.0.0:8081->8081/tcp, 10000/tcp   gateway

问题分析与排查建议

1. 日志配置缺失:未启用请求日志过滤器

当前配置没有显式配置请求日志(Access Log),Envoy默认不会自动输出请求级别的日志。需要在HttpConnectionManager的http_filters中添加envoy.filters.http.access_log过滤器,并指定日志格式和输出目标。

修改后的配置示例(添加access_log):

# 在HttpConnectionManager的http_filters中,router过滤器之前添加access_log
http_filters:
  - name: envoy.filters.http.access_log
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.http.access_log.v3.AccessLog
      access_log:
        name: envoy.access_loggers.file
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
          path: "/dev/stdout"
          format: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\"\n"
  - name: envoy.filters.http.router
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

该配置会将请求日志输出到容器标准输出,可直接通过docker logs查看。

2. 容器网络问题:目标服务地址错误

你的cluster配置中,目标地址是127.0.0.1:8080——在Docker容器内,127.0.0.1指向容器自身,而非宿主机。如果gRPC服务运行在宿主机的8080端口,需修改cluster地址:

  • Docker Desktop(Mac/Windows):用host.docker.internal替代127.0.0.1
  • Linux:使用宿主机的实际IP,或启动容器时添加--network host参数(容器共享宿主机网络,此时127.0.0.1可直接指向宿主机)

修正后的cluster地址示例(Docker Desktop):

address:
  socket_address:
    address: host.docker.internal
    port_value: 8080

3. 验证流量是否到达Envoy

使用grpcurl测试gRPC请求是否能抵达Envoy:

grpcurl -plaintext localhost:8081 list

若请求能到达Envoy,即使后端服务不可用,Envoy也会输出对应请求日志(前提是已配置access_log)。若无任何日志,说明请求未到达Envoy,需检查端口映射是否正常(你的Docker映射0.0.0.0:8081->8081/tcp是正常的)。

4. 调整Envoy日志级别

如需查看更详细的调试日志,可启动Envoy时添加-l debug参数,或在配置中添加全局日志配置:

logging:
  level:
    default: debug

调试日志可帮助排查连接建立、路由匹配等阶段的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:25:25