From 8a1ccb1e0f5192ea93868b99e8b1e0acf553498b Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Fri, 17 Oct 2025 14:07:27 +0200 Subject: [PATCH] Fix OpenTelemetry Prometheus metrics server startup - Add _start_prometheus_server method to start HTTP server - Register PrometheusMetricReader collector with prometheus_client REGISTRY - Parse endpoint to extract host and port for HTTP server - This fixes the issue where metrics endpoint was not accessible --- ivatar/opentelemetry_config.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ivatar/opentelemetry_config.py b/ivatar/opentelemetry_config.py index 5e5251e..6c637af 100644 --- a/ivatar/opentelemetry_config.py +++ b/ivatar/opentelemetry_config.py @@ -129,6 +129,9 @@ class OpenTelemetryConfig: ) metrics.set_meter_provider(meter_provider) + # Start Prometheus HTTP server for metrics endpoint + self._start_prometheus_server(prometheus_reader, prometheus_endpoint) + logger.info( f"OpenTelemetry metrics configured with Prometheus endpoint: {prometheus_endpoint}" ) @@ -137,6 +140,33 @@ class OpenTelemetryConfig: logger.error(f"Failed to setup OpenTelemetry metrics: {e}") self.enabled = False + def _start_prometheus_server( + self, prometheus_reader: PrometheusMetricReader, endpoint: str + ) -> None: + """Start Prometheus HTTP server for metrics endpoint.""" + try: + from prometheus_client import start_http_server, REGISTRY + + # Parse endpoint to get host and port + if ":" in endpoint: + host, port = endpoint.split(":", 1) + port = int(port) + else: + host = "0.0.0.0" + port = int(endpoint) + + # Register the PrometheusMetricReader collector with prometheus_client + REGISTRY.register(prometheus_reader._collector) + + # Start HTTP server + start_http_server(port, addr=host) + + logger.info(f"Prometheus metrics server started on {host}:{port}") + + except Exception as e: + logger.error(f"Failed to start Prometheus metrics server: {e}") + self.enabled = False + def setup_instrumentation(self) -> None: """Set up OpenTelemetry instrumentation for various libraries.""" try: