DOWNSTREAM_REMOTE_ADDRESS* and DOWNSTREAM_DIRECT_REMOTE_ADDRESS* support in upstream_log
- Dominant language
- C++
- Stars
- 28.9k
- Forks
- 5.6k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 428
Description
*Description*:
Using DOWNSTREAM_REMOTE_ADDRESS* and DOWNSTREAM_DIRECT_REMOTE_ADDRESS* fields in router's `upstream_log` does not work properly, but it is stated in docs that you can use there everything that `access_log` supports.
Envoy 1.12.x just segfaults on such attempts
Envoy 1.13.x returns "-" instead of actual addresses
The reason for this is probably due to missing `setDownstream*Address` calls in [upstream_request.cc](https://github.com/envoyproxy/envoy/blob/master/source/common/router/upstream_request.cc) for `stream_info_`.
*Config*:
```
admin:
access_log_path: /tmp/admin.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 8080 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route:
cluster: my_service
http_filters:
- name: envoy.router
config:
upstream_log:
name: envoy.file_access_log
config:
path: /tmp/upstream.log
json_format:
downstream_addr: "%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%"
- name: listener_1
address:
socket_address: { address: 0.0.0.0, port_value: 8081 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
direct_response:
status: 200
body:
inline_string: "OK.\n"
http_filters:
- name: envoy.router
clusters:
- name: my_service
connect_timeout: 1.25s
type: static
hosts:
- socket_address:
address: 127.0.0.1
port_value: 8081
```
*Repro steps:*
Run `curl 127.0.0.1:8080` and watch /tmp/upstream.log for 1.13.x or stdout for 1.12.x.
*Logs*:
Upstream log for 1.13.x:
```
{"downstream_addr":"-"}
```
Stacktrace for 1.12.x:
```
Caught Segmentation fault, suspect faulting address 0x0
Backtrace (use tools/stack_decode.py to get line numbers):
Envoy version: e5a97a116046e5c57cf01adf07f3acba65324f55/1.12.2/Clean/RELEASE/BoringSSL
#0: __restore_rt [0x7f3426f7a890]
#1: std::_Function_handler<>::_M_invoke() [0x55ffd845cdd0]
#2: _ZNK5Envoy9AccessLog19StreamInfoFormatter6formatB5cxx11ERKNS_4Http9HeaderMapES5_S5_RKNS_10StreamInfo10StreamInfoE [0x55ffd845c970]
#3: _ZNK5Envoy9AccessLog13FormatterImpl6formatB5cxx11ERKNS_4Http9HeaderMapES5_S5_RKNS_10StreamInfo10StreamInfoE [0x55ffd845c8c3]
#4: _ZNK5Envoy9AccessLog17JsonFormatterImpl5toMapB5cxx11ERKNS_4Http9HeaderMapES5_S5_RKNS_10StreamInfo10StreamInfoE [0x55ffd845e8e5]
#5: _ZNK5Envoy9AccessLog17JsonFormatterImpl6formatB5cxx11ERKNS_4Http9HeaderMapES5_S5_RKNS_10StreamInfo10StreamInfoE [0x55ffd8463cc0]
#6: Envoy::Extensions::AccessLoggers::File::FileAccessLog::emitLog() [0x55ffd83e6488]
#7: Envoy::Router::Filter::UpstreamRequest::~UpstreamRequest() [0x55ffd835281f]
#8: Envoy::Router::Filter::UpstreamRequest::~UpstreamRequest() [0x55ffd83529d1]
#9: Envoy::Router::Filter::onUpstreamReset() [0x55ffd834f9ca]
#10: Envoy::Router::Filter::UpstreamRequest::onResetStream() [0x55ffd834ff0c]
#11: Envoy::Http::Http2::ConnectionImpl::StreamImpl::resetStream() [0x55ffd83b16bd]
#12: Envoy::Http::CodecClient::onEvent() [0x55ffd832e047]
#13: Envoy::Network::ConnectionImpl::raiseEvent() [0x55ffd8186495]
#14: Envoy::Network::ConnectionImpl::closeSocket() [0x55ffd8185999]
#15: Envoy::Network::ConnectionImpl::onReadReady() [0x55ffd8185df2]
#16: Envoy::Network::ConnectionImpl::onFileEvent() [0x55ffd81865ca]
#17: Envoy::Event::FileEventImpl::assignEvents()::{lambda()#1}::_FUN() [0x55ffd817fc9a]
#18: event_process_active_single_queue.isra.33 [0x55ffd849eb30]
#19: event_base_loop [0x55ffd849f1af]
#20: Envoy::Server::WorkerImpl::threadRoutine() [0x55ffd81781ca]
#21: Envoy::Thread::ThreadImplPosix::ThreadImplPosix()::{lambda()#1}::_FUN() [0x55ffd86183a5]
#22: start_thread [0x7f3426f6f6db]
```
Contributor guide
Assessment
This issue has not been assessed yet.