Miroslav Zagorac d8e69f07dc MINOR: otel: test: added test and benchmark suite for the OTel filter
Added a test suite under addons/otel/test/ for the OpenTelemetry filter.
Five scenarios exercise different filter capabilities: standalone (sa)
covers all hook points including idle-timeout heartbeats, metrics and log
records; compact (cmp) covers the full request/response lifecycle with
ACL-based error handling; context (ctx) tests explicit inject/extract
propagation through numbered context variables; frontend/backend (fe/be)
tests distributed tracing across two HAProxy instances; and empty tests
bare filter initialisation with no active scopes.

A performance benchmarking script (test-speed.sh) uses wrk to measure
throughput and latency at different rate-limit settings (100% through 0%,
disabled, and filter-off).  Each scenario includes comprehensive YAML
exporter definitions covering OTLP file/gRPC/HTTP, ostream, memory,
Zipkin, and Elasticsearch backends.
2026-04-13 09:23:26 +02:00

82 lines
2.7 KiB
INI

[otel-test-cmp]
otel-instrumentation otel-test-instrumentation
config cmp/otel.yml
# log localhost:514 local7 debug
option dontlog-normal
option hard-errors
no option disabled
rate-limit 100.0
scopes client_session_start
scopes frontend_tcp_request
scopes frontend_http_request
scopes backend_tcp_request
scopes backend_http_request
scopes server_unavailable
scopes server_session_start
scopes tcp_response
scopes http_response http_response-error server_session_end client_session_end
otel-scope client_session_start
span "HAProxy session" root
baggage "haproxy_id" var(sess.otel.uuid)
span "Client session" parent "HAProxy session"
otel-event on-client-session-start
otel-scope frontend_tcp_request
span "Frontend TCP request" parent "Client session"
otel-event on-frontend-tcp-request
otel-scope frontend_http_request
span "Frontend HTTP request" parent "Frontend TCP request"
attribute "http.method" method
attribute "http.url" url
attribute "http.version" str("HTTP/") req.ver
finish "Frontend TCP request"
otel-event on-frontend-http-request
otel-scope backend_tcp_request
span "Backend TCP request" parent "Frontend HTTP request"
finish "Frontend HTTP request"
otel-event on-backend-tcp-request
otel-scope backend_http_request
span "Backend HTTP request" parent "Backend TCP request"
finish "Backend TCP request"
otel-event on-backend-http-request
otel-scope server_unavailable
span "HAProxy session"
status "error" str("503 Service Unavailable")
finish *
otel-event on-server-unavailable
otel-scope server_session_start
span "Server session" parent "HAProxy session"
finish "Backend HTTP request"
otel-event on-server-session-start
otel-scope tcp_response
span "TCP response" parent "Server session"
otel-event on-tcp-response
otel-scope http_response
span "HTTP response" parent "TCP response"
attribute "http.status_code" status
finish "TCP response"
otel-event on-http-response
otel-scope http_response-error
span "HTTP response"
status "error" str("!acl-http-status-ok")
otel-event on-http-response if !acl-http-status-ok
otel-scope server_session_end
finish "HTTP response" "Server session"
otel-event on-http-response
otel-scope client_session_end
finish "*"
otel-event on-http-response