src/frontend-proxy/envoy.tmpl.yaml (243 lines of code) (raw):
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: ${ENVOY_PORT}
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
codec_type: AUTO
stat_prefix: ingress_http
tracing:
spawn_upstream_span: true
provider:
name: envoy.tracers.opentelemetry
typed_config:
"@type": type.googleapis.com/envoy.config.trace.v3.OpenTelemetryConfig
grpc_service:
envoy_grpc:
cluster_name: opentelemetry_collector_grpc
timeout: 0.250s
service_name: ${OTEL_SERVICE_NAME}
resource_detectors:
- name: envoy.tracers.opentelemetry.resource_detectors.environment
typed_config:
"@type": type.googleapis.com/envoy.extensions.tracers.opentelemetry.resource_detectors.v3.EnvironmentResourceDetectorConfig
route_config:
name: local_route
virtual_hosts:
- name: frontend
domains:
- "*"
routes:
- match: { prefix: "/loadgen" }
route: { cluster: loadgen, prefix_rewrite: "/" }
- match: { prefix: "/otlp-http/" }
route: { cluster: opentelemetry_collector_http, prefix_rewrite: "/" }
- match: { prefix: "/jaeger" }
route: { cluster: jaeger }
- match: { prefix: "/grafana" }
route: { cluster: grafana }
- match: { prefix: "/images/" }
route: { cluster: image-provider, prefix_rewrite: "/" }
- match: { prefix: "/flagservice/" }
route: { cluster: flagservice, prefix_rewrite: "/", timeout: 0s }
- match: { prefix: "/feature" }
route: { cluster: flagd-ui }
- match: { prefix: "/" }
route: { cluster: frontend }
http_filters:
- name: envoy.filters.http.fault
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.fault.v3.HTTPFault
max_active_faults: 100
delay:
header_delay: {}
percentage:
numerator: 100
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
access_log:
- name: envoy.access_loggers.open_telemetry
typed_config:
"@type": "type.googleapis.com/envoy.extensions.access_loggers.open_telemetry.v3.OpenTelemetryAccessLogConfig"
common_config:
log_name: "otel_envoy_access_log"
grpc_service:
envoy_grpc:
cluster_name: opentelemetry_collector_grpc
transport_api_version: "V3"
body:
# yamllint disable-line rule:line-length
string_value: "[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS% \"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" %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%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n"
resource_attributes:
values:
- key: "service.name"
value:
string_value: ${OTEL_SERVICE_NAME}
attributes:
values:
- key: "destination.address"
value:
string_value: "%UPSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%"
- key: "event.name"
value:
string_value: "proxy.access"
- key: "server.address"
value:
string_value: "%DOWNSTREAM_LOCAL_ADDRESS%"
- key: "source.address"
value:
string_value: "%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%"
- key: "upstream.cluster"
value:
string_value: "%UPSTREAM_CLUSTER%"
- key: "upstream.host"
value:
string_value: "%UPSTREAM_HOST%"
- key: "user_agent.original"
value:
string_value: "%REQ(USER-AGENT)%"
- key: "url.full"
value:
string_value: "%REQ(:SCHEME)%://%REQ(:AUTHORITY)%%REQ(:PATH)%"
- key: "url.path"
value:
string_value: "%REQ(:PATH)%"
- key: "url.query"
value:
string_value: "%REQ(:QUERY)%"
- key: "url.template"
value:
string_value: "%ROUTE_NAME%"
clusters:
- name: opentelemetry_collector_grpc
type: STRICT_DNS
lb_policy: ROUND_ROBIN
typed_extension_protocol_options:
envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
"@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
explicit_http_config:
http2_protocol_options: {}
load_assignment:
cluster_name: opentelemetry_collector_grpc
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${OTEL_COLLECTOR_HOST}
port_value: ${OTEL_COLLECTOR_PORT_GRPC}
- name: opentelemetry_collector_http
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: opentelemetry_collector_http
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${OTEL_COLLECTOR_HOST}
port_value: ${OTEL_COLLECTOR_PORT_HTTP}
- name: frontend
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: frontend
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${FRONTEND_HOST}
port_value: ${FRONTEND_PORT}
- name: image-provider
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: image-provider
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${IMAGE_PROVIDER_HOST}
port_value: ${IMAGE_PROVIDER_PORT}
- name: flagservice
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: flagservice
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${FLAGD_HOST}
port_value: ${FLAGD_PORT}
- name: flagd-ui
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: flagd-ui
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${FLAGD_UI_HOST}
port_value: ${FLAGD_UI_PORT}
- name: loadgen
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: loadgen
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${LOCUST_WEB_HOST}
port_value: ${LOCUST_WEB_PORT}
- name: grafana
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: grafana
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${GRAFANA_HOST}
port_value: ${GRAFANA_PORT}
- name: jaeger
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: jaeger
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: ${JAEGER_HOST}
port_value: ${JAEGER_PORT}
admin:
address:
socket_address:
address: 0.0.0.0
port_value: 10000
layered_runtime:
layers:
- name: static_layer_0
static_layer:
envoy:
resource_limits:
listener:
example_listener_name:
connection_limit: 10000