fix(base): Add python metrics to prometheus exporter

ref: #436
This commit is contained in:
2025-06-02 08:25:37 +09:30
parent 309483ea08
commit e2582373ad
2 changed files with 80 additions and 2 deletions

78
app/centurion/celery.py Normal file
View File

@ -0,0 +1,78 @@
import logging
import os
from django.conf import settings
from celery import Celery, signals
from pathlib import Path
from prometheus_client import multiprocess, start_http_server, REGISTRY
logger = logging.getLogger(__name__)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'centurion.settings')
worker = Celery('app')
worker.config_from_object(f'django.conf:settings', namespace='CELERY')
worker.autodiscover_tasks()
@worker.task(bind=True, ignore_result=True)
def debug_task(self):
print(f'Request: {self!r}')
@signals.worker_ready.connect()
def setup_prometheus(**kwargs):
if not getattr(settings, 'METRICS_ENABLED', False):
return
proc_path = None
try:
proc_path = os.environ["PROMETHEUS_MULTIPROC_DIR"]
except:
pass
if not proc_path:
os.environ["PROMETHEUS_MULTIPROC_DIR"] = settings.METRICS_MULTIPROC_DIR
proc_path = os.environ["PROMETHEUS_MULTIPROC_DIR"]
logger.info(f'Setting up prometheus metrics HTTP server on port {str(settings.METRICS_EXPORT_PORT)}.')
multiproc_folder_path = _setup_multiproc_folder()
registry = REGISTRY
logger.info(f'Setting up prometheus metrics directory.')
multiprocess.MultiProcessCollector(registry, path=multiproc_folder_path)
logger.info(f'Starting prometheus metrics server.')
start_http_server( settings.METRICS_EXPORT_PORT, registry=registry)
logger.info(f'Starting prometheus serving on port {str(settings.METRICS_EXPORT_PORT)}.')
def _setup_multiproc_folder():
coordination_dir = Path(os.environ["PROMETHEUS_MULTIPROC_DIR"])
coordination_dir.mkdir(parents=True, exist_ok=True)
for filepath in coordination_dir.glob("*.db"):
filepath.unlink()
return coordination_dir

View File

@ -5,7 +5,7 @@ from pathlib import Path
from django.conf import settings from django.conf import settings
from prometheus_client import CollectorRegistry, multiprocess, start_http_server from prometheus_client import multiprocess, start_http_server, REGISTRY
@ -50,7 +50,7 @@ def when_ready(_):
multiproc_folder_path = _setup_multiproc_folder() multiproc_folder_path = _setup_multiproc_folder()
registry = CollectorRegistry() registry = REGISTRY
logger.info(f'Setting up prometheus metrics directory.') logger.info(f'Setting up prometheus metrics directory.')