Skip to content

Issue #20: Add Prometheus Metrics Export Integration [7](#header-7) #40

@fuzziecoder

Description

@fuzziecoder

🎯 Issue Summary

Integrate Prometheus metrics export for monitoring pipeline performance and system health.

📋 Current Behavior

No standardized metrics export for external monitoring systems.

Missing Capabilities:

  • No Prometheus metrics endpoint
  • No time-series metrics collection
  • No integration with Grafana

✨ Proposed Solution

Add Prometheus metrics exporter with:

  • Standard /metrics endpoint
  • Pipeline execution metrics
  • System resource metrics
  • Custom business metrics

🔧 Technical Requirements

1. Prometheus Client

  • Add prometheus-client to requirements.txt
  • Create backend/monitoring/prometheus.py
  • Initialize metrics registry

2. Metric Definitions

  • pipeline_executions_total (Counter) - by status, pipeline_id
  • pipeline_execution_duration_seconds (Histogram) - by pipeline_id
  • pipeline_active_executions (Gauge)
  • pipeline_stage_duration_seconds (Histogram) - by stage_name
  • api_request_duration_seconds (Histogram) - by endpoint

3. Instrumentation

  • Instrument pipeline executor
  • Instrument API endpoints
  • Track stage-level metrics
  • Add custom labels (pipeline_id, status, stage_name)

4. Metrics Endpoint

  • Add GET /metrics endpoint
  • Return Prometheus text format
  • Include process metrics (CPU, memory)

5. Grafana Dashboard

  • Create Grafana dashboard JSON
  • Add panels for success rate, duration, throughput
  • Include alerting rules

📝 Acceptance Criteria

  • /metrics endpoint returns Prometheus format
  • ✅ All pipeline executions tracked with labels
  • ✅ Metrics scraped by Prometheus successfully
  • ✅ Grafana dashboard displays metrics
  • ✅ Documentation for setup

🏷️ Labels

apertre3.0 Medium enhancement integration monitoring

💡 Implementation Example

# backend/monitoring/prometheus.py  [8](#header-8)
from prometheus_client import Counter, Histogram, Gauge, generate_latest  
  
pipeline_executions = Counter(  
    'pipeline_executions_total',  
    'Total pipeline executions',  
    ['pipeline_id', 'status']  
)  
  
pipeline_duration = Histogram(  
    'pipeline_execution_duration_seconds',  
    'Pipeline execution duration',  
    ['pipeline_id']  
)  
  
# In executor:  [9](#header-9)
pipeline_executions.labels(pipeline_id=id, status='success').inc()  
pipeline_duration.labels(pipeline_id=id).observe(duration)  
  
# Endpoint:  [10](#header-10)
@router.get("/metrics")  
async def metrics():  
    return Response(content=generate_latest(), media_type="text/plain")
📚 Resources
[Prometheus Python Client](https://github.com/prometheus/client_python)
[Prometheus Best Practices](https://prometheus.io/docs/practices/naming/)

---  
  
## Notes  [11](#header-11)
  
These integration issues focus on connecting FlexiRoaster with external services mentioned in the architecture diagram at [4-cite-1](#4-cite-1)  (PostgreSQL, Redis, RabbitMQ, S3). Each issue provides production-ready integrations for notifications (Slack), CI/CD (GitHub), storage (S3), and monitoring (Prometheus).   
  
Wiki pages you might want to explore:  
- [Architecture Overview (fuzziecoder/Flexi-Roaster)](/wiki/fuzziecoder/Flexi-Roaster#3)




[README.md](https://github.com/fuzziecoder/Flexi-Roaster/blob/7da37f1f/README.md#L24-L59)
Flexi-Roaster

Metadata

Metadata

Projects

Status

Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions