/ src / api / metrics.py
metrics.py
 1  """
 2  Prometheus metrics for Ag3ntum API.
 3  
 4  Exposes /api/v1/metrics with:
 5  - HTTP request duration/count histograms
 6  - Active session gauge
 7  - Task queue depth gauge
 8  - Custom business metrics
 9  """
10  import logging
11  
12  from prometheus_fastapi_instrumentator import Instrumentator
13  
14  logger = logging.getLogger(__name__)
15  
16  instrumentator = Instrumentator(
17      should_group_status_codes=True,
18      should_ignore_untemplated=True,
19      excluded_handlers=["/api/v1/health", "/api/v1/metrics"],
20  )
21  
22  
23  def setup_metrics(app):
24      """Initialize Prometheus metrics on the FastAPI app.
25  
26      Call this during app creation, after routes are registered.
27      The /metrics endpoint is exposed at the app root (not under /api/v1).
28      """
29      try:
30          instrumentator.instrument(app)
31          instrumentator.expose(app, endpoint="/api/v1/metrics", include_in_schema=False)
32          logger.info("Prometheus metrics enabled at /api/v1/metrics")
33      except Exception as e:
34          logger.warning(f"Failed to initialize Prometheus metrics: {e}")