feat: project foundation — monorepo setup, shared config, redis streams, telemetry
- pyproject.toml with core deps and optional dep groups per service - shared/config.py: Pydantic BaseSettings with TRADING_ env prefix - shared/redis_streams.py: StreamPublisher/StreamConsumer wrappers - shared/telemetry.py: OpenTelemetry + Prometheus metric export - tests for Redis Streams helpers (5 passing)
This commit is contained in:
parent
0ac9884b89
commit
ae5b3f89d1
7 changed files with 248 additions and 0 deletions
21
shared/telemetry.py
Normal file
21
shared/telemetry.py
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
"""OpenTelemetry setup with Prometheus metric export."""
|
||||
|
||||
from opentelemetry import metrics
|
||||
from opentelemetry.exporter.prometheus import PrometheusMetricReader
|
||||
from opentelemetry.sdk.metrics import MeterProvider
|
||||
from prometheus_client import start_http_server
|
||||
|
||||
|
||||
def setup_telemetry(service_name: str, metrics_port: int = 9090) -> metrics.Meter:
|
||||
"""Initialise an OpenTelemetry MeterProvider backed by Prometheus.
|
||||
|
||||
A Prometheus-compatible HTTP server is started on *metrics_port*
|
||||
so that an external Prometheus instance can scrape ``/metrics``.
|
||||
|
||||
Returns a ``Meter`` that services use to create counters, histograms, etc.
|
||||
"""
|
||||
reader = PrometheusMetricReader()
|
||||
provider = MeterProvider(metric_readers=[reader])
|
||||
metrics.set_meter_provider(provider)
|
||||
start_http_server(metrics_port)
|
||||
return metrics.get_meter(service_name)
|
||||
Loading…
Add table
Add a link
Reference in a new issue