From 4337a1e3833af5956985ff26aed02c7b565d920f Mon Sep 17 00:00:00 2001 From: Saeed Date: Sat, 27 May 2023 20:33:02 +0330 Subject: [PATCH 1/4] fix(exports): use try except to handle port in use by django gunicorn process --- django_prometheus/exports.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/django_prometheus/exports.py b/django_prometheus/exports.py index 94c04156..f5288b6b 100644 --- a/django_prometheus/exports.py +++ b/django_prometheus/exports.py @@ -42,7 +42,13 @@ def SetupPrometheusEndpointOnPort(port, addr=""): "autoreloader is active. Use the URL exporter, or start django " "with --noreload. See documentation/exports.md." ) - prometheus_client.start_http_server(port, addr=addr) + try: + prometheus_client.start_http_server(port, addr=addr) + except OSError: + """ + first process serves metrics on port 8001, other processes raise error: port already in use + one processes collect metrics from PROMETHEUS_MULTIPROC_DIR + """ class PrometheusEndpointServer(threading.Thread): From e6493bc06cc5948c3192caf42dec74e8ba3c62b8 Mon Sep 17 00:00:00 2001 From: Saeed Date: Sat, 27 May 2023 21:16:15 +0330 Subject: [PATCH 2/4] fix(exports): use MultiProcessCollector registry for prometheus http server --- django_prometheus/exports.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/django_prometheus/exports.py b/django_prometheus/exports.py index f5288b6b..bf63f59d 100644 --- a/django_prometheus/exports.py +++ b/django_prometheus/exports.py @@ -42,8 +42,11 @@ def SetupPrometheusEndpointOnPort(port, addr=""): "autoreloader is active. Use the URL exporter, or start django " "with --noreload. See documentation/exports.md." ) + + registry = prometheus_client.CollectorRegistry() + multiprocess.MultiProcessCollector(registry) try: - prometheus_client.start_http_server(port, addr=addr) + prometheus_client.start_http_server(port, addr=addr, registry=registry) except OSError: """ first process serves metrics on port 8001, other processes raise error: port already in use From 1f300c913e54e5e5e270c136a1404b122dced39f Mon Sep 17 00:00:00 2001 From: Saeed Date: Fri, 12 Jul 2024 21:27:40 +0330 Subject: [PATCH 3/4] fix(exports): check PROMETHEUS_MULTIPROC_DIR in SetupPrometheusEndpointOnPort --- django_prometheus/exports.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/django_prometheus/exports.py b/django_prometheus/exports.py index bf63f59d..13220016 100644 --- a/django_prometheus/exports.py +++ b/django_prometheus/exports.py @@ -43,8 +43,12 @@ def SetupPrometheusEndpointOnPort(port, addr=""): "with --noreload. See documentation/exports.md." ) - registry = prometheus_client.CollectorRegistry() - multiprocess.MultiProcessCollector(registry) + if "PROMETHEUS_MULTIPROC_DIR" in os.environ or "prometheus_multiproc_dir" in os.environ: + registry = prometheus_client.CollectorRegistry() + multiprocess.MultiProcessCollector(registry) + else: + registry = prometheus_client.REGISTRY + try: prometheus_client.start_http_server(port, addr=addr, registry=registry) except OSError: From de3eeb463e4e2fdbbfddb3acf855223052326f35 Mon Sep 17 00:00:00 2001 From: Saeed Date: Sat, 13 Jul 2024 16:51:46 +0330 Subject: [PATCH 4/4] fix: remove try-except in SetupPrometheusEndpointOnPort --- django_prometheus/exports.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/django_prometheus/exports.py b/django_prometheus/exports.py index 13220016..ad6959db 100644 --- a/django_prometheus/exports.py +++ b/django_prometheus/exports.py @@ -49,13 +49,7 @@ def SetupPrometheusEndpointOnPort(port, addr=""): else: registry = prometheus_client.REGISTRY - try: - prometheus_client.start_http_server(port, addr=addr, registry=registry) - except OSError: - """ - first process serves metrics on port 8001, other processes raise error: port already in use - one processes collect metrics from PROMETHEUS_MULTIPROC_DIR - """ + prometheus_client.start_http_server(port, addr=addr, registry=registry) class PrometheusEndpointServer(threading.Thread):