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
相关产品推荐
相关产品推荐

