From 483a1b23518b6d32b0abdcae48a92465a4688116 Mon Sep 17 00:00:00 2001 From: Fiete Ostkamp Date: Tue, 17 Feb 2026 09:17:39 +0100 Subject: [PATCH] Add opentelemetry based tracing - add tracing to sdc-be, -fe and -onboarding-be - this uses the java agent approach which works without code changes - fix broken rtd build - try to make docker build of sdc-onboard-cassandra-init more reliable Issue-ID: SDC-4783 Signed-off-by: Fiete Ostkamp Change-Id: I191408d162f199cb1a90f1ca6d6822a9da322d0a --- catalog-be/src/main/docker/backend/Dockerfile | 5 + catalog-be/src/main/docker/backend/startup.sh | 11 +- catalog-fe/sdc-frontend/Dockerfile | 5 + catalog-fe/sdc-frontend/startup.sh | 11 +- docs/conf.py | 2 - docs/delivery.rst | 149 ++++++++++++--------- docs/requirements-docs.txt | 3 - docs/tox.ini | 3 - .../artifacts/Dockerfile | 5 + .../artifacts/startup.sh | 11 +- .../artifacts/Dockerfile | 7 +- pom.xml | 1 + 12 files changed, 136 insertions(+), 77 deletions(-) diff --git a/catalog-be/src/main/docker/backend/Dockerfile b/catalog-be/src/main/docker/backend/Dockerfile index 4980b892d1..49bc26703f 100644 --- a/catalog-be/src/main/docker/backend/Dockerfile +++ b/catalog-be/src/main/docker/backend/Dockerfile @@ -19,6 +19,11 @@ RUN wget -q https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/ RUN sed -i 's/"jetty"/"onap"/g' $JETTY_FOLDER/etc/jetty-setuid.xml +# Download OpenTelemetry Java Agent +RUN mkdir -p $JETTY_FOLDER/otel && \ + wget -q https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${opentelemetry-javaagent.version}/opentelemetry-javaagent.jar \ + --tries=3 -O $JETTY_FOLDER/otel/opentelemetry-javaagent.jar + COPY --chown=onap:onap onap-sdc-backend/catalog-be.war $JETTY_FOLDER/webappwar/ COPY --chown=onap:onap context.xml $JETTY_FOLDER/webapps/ COPY --chown=onap:onap files/rewrite-root-to-swagger-ui.xml $JETTY_FOLDER/etc/rewrite-root-to-swagger-ui.xml diff --git a/catalog-be/src/main/docker/backend/startup.sh b/catalog-be/src/main/docker/backend/startup.sh index 18b19b9563..270df3b2f9 100644 --- a/catalog-be/src/main/docker/backend/startup.sh +++ b/catalog-be/src/main/docker/backend/startup.sh @@ -1,5 +1,14 @@ #!/bin/sh +# OpenTelemetry Agent Configuration +OTEL_AGENT_PATH="$JETTY_BASE/otel/opentelemetry-javaagent.jar" +OTEL_OPTS="" + +if [ -f "$OTEL_AGENT_PATH" ] && [ "${OTEL_ENABLED:-false}" = "true" ]; then + OTEL_OPTS="-javaagent:$OTEL_AGENT_PATH" + echo "OpenTelemetry agent enabled" +fi + export JAVA_OPTIONS="$JAVA_OPTIONS -Dconfig.home=$JETTY_BASE/config \ -Dcom.datastax.driver.USE_NATIVE_CLOCK=false \ -Dlog.home=$JETTY_BASE/logs \ @@ -15,4 +24,4 @@ cd $JETTY_HOME echo "jetty.httpConfig.sendServerVersion=false" >> $JETTY_HOME/start.d/start.ini echo "$JETTY_BASE/etc/rewrite-root-to-swagger-ui.xml" >> $JETTY_HOME/start.d/rewrite.ini -java $JAVA_OPTIONS -jar "$JETTY_HOME/start.jar" +java $OTEL_OPTS $JAVA_OPTIONS -jar "$JETTY_HOME/start.jar" diff --git a/catalog-fe/sdc-frontend/Dockerfile b/catalog-fe/sdc-frontend/Dockerfile index 9b9338af67..1c7a0602ad 100644 --- a/catalog-fe/sdc-frontend/Dockerfile +++ b/catalog-fe/sdc-frontend/Dockerfile @@ -20,6 +20,11 @@ RUN wget -q https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/ rm -rf $JETTY_FOLDER/jetty.tar.gz RUN sed -i 's/"jetty"/"onap"/g' $JETTY_FOLDER/etc/jetty-setuid.xml +# Download OpenTelemetry Java Agent +RUN mkdir -p $JETTY_FOLDER/otel && \ + wget -q https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${opentelemetry-javaagent.version}/opentelemetry-javaagent.jar \ + --tries=3 -O $JETTY_FOLDER/otel/opentelemetry-javaagent.jar + # Add WAR files ADD --chown=onap:onap onboarding*.war $JETTY_FOLDER/webapps/ ADD --chown=onap:onap catalog-fe-*.war $JETTY_FOLDER/webapps/ diff --git a/catalog-fe/sdc-frontend/startup.sh b/catalog-fe/sdc-frontend/startup.sh index c4b1d6efd9..a0caa5cc80 100644 --- a/catalog-fe/sdc-frontend/startup.sh +++ b/catalog-fe/sdc-frontend/startup.sh @@ -1,5 +1,14 @@ #!/bin/sh +# OpenTelemetry Agent Configuration +OTEL_AGENT_PATH="$JETTY_BASE/otel/opentelemetry-javaagent.jar" +OTEL_OPTS="" + +if [ -f "$OTEL_AGENT_PATH" ] && [ "${OTEL_ENABLED:-false}" = "true" ]; then + OTEL_OPTS="-javaagent:$OTEL_AGENT_PATH" + echo "OpenTelemetry agent enabled" +fi + JAVA_OPTIONS="$JAVA_OPTIONS \ -Dconfig.home=$JETTY_BASE/config \ -Dlog.home=$JETTY_BASE/logs \ @@ -11,4 +20,4 @@ JAVA_OPTIONS="$JAVA_OPTIONS \ cd $JETTY_HOME -java $JAVA_OPTIONS -jar "${JETTY_HOME}/start.jar" +java $OTEL_OPTS $JAVA_OPTIONS -jar "${JETTY_HOME}/start.jar" diff --git a/docs/conf.py b/docs/conf.py index a0980c7371..51a7266dc8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,8 +19,6 @@ html_show_sphinx = False extensions = [ 'sphinx.ext.intersphinx', 'sphinx.ext.graphviz', - 'sphinxcontrib.blockdiag', - 'sphinxcontrib.seqdiag', 'sphinxcontrib.plantuml' ] diff --git a/docs/delivery.rst b/docs/delivery.rst index efa3e67454..9c32e94128 100644 --- a/docs/delivery.rst +++ b/docs/delivery.rst @@ -44,28 +44,38 @@ Overview Deployment dependency map -------------------------- -.. blockdiag:: - - orientation = portrait - class job [color = "#FFA300", style = dotted, shape = "box"] - class app [color = "#29ADFF", shape = "roundedbox"] - fe [label = "sdc-frontend", class = "app"]; - be [label = "sdc-backend", class = "app"]; - onboarding-be [label = "sdc-onboard-backend", class = "app"]; - cs [label = "sdc-cassandra", class = "app"]; - be-init [label = "sdc-backend-init", class = "job"]; - cs-init [label = "sdc-cassandra-init", class = "job"]; - cs-onboarding-init [label = "sdc-cassandra-onboard-init", class = "job"]; - sdc-wfd-fe [label = "sdc-workflow-fe", class = "app"]; - sdc-wfd-be [label = "sdc-workflow-be", class = "app"]; - sdc-wfd-be-init [label = "sdc-workflow-init", class = "job"]; - job [class = "job"]; - app [class = "app"]; - - onboarding-be -> cs-onboarding-init -> cs-init -> cs; - be-init -> be -> cs-init -> cs; - sdc-wfd-fe -> sdc-wfd-be-init -> sdc-wfd-be -> cs-init -> cs; - fe; +.. graphviz:: + + digraph deployment { + rankdir=TB; + node [shape=box]; + + // Apps (blue) + fe [label="sdc-frontend", style=filled, fillcolor="#29ADFF"]; + be [label="sdc-backend", style=filled, fillcolor="#29ADFF"]; + onboarding_be [label="sdc-onboard-backend", style=filled, fillcolor="#29ADFF"]; + cs [label="sdc-cassandra", style=filled, fillcolor="#29ADFF"]; + sdc_wfd_fe [label="sdc-workflow-fe", style=filled, fillcolor="#29ADFF"]; + sdc_wfd_be [label="sdc-workflow-be", style=filled, fillcolor="#29ADFF"]; + + // Jobs (orange, dotted) + be_init [label="sdc-backend-init", style="filled,dotted", fillcolor="#FFA300"]; + cs_init [label="sdc-cassandra-init", style="filled,dotted", fillcolor="#FFA300"]; + cs_onboarding_init [label="sdc-cassandra-onboard-init", style="filled,dotted", fillcolor="#FFA300"]; + sdc_wfd_be_init [label="sdc-workflow-init", style="filled,dotted", fillcolor="#FFA300"]; + + // Legend + subgraph cluster_legend { + label="Legend"; + job [label="job", style="filled,dotted", fillcolor="#FFA300"]; + app [label="app", style=filled, fillcolor="#29ADFF"]; + } + + // Dependencies + onboarding_be -> cs_onboarding_init -> cs_init -> cs; + be_init -> be -> cs_init; + sdc_wfd_fe -> sdc_wfd_be_init -> sdc_wfd_be -> cs_init; + } Connectivity Matrix ------------------- @@ -103,48 +113,61 @@ Structure Below is a diagram of the SDC project docker containers and the connections between them. -.. blockdiag:: - - - blockdiag delivery { - node_width = 140; - orientation = portrait; - sdc-cassandra[shape = flowchart.database , color = grey] - sdc-frontend [color = blue, textcolor="white"] - sdc-backend [color = yellow] - sdc-onboarding-backend [color = yellow] - sdc-backend [color = yellow] - sdc-wfd-frontend [color = brown] - sdc-wfd-backend [color = brown] - sdc-wfd-be-init [color = brown] - sdc-cassandra-Config [color = orange] - sdc-backend-config [color = orange] - sdc-onboarding-init [color = orange] - sdc-wfd-be-init -> sdc-wfd-backend; - sdc-onboarding-init -> sdc-onboarding-backend; - sdc-cassandra-Config -> sdc-cassandra; - sdc-backend-config -> sdc-backend; - sdc-wss-simulator -> sdc-frontend; - sdc-wfd-frontend -> sdc-wfd-backend; - sdc-frontend -> sdc-backend, sdc-onboarding-backend; - sdc-wfd-backend -> sdc-cassandra; - sdc-backend -> sdc-cassandra; - sdc-onboarding-backend -> sdc-cassandra; - sdc-sanity -> sdc-backend; - sdc-ui-sanity -> sdc-frontend; - group deploy_group { - color = green; - label = "Application Layer" - sdc-backend; sdc-onboarding-backend; sdc-frontend; sdc-cassandra; sdc-cassandra-Config; sdc-backend-config; sdc-onboarding-init; sdc-wfd-frontend; sdc-wfd-backend; sdc-wfd-be-init; +.. graphviz:: + + digraph delivery { + rankdir=TB; + node [shape=box]; + + // Application Layer (green cluster) + subgraph cluster_app { + label="Application Layer"; + style=filled; + fillcolor="#90EE90"; + + sdc_cassandra [label="sdc-cassandra", shape=cylinder, style=filled, fillcolor=grey]; + sdc_frontend [label="sdc-frontend", style=filled, fillcolor=blue, fontcolor=white]; + sdc_backend [label="sdc-backend", style=filled, fillcolor=yellow]; + sdc_onboarding_backend [label="sdc-onboarding-backend", style=filled, fillcolor=yellow]; + sdc_wfd_frontend [label="sdc-wfd-frontend", style=filled, fillcolor=brown]; + sdc_wfd_backend [label="sdc-wfd-backend", style=filled, fillcolor=brown]; + sdc_wfd_be_init [label="sdc-wfd-be-init", style=filled, fillcolor=brown]; + sdc_cassandra_config [label="sdc-cassandra-Config", style=filled, fillcolor=orange]; + sdc_backend_config [label="sdc-backend-config", style=filled, fillcolor=orange]; + sdc_onboarding_init [label="sdc-onboarding-init", style=filled, fillcolor=orange]; } - group testing_group { - color = purple; - label = "Testing Layer"; - sdc-sanity; sdc-ui-sanity + + // Testing Layer (purple cluster) + subgraph cluster_test { + label="Testing Layer"; + style=filled; + fillcolor="#DDA0DD"; + + sdc_sanity [label="sdc-sanity"]; + sdc_ui_sanity [label="sdc-ui-sanity"]; } - group util_group { - color = purple; - label = "Util Layer"; - sdc-wss-simulator; + + // Util Layer (purple cluster) + subgraph cluster_util { + label="Util Layer"; + style=filled; + fillcolor="#DDA0DD"; + + sdc_wss_simulator [label="sdc-wss-simulator"]; } + + // Connections + sdc_wfd_be_init -> sdc_wfd_backend; + sdc_onboarding_init -> sdc_onboarding_backend; + sdc_cassandra_config -> sdc_cassandra; + sdc_backend_config -> sdc_backend; + sdc_wss_simulator -> sdc_frontend; + sdc_wfd_frontend -> sdc_wfd_backend; + sdc_frontend -> sdc_backend; + sdc_frontend -> sdc_onboarding_backend; + sdc_wfd_backend -> sdc_cassandra; + sdc_backend -> sdc_cassandra; + sdc_onboarding_backend -> sdc_cassandra; + sdc_sanity -> sdc_backend; + sdc_ui_sanity -> sdc_frontend; } diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt index a72d6013ac..16c646b042 100644 --- a/docs/requirements-docs.txt +++ b/docs/requirements-docs.txt @@ -1,7 +1,4 @@ sphinx>=4.2.0 # BSD sphinx-rtd-theme>=1.0.0 # MIT -sphinxcontrib-blockdiag # BSD -sphinxcontrib-seqdiag # BSD sphinxcontrib-spelling sphinxcontrib-plantuml -six diff --git a/docs/tox.ini b/docs/tox.ini index d14e0fa8b4..66b85c8d46 100644 --- a/docs/tox.ini +++ b/docs/tox.ini @@ -7,7 +7,6 @@ skipsdist = true basepython = python3.8 deps = -r{toxinidir}/requirements-docs.txt - -chttps://releases.openstack.org/constraints/upper/yoga -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master commands = sphinx-build -W -q -b html -n -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/html @@ -16,7 +15,6 @@ commands = basepython = python3.8 deps = -r{toxinidir}/requirements-docs.txt - -chttps://releases.openstack.org/constraints/upper/yoga -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master commands = sphinx-build -W -q -b linkcheck -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/linkcheck @@ -24,7 +22,6 @@ commands = basepython = python3.8 deps = -r{toxinidir}/requirements-docs.txt - -chttps://releases.openstack.org/constraints/upper/yoga -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt?h=master commands = sphinx-build -W -q -b spelling -d {envtmpdir}/doctrees {toxinidir} {toxinidir}/_build/spellcheck diff --git a/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/Dockerfile b/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/Dockerfile index ac49e854db..7532413931 100644 --- a/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/Dockerfile +++ b/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/Dockerfile @@ -30,6 +30,11 @@ RUN wget -q https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/ rm -rf $JETTY_FOLDER/jetty.tar.gz RUN sed -i 's/"jetty"/"onap"/g' $JETTY_FOLDER/etc/jetty-setuid.xml +# Download OpenTelemetry Java Agent +RUN mkdir -p $JETTY_FOLDER/otel && \ + wget -q https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${opentelemetry-javaagent.version}/opentelemetry-javaagent.jar \ + --tries=3 -O $JETTY_FOLDER/otel/opentelemetry-javaagent.jar + ADD --chown=onap:onap onboarding-be-*.war $JETTY_FOLDER/webapps/ ADD --chown=onap:onap api-docs.war $JETTY_FOLDER/webapps/ COPY --chown=onap:onap startup.sh $JETTY_FOLDER/ diff --git a/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/startup.sh b/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/startup.sh index e08d61a09e..eb157a58a5 100644 --- a/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/startup.sh +++ b/openecomp-be/dist/sdc-onboard-backend-docker/artifacts/startup.sh @@ -1,5 +1,14 @@ #!/bin/sh +# OpenTelemetry Agent Configuration +OTEL_AGENT_PATH="$JETTY_BASE/otel/opentelemetry-javaagent.jar" +OTEL_OPTS="" + +if [ -f "$OTEL_AGENT_PATH" ] && [ "${OTEL_ENABLED:-false}" = "true" ]; then + OTEL_OPTS="-javaagent:$OTEL_AGENT_PATH" + echo "OpenTelemetry agent enabled" +fi + JAVA_OPTIONS="$JAVA_OPTIONS \ -Dcom.datastax.driver.USE_NATIVE_CLOCK=false \ -Dconfig.home=$JETTY_BASE/config \ @@ -14,4 +23,4 @@ JAVA_OPTIONS="$JAVA_OPTIONS \ cd $JETTY_HOME echo "jetty.httpConfig.sendServerVersion=false" >> $JETTY_HOME/start.d/start.ini -java $JAVA_OPTIONS -jar "${JETTY_HOME}/start.jar" +java $OTEL_OPTS $JAVA_OPTIONS -jar "${JETTY_HOME}/start.jar" diff --git a/openecomp-be/dist/sdc-onboard-db-init-docker/artifacts/Dockerfile b/openecomp-be/dist/sdc-onboard-db-init-docker/artifacts/Dockerfile index 7a4f9fc867..d3a26b1ce1 100644 --- a/openecomp-be/dist/sdc-onboard-db-init-docker/artifacts/Dockerfile +++ b/openecomp-be/dist/sdc-onboard-db-init-docker/artifacts/Dockerfile @@ -9,13 +9,14 @@ RUN mkdir ~/.cassandra/ && \ echo 'version=3.4.4' >> ~/.cassandra/cqlshrc USER root -RUN apk update && \ - python3 -m pip install --upgrade pip && \ +RUN set -ex && \ + for i in 1 2 3 4 5; do apk update && break || sleep 10; done && apk info > /dev/null && \ + pip3 install --upgrade 'pip<23' 'setuptools<66' wheel && \ pip3 install cqlsh==6.1.0 && \ + command -v cqlsh && \ mkdir ~/.cassandra/ && \ echo '[cql]' > ~/.cassandra/cqlshrc && \ echo 'version=3.4.4' >> ~/.cassandra/cqlshrc && \ - set -ex && \ apk add --no-cache wget USER sdc diff --git a/pom.xml b/pom.xml index 76300573e1..d7e5060a25 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,7 @@ Modifications copyright (c) 2018-2019 Nokia 4.1.92.Final 4.0.4 2.26.3 + 2.25.0 3.4.0 4.3.1.0 2.1.21 -- 2.16.6