22 lines
856 B
Python
22 lines
856 B
Python
|
|
"""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)
|