diff --git a/engine/engine/celery.py b/engine/engine/celery.py index cbdd9326..caaa4d84 100644 --- a/engine/engine/celery.py +++ b/engine/engine/celery.py @@ -79,3 +79,18 @@ if settings.DEBUG_CELERY_TASKS_PROFILING: logger.info("ended: {} of {} with cpu={} at {}".format(task_id, task.name, time.perf_counter(), time.time())) sample_mem() memdump() + + +if settings.PYROSCOPE_PROFILER_ENABLED: + + @celery.signals.worker_process_init.connect(weak=False) + def init_pyroscope(*args, **kwargs): + import pyroscope + + pyroscope.configure( + application_name=settings.PYROSCOPE_APPLICATION_NAME, + server_address=settings.PYROSCOPE_SERVER_ADDRESS, + auth_token=settings.PYROSCOPE_AUTH_TOKEN, + detect_subprocesses=True, # detect subprocesses started by the main process; default is False + tags={"type": "celery", "celery_worker": settings.CELERY_WORKER_QUEUE}, + ) diff --git a/engine/engine/wsgi.py b/engine/engine/wsgi.py index 1642bd9d..5ebe7a60 100644 --- a/engine/engine/wsgi.py +++ b/engine/engine/wsgi.py @@ -52,8 +52,7 @@ if settings.PYROSCOPE_PROFILER_ENABLED: application_name=settings.PYROSCOPE_APPLICATION_NAME, server_address=settings.PYROSCOPE_SERVER_ADDRESS, auth_token=settings.PYROSCOPE_AUTH_TOKEN, - detect_subprocesses=True, - tags={"celery_worker": settings.PYROSCOPE_CELERY_WORKER_QUEUE}, + tags={"type": "uwsgi"}, ) except ModuleNotFoundError: diff --git a/engine/settings/base.py b/engine/settings/base.py index 97a8fee0..5640d6e5 100644 --- a/engine/settings/base.py +++ b/engine/settings/base.py @@ -681,4 +681,3 @@ PYROSCOPE_PROFILER_ENABLED = getenv_boolean("PYROSCOPE_PROFILER_ENABLED", defaul PYROSCOPE_APPLICATION_NAME = os.getenv("PYROSCOPE_APPLICATION_NAME", "oncall") PYROSCOPE_SERVER_ADDRESS = os.getenv("PYROSCOPE_SERVER_ADDRESS", "http://pyroscope:4040") PYROSCOPE_AUTH_TOKEN = os.getenv("PYROSCOPE_AUTH_TOKEN", "") -PYROSCOPE_CELERY_WORKER_QUEUE = os.getenv("CELERY_WORKER_QUEUE", None) diff --git a/engine/uwsgi.ini b/engine/uwsgi.ini index 80590f05..dbc489f1 100644 --- a/engine/uwsgi.ini +++ b/engine/uwsgi.ini @@ -1,4 +1,5 @@ [uwsgi] +strict=true chdir=/etc/app module=engine.wsgi:application master=True @@ -14,6 +15,7 @@ buffer-size=65535 http-auto-chunked=True http-timeout=620 post-buffering=1 +enable-threads=true logger=stdio log-format=source=engine:uwsgi status=%(status) method=%(method) path=%(uri) latency=%(secs) google_trace_id=%(var.HTTP_X_CLOUD_TRACE_CONTEXT) protocol=%(proto) resp_size=%(size) req_body_size=%(cl)