From df3499cb0b7c1cd0c11627022b6ec75587ca6bcf Mon Sep 17 00:00:00 2001 From: twiggi665_comcast Date: Fri, 1 May 2026 11:01:06 -0400 Subject: [PATCH 1/3] otel support --- assets/entrypoint.sh | 10 ++++++++-- dockerfile | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/assets/entrypoint.sh b/assets/entrypoint.sh index 621f064..de31edf 100755 --- a/assets/entrypoint.sh +++ b/assets/entrypoint.sh @@ -30,9 +30,15 @@ fi # End of tiangolo/gunicorn-uvicorn-docker block # +if [[ "$OTEL_ENABLED" == "true" ]]; then + OTEL_CMD="opentelemetry-instrument" + echo "OpenTelemetry auto-instrumentation enabled" +else + OTEL_CMD="" +fi if [[ "$ENABLE_BEAT" == "true" ]]; then - COMMAND="python -m celery -A $APP_MODULE beat -s /var/celery/celerybeat-schedule" + COMMAND="$OTEL_CMD python -m celery -A $APP_MODULE beat -s /var/celery/celerybeat-schedule" else POOL=${POOL:-prefork} if [[ "$POOL" = "gevent" ]] || [[ "$POOL" = "eventlet" ]] ; then @@ -40,7 +46,7 @@ else else CONCURRENCY=${CONCURRENCY:-2} fi - COMMAND="python -m celery -A $APP_MODULE worker \ + COMMAND="$OTEL_CMD python -m celery -A $APP_MODULE worker \ --pool=$POOL \ --concurrency=$CONCURRENCY \ --prefetch-multiplier=${PREFETCH_MULTIPLIER:-4}" diff --git a/dockerfile b/dockerfile index 6fcde54..85c09ad 100644 --- a/dockerfile +++ b/dockerfile @@ -1,6 +1,7 @@ ARG python_version=3.9 ARG build_target=$python_version ARG publish_target=$python_version +ARG OTEL_ENABLED=false FROM python:$build_target as Builder @@ -9,6 +10,7 @@ ARG build_target ARG package ARG package_version ARG TARGETPLATFORM +ARG OTEL_ENABLED # Only add build tools for alpine image. The ubuntu based images have build tools already. # Only runs if `apk` is on the system. @@ -26,6 +28,9 @@ ENV PATH="/root/.cargo/bin:${PATH}" RUN bash -c 'if [[ "$TARGETPLATFORM" == "linux/arm/v7" ]] ; then pip install $package==$package_version ; fi' RUN bash -c 'if [[ "$TARGETPLATFORM" != "linux/arm/v7" ]] ; then pip install $package==$package_version watchfiles>=0.15 ; fi' +# Install OpenTelemetry packages if enabled. +RUN bash -c 'if [[ "$OTEL_ENABLED" == "true" ]] ; then pip install opentelemetry-distro opentelemetry-exporter-otlp && opentelemetry-bootstrap -a install ; fi' + # Build our actual container now. FROM python:$publish_target @@ -36,9 +41,11 @@ ARG python_version ARG package ARG maintainer="" ARG TARGETPLATFORM="" +ARG OTEL_ENABLED=false LABEL python=$python_version LABEL package=$package LABEL maintainer=$maintainer +LABEL otel_enabled=$OTEL_ENABLED LABEL org.opencontainers.image.description="python:$publish_target $package:$package_version $TARGETPLATFORM" # Used for Celery Beat. @@ -48,6 +55,9 @@ RUN mkdir /var/celery # Copy all of the python files built in the Builder container into this smaller container. COPY --from=Builder /usr/local/lib/python$python_version /usr/local/lib/python$python_version +# Copy binaries (e.g. opentelemetry-instrument) installed by pip in the Builder stage. +COPY --from=Builder /usr/local/bin /usr/local/bin + # Entrypoint Script COPY ./assets/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh From dd291ca212f0e9b5026c6b0a080bac74bb63ddf1 Mon Sep 17 00:00:00 2001 From: twiggi665_comcast Date: Mon, 4 May 2026 10:29:57 -0400 Subject: [PATCH 2/3] feat: update README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 3c02834..17e6a8f 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Looking for the containers? [Head over to the Github Container Registry](https:/ * [PRE_START_PATH](#pre_start_path) * [RELOAD](#reload) * [RELOAD_SIGINT_TIMEOUT](#reload_sigint_timeout) + * [OTEL_ENABLED](#otel_enabled) * [Python Versions](#python-versions) * [Image Variants](#image-variants) * [Full](#full) @@ -240,6 +241,10 @@ When `RELOAD` is set this value determines how long to wait for the worker to gr Defaults to 30 seconds. +### `OTEL_ENABLED` + +When set to `true` the container will enable OpenTelemetry (OTel) instrumentation for the Celery worker. This is done by installing the `opentelemetry-distro` and `opentelemetry-exporter-otlp` packages at startup and enabling auto-instrumentation. Any additional instrumentation packages (e.g. `opentelemetry-instrumentation-celery`) must be installed separately. + ## Python Versions This project actively supports these Python versions: From 99fa10ce9bc3ceadc620ba44fe3b4d83ffdcb204 Mon Sep 17 00:00:00 2001 From: twiggi665_comcast Date: Wed, 6 May 2026 13:03:07 -0400 Subject: [PATCH 3/3] fix: always install otel --- dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dockerfile b/dockerfile index 85c09ad..c09bd58 100644 --- a/dockerfile +++ b/dockerfile @@ -10,7 +10,6 @@ ARG build_target ARG package ARG package_version ARG TARGETPLATFORM -ARG OTEL_ENABLED # Only add build tools for alpine image. The ubuntu based images have build tools already. # Only runs if `apk` is on the system. @@ -28,8 +27,8 @@ ENV PATH="/root/.cargo/bin:${PATH}" RUN bash -c 'if [[ "$TARGETPLATFORM" == "linux/arm/v7" ]] ; then pip install $package==$package_version ; fi' RUN bash -c 'if [[ "$TARGETPLATFORM" != "linux/arm/v7" ]] ; then pip install $package==$package_version watchfiles>=0.15 ; fi' -# Install OpenTelemetry packages if enabled. -RUN bash -c 'if [[ "$OTEL_ENABLED" == "true" ]] ; then pip install opentelemetry-distro opentelemetry-exporter-otlp && opentelemetry-bootstrap -a install ; fi' +# Install OpenTelemetry packages +RUN pip install opentelemetry-distro opentelemetry-exporter-otlp && opentelemetry-bootstrap -a install # Build our actual container now.