]> git.kaiwu.me - haproxy.git/commit
MEDIUM: otel: added OpenTelemetry filter skeleton
authorMiroslav Zagorac <mzagorac@haproxy.com>
Mon, 13 Apr 2026 05:48:51 +0000 (07:48 +0200)
committerWilliam Lallemand <wlallemand@haproxy.com>
Mon, 13 Apr 2026 07:23:26 +0000 (09:23 +0200)
commitcd14abf9f3c391f0de6b34c3371706476d1ca4b2
tree80e0182d4914ee5ad8eff90883a25226c81ef71d
parentb8145fa5d4be12aa6f2f6d0367589e7bffa4ba55
MEDIUM: otel: added OpenTelemetry filter skeleton

The OpenTelemetry (OTel) filter enables distributed tracing of requests
across service boundaries, export of metrics such as request rates,
latencies and error counts, and structured logging tied to trace context,
giving operators a unified view of HAProxy traffic through any
OpenTelemetry-compatible backend.

The OTel filter is implemented using the standard HAProxy stream filter
API.  Stream filters attach to proxies and intercept traffic at each stage
of processing: they receive callbacks on stream creation and destruction,
channel analyzer events, HTTP header and payload processing, and TCP data
forwarding.  This allows the filter to collect telemetry data at every
stage of the request/response lifecycle without modifying the core proxy
logic.

This commit added the minimum set of files required for the filter to
compile: the addon Makefile with pkg-config-based detection of the
opentelemetry-c-wrapper library, header files with configuration
constants, utility macros and type definitions, and the source files
containing stub filter operation callbacks registered through
flt_otel_ops and the "opentelemetry" keyword parser entry point.

The filter uses the opentelemetry-c-wrapper library from HAProxy
Technologies, which provides a C interface to the OpenTelemetry C++ SDK.
This wrapper allows HAProxy, a C codebase, to leverage the full
OpenTelemetry observability pipeline without direct C++ dependencies
in the HAProxy source tree.

  https://github.com/haproxytech/opentelemetry-c-wrapper
  https://github.com/open-telemetry/opentelemetry-cpp

Build options:

  USE_OTEL     - enable the OpenTelemetry filter
  OTEL_DEBUG   - compile the filter in debug mode
  OTEL_INC     - force the include path to the C wrapper
  OTEL_LIB     - force the library path to the C wrapper
  OTEL_RUNPATH - add the C wrapper RUNPATH to the executable

Example build with OTel and debug enabled:

  make -j8 USE_OTEL=1 OTEL_DEBUG=1 TARGET=linux-glibc
13 files changed:
Makefile
addons/otel/AUTHORS [new file with mode: 0644]
addons/otel/MAINTAINERS [new file with mode: 0644]
addons/otel/Makefile [new file with mode: 0644]
addons/otel/include/config.h [new file with mode: 0644]
addons/otel/include/define.h [new file with mode: 0644]
addons/otel/include/filter.h [new file with mode: 0644]
addons/otel/include/include.h [new file with mode: 0644]
addons/otel/include/parser.h [new file with mode: 0644]
addons/otel/src/filter.c [new file with mode: 0644]
addons/otel/src/parser.c [new file with mode: 0644]
include/haproxy/arg-t.h
src/sample.c