From 6ea51afa6689ae8b9f0a1db8e2e1c55de0cfe2d5 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Wed, 5 Oct 2016 10:33:35 +0300 Subject: [PATCH] Add a configurable prometheus namespace for all metrics Fixes #1918 --- config.py | 3 +++ util/metrics/prometheus.py | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/config.py b/config.py index 0bd6578b9..d693ee73f 100644 --- a/config.py +++ b/config.py @@ -369,6 +369,9 @@ class DefaultConfig(object): # URL that specifies the location of the prometheus stats aggregator. PROMETHEUS_AGGREGATOR_URL = 'http://localhost:9092' + # Namespace prefix for all prometheus metrics. + PROMETHEUS_NAMESPACE = 'quay' + # Reverse DNS prefixes that are reserved for internal use on labels and should not be allowable # to be set via the API. DEFAULT_LABEL_KEY_RESERVED_PREFIXES = ['com.docker.', 'io.docker.', 'org.dockerproject.', diff --git a/util/metrics/prometheus.py b/util/metrics/prometheus.py index 331c73412..1461f143d 100644 --- a/util/metrics/prometheus.py +++ b/util/metrics/prometheus.py @@ -25,8 +25,9 @@ class PrometheusPlugin(object): def init_app(self, app): prom_url = app.config.get('PROMETHEUS_AGGREGATOR_URL') + prom_namespace = app.config.get('PROMETHEUS_NAMESPACE') logger.debug('Initializing prometheus with aggregator url: %s', prom_url) - prometheus = Prometheus(prom_url) + prometheus = Prometheus(prom_url, prom_namespace) # register extension with app app.extensions = getattr(app, 'extensions', {}) @@ -39,9 +40,10 @@ class PrometheusPlugin(object): class Prometheus(object): """ Aggregator for collecting stats that are reported to Prometheus. """ - def __init__(self, url=None): + def __init__(self, url=None, namespace=None): self._metric_collectors = [] self._url = url + self._namespace = namespace or '' if url is not None: self._queue = Queue(QUEUE_MAX) @@ -91,6 +93,7 @@ class Prometheus(object): return self._create_collector('Untyped', args, kwargs) def _create_collector(self, collector_type, args, kwargs): + kwargs['namespace'] = kwargs.get('namespace', self._namespace) return _Collector(self.enqueue, collector_type, *args, **kwargs) @@ -138,7 +141,6 @@ class _Collector(object): def __init__(self, enqueue_method, collector_type, collector_name, collector_help, namespace='', subsystem='', **kwargs): self._enqueue_method = enqueue_method - self._base_args = { 'Name': collector_name, 'Namespace': namespace,