perf: MeterProvider with Prometheus scrape endpoint #205

Closed
opened 2026-03-24 23:50:06 +00:00 by kert · 1 comment
Owner

Implement src/perf/_meter.py for metrics collection.

Metrics

  • stack_pipeline_duration_seconds{pipeline} — histogram
  • stack_step_duration_seconds{pipeline,step} — histogram
  • stack_step_rows_out{pipeline,step} — gauge
  • stack_step_memory_delta_mb{pipeline,step} — gauge
  • stack_cache_hits_total{pipeline} — counter
  • stack_cache_misses_total{pipeline} — counter
  • stack_system_rss_mb{service} — gauge
  • stack_system_cpu_percent{service} — gauge

Tasks

  • MeterProvider setup with OTLP gRPC exporter
  • /metrics endpoint via opentelemetry-exporter-prometheus (scrape target)
  • MockMeter no-op pattern matching MockTracer
  • Tests: verify metric recording and label dimensions
Implement `src/perf/_meter.py` for metrics collection. ## Metrics - `stack_pipeline_duration_seconds{pipeline}` — histogram - `stack_step_duration_seconds{pipeline,step}` — histogram - `stack_step_rows_out{pipeline,step}` — gauge - `stack_step_memory_delta_mb{pipeline,step}` — gauge - `stack_cache_hits_total{pipeline}` — counter - `stack_cache_misses_total{pipeline}` — counter - `stack_system_rss_mb{service}` — gauge - `stack_system_cpu_percent{service}` — gauge ## Tasks - [ ] `MeterProvider` setup with OTLP gRPC exporter - [ ] `/metrics` endpoint via `opentelemetry-exporter-prometheus` (scrape target) - [ ] MockMeter no-op pattern matching MockTracer - [ ] Tests: verify metric recording and label dimensions
kert added this to the P26: Pipeline Telemetry — OTel instrumentation, perf module, Grafana dashboards milestone 2026-03-24 23:50:06 +00:00
Author
Owner

Complete. _meter.py with MockMeter + MeterProvider was built in #203. Added 5 tests in test_meter.py:

  • Counter (add, verify cumulative value)
  • Histogram (record, verify count + sum)
  • UpDownCounter as gauge
  • Multiple instruments on one meter
  • create_meter mock dispatch

Note: OTel 1.40 uses set-once global provider — tests use provider.get_meter() directly to avoid global mutation conflicts.

✅ 5/5 passed, lint clean.

Complete. `_meter.py` with MockMeter + MeterProvider was built in #203. Added 5 tests in `test_meter.py`: - Counter (add, verify cumulative value) - Histogram (record, verify count + sum) - UpDownCounter as gauge - Multiple instruments on one meter - create_meter mock dispatch Note: OTel 1.40 uses set-once global provider — tests use provider.get_meter() directly to avoid global mutation conflicts. ✅ 5/5 passed, lint clean.
kert closed this issue 2026-03-25 00:04:24 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: homelab/stack#205