From 06674be827db15a0e08bb62bef253bb5d6c11d3f Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Mon, 4 Apr 2022 15:13:15 +0200 Subject: [PATCH] :whale: Alter docker setup to use Open Telemetry --- Dockerfile | 1 + bin/docker_start.sh | 4 ++-- src/manage.py | 5 +++++ src/objects/utils/apps.py | 13 +++++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9b41a4cd..edeed0b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,6 +42,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ COPY --from=build /usr/local/lib/python3.7 /usr/local/lib/python3.7 COPY --from=build /usr/local/bin/uwsgi /usr/local/bin/uwsgi +COPY --from=build /usr/local/bin/opentelemetry-instrument /usr/local/bin/opentelemetry-instrument # Stage 3.2 - Copy source code WORKDIR /app diff --git a/bin/docker_start.sh b/bin/docker_start.sh index dca77e91..b4de46e8 100755 --- a/bin/docker_start.sh +++ b/bin/docker_start.sh @@ -51,14 +51,14 @@ fi # Start server >&2 echo "Starting server" -uwsgi \ +cd src/ +opentelemetry-instrument uwsgi \ --http :$uwsgi_port \ --http-keepalive \ --manage-script-name \ --mount $mountpoint=objects.wsgi:application \ --static-map /static=/app/static \ --static-map /media=/app/media \ - --chdir src \ --enable-threads \ --processes $uwsgi_processes \ --threads $uwsgi_threads \ diff --git a/src/manage.py b/src/manage.py index e9f558ee..1c354a78 100755 --- a/src/manage.py +++ b/src/manage.py @@ -1,11 +1,16 @@ #!/usr/bin/env python import sys +from opentelemetry.instrumentation.django import DjangoInstrumentor + from objects.setup import setup_env if __name__ == "__main__": setup_env() + # This call is what makes the Django application be instrumented + DjangoInstrumentor().instrument() + try: from django.core.management import execute_from_command_line except ImportError: diff --git a/src/objects/utils/apps.py b/src/objects/utils/apps.py index b02dd150..6dd0eac5 100644 --- a/src/objects/utils/apps.py +++ b/src/objects/utils/apps.py @@ -5,5 +5,18 @@ class UtilsConfig(AppConfig): name = "objects.utils" def ready(self): + from opentelemetry import trace + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + BatchSpanProcessor, + ConsoleSpanExporter, + ) + from . import checks # noqa from . import oas_extensions # noqa + + trace.set_tracer_provider(TracerProvider()) + + trace.get_tracer_provider().add_span_processor( + BatchSpanProcessor(ConsoleSpanExporter()) + )