Add opentelemetry based tracing 21/143321/8
authorFiete Ostkamp <fiete.ostkamp@telekom.de>
Tue, 17 Feb 2026 08:17:39 +0000 (09:17 +0100)
committerFiete Ostkamp <fiete.ostkamp@telekom.de>
Tue, 17 Feb 2026 10:00:17 +0000 (11:00 +0100)
- 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 <fiete.ostkamp@telekom.de>
Change-Id: I191408d162f199cb1a90f1ca6d6822a9da322d0a

12 files changed:
catalog-be/src/main/docker/backend/Dockerfile
catalog-be/src/main/docker/backend/startup.sh
catalog-fe/sdc-frontend/Dockerfile
catalog-fe/sdc-frontend/startup.sh
docs/conf.py
docs/delivery.rst
docs/requirements-docs.txt
docs/tox.ini
openecomp-be/dist/sdc-onboard-backend-docker/artifacts/Dockerfile
openecomp-be/dist/sdc-onboard-backend-docker/artifacts/startup.sh
openecomp-be/dist/sdc-onboard-db-init-docker/artifacts/Dockerfile
pom.xml

index 4980b89..49bc267 100644 (file)
@@ -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
index 18b19b9..270df3b 100644 (file)
@@ -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"
index 9b9338a..1c7a060 100644 (file)
@@ -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/
index c4b1d6e..a0caa5c 100644 (file)
@@ -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"
index a0980c7..51a7266 100644 (file)
@@ -19,8 +19,6 @@ html_show_sphinx = False
 extensions = [
     'sphinx.ext.intersphinx',
     'sphinx.ext.graphviz',
-    'sphinxcontrib.blockdiag',
-    'sphinxcontrib.seqdiag',
     'sphinxcontrib.plantuml'
 ]
 
index efa3e67..9c32e94 100644 (file)
@@ -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;
     }
index a72d601..16c646b 100644 (file)
@@ -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
index d14e0fa..66b85c8 100644 (file)
@@ -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
index ac49e85..7532413 100644 (file)
@@ -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/
index e08d61a..eb157a5 100644 (file)
@@ -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"
index 7a4f9fc..d3a26b1 100644 (file)
@@ -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 7630057..d7e5060 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,7 @@ Modifications copyright (c) 2018-2019 Nokia
     <netty.version>4.1.92.Final</netty.version>
     <servlet-api.version>4.0.4</servlet-api.version>
     <wire-mock.version>2.26.3</wire-mock.version>
+    <opentelemetry-javaagent.version>2.25.0</opentelemetry-javaagent.version>
     <ecomp.version>3.4.0</ecomp.version>
     <cassandra.unit.version>4.3.1.0</cassandra.unit.version>
     <cadi.version>2.1.21</cadi.version>