HTTP Tap - Streamed trace segments output does not contain headers added by Envoy
#9.325 geöffnet am 12. Dez. 2019
Repository-Metriken
- Stars
- (27.997 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 8T) (378 gemergte PRs in 30 T)
Beschreibung
Title: HTTP Tap - Segmented trace output does not contain headers added by Envoy
Description: Using the Tap feature the fully buffered trace and the streamed trace segments output formats differ with regard to the headers added by Envoy. The streamed trace segments output does not contain the headers added at virtual host, global route and route level while the buffered trace output contains all those. My expectation would be that tap output contains the same HTTP headers for both output format.
Using Envoy version: "44f8c365a1f1798f0af776f6aa64279dc68f5666/1.12.1/Clean/RELEASE/BoringSSL"
Config: The corresponding HTTP config:
- name: envoy.http_connection_manager
config:
codec_type: AUTO
stat_prefix: ingress_http
route_config:
name: remote_api
virtual_hosts:
- name: apiq
domains:
- "*"
request_headers_to_add:
- header:
key: "x-req-hdr-add-vh-level"
value: "req-vh"
routes:
- match:
prefix: "/"
route:
cluster: someserver
request_headers_to_add:
- header:
key: "x-req-hdr-add-rt-level"
value: "req-rt"
request_headers_to_add:
- header:
key: "x-req-hdr-add-global-rt-level"
value: "req-global-rt"
http_filters:
- name: envoy.lua
config:
inline_code: |
function envoy_on_request(request_handle)
request_handle:headers():add("x-req-hdr-add-lua", "req-lua")
end
- name: envoy.filters.http.tap
config:
common_config:
admin_config:
config_id: test_config_id
- name: envoy.router
Tap config used for fully buffered trace output:
config_id: test_config_id
tap_config:
match_config:
any_match: true
output_config:
sinks:
- streaming_admin: {}`
Tap config used for streamed trace segments output:
config_id: test_config_id
tap_config:
match_config:
any_match: true
output_config:
streaming: true
sinks:
- streaming_admin: {}`
Output: Fully buffered trace output.
{
"http_buffered_trace": {
"request": {
"headers": [
{
"key": ":authority",
"value": "10.0.2.15:10000"
},
{
"key": ":path",
"value": "/delay"
},
{
"key": ":method",
"value": "GET"
},
{
"key": ":scheme",
"value": "http"
},
{
"key": "user-agent",
"value": "curl/7.58.0"
},
{
"key": "accept",
"value": "*/*"
},
{
"key": "x-forwarded-proto",
"value": "http"
},
{
"key": "x-request-id",
"value": "462b17b5-7222-4a69-b608-cab90a591698"
},
{
"key": "x-req-hdr-add-lua",
"value": "req-lua"
},
{
"key": "x-envoy-expected-rq-timeout-ms",
"value": "15000"
},
{
"key": "x-req-hdr-add-rt-level",
"value": "req-rt"
},
{
"key": "x-req-hdr-add-vh-level",
"value": "req-vh"
},
{
"key": "x-req-hdr-add-global-rt-level",
"value": "req-global-rt"
}
],
"trailers": []
},
Streamed trace segments output:
{
"http_streamed_trace_segment": {
"trace_id": "15955110079683032660",
"request_headers": {
"headers": [
{
"key": ":authority",
"value": "10.0.2.15:10000"
},
{
"key": ":path",
"value": "/delay"
},
{
"key": ":method",
"value": "GET"
},
{
"key": "user-agent",
"value": "curl/7.58.0"
},
{
"key": "accept",
"value": "*/*"
},
{
"key": "x-forwarded-proto",
"value": "http"
},
{
"key": "x-request-id",
"value": "e0f0d2c0-e20e-4ad9-8799-e3ed98dbf59a"
},
{
"key": "x-req-hdr-add-lua",
"value": "req-lua"
}
]
}
}
}