log = logging.getLogger(__name__)
-OSM_METRIC_PREFIX = 'osm_'
+OSM_METRIC_PREFIX = "osm_"
class PrometheusBackend(BaseBackend):
-
def __init__(self):
self.custom_collector = CustomCollector()
self._start_exporter(8000)
def handle(self, metrics: List[Metric]):
- prometheus_metrics = []
+ log.debug("handle")
+ log.debug("metrics: %s", metrics)
+ prometheus_metrics = {}
for metric in metrics:
- prometheus_metric = GaugeMetricFamily(
- OSM_METRIC_PREFIX + metric.name,
- 'OSM metric',
- labels=['ns_id', 'vnf_member_index', 'vdu_name']
+ if metric.name not in prometheus_metrics:
+ prometheus_metrics[metric.name] = GaugeMetricFamily(
+ OSM_METRIC_PREFIX + metric.name,
+ "OSM metric",
+ labels=list(metric.tags.keys()),
+ )
+ prometheus_metrics[metric.name].add_metric(
+ list(metric.tags.values()), metric.value
)
- prometheus_metric.add_metric([metric.nsr_id, metric.vnf_member_index, metric.vdur_name], metric.value)
- prometheus_metrics.append(prometheus_metric)
- self.custom_collector.metrics = prometheus_metrics
+ self.custom_collector.metrics = prometheus_metrics.values()
def _start_exporter(self, port):
- log.debug('_start_exporter')
+ log.debug("_start_exporter")
+ log.debug("port: %s", port)
REGISTRY.register(self.custom_collector)
log.info("Starting MON Prometheus exporter at port %s", port)
start_http_server(port)
class CustomCollector(object):
-
def __init__(self):
self.metrics = []
def describe(self):
- log.debug('describe')
+ log.debug("describe")
return []
def collect(self):