diff --git a/pom.xml b/pom.xml
index b4e2ec57f81b..c01c45116f03 100644
--- a/pom.xml
+++ b/pom.xml
@@ -189,6 +189,8 @@
0.5.4
3.1.7
3.25.5
+ 1.51.0
+ 2.16.0
@@ -427,6 +429,16 @@
commons-validator
${cs.commons-validator.version}
+
+ io.opentelemetry
+ opentelemetry-api
+ ${cs.opentelemetry.version}
+
+
+ io.opentelemetry.instrumentation
+ opentelemetry-instrumentation-annotations
+ ${cs.opentelemetry-instrumentation.version}
+
javax.annotation
javax.annotation-api
diff --git a/server/pom.xml b/server/pom.xml
index 3324cdb2e619..c6b725993ab6 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -197,6 +197,14 @@
4.22.1.0-SNAPSHOT
compile
+
+ io.opentelemetry.instrumentation
+ opentelemetry-instrumentation-annotations
+
+
+ io.opentelemetry
+ opentelemetry-api
+
diff --git a/server/src/main/java/com/cloud/api/ApiServer.java b/server/src/main/java/com/cloud/api/ApiServer.java
index 05ea166e13b2..e3a64649078f 100644
--- a/server/src/main/java/com/cloud/api/ApiServer.java
+++ b/server/src/main/java/com/cloud/api/ApiServer.java
@@ -58,6 +58,9 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.instrumentation.annotations.WithSpan;
+
import com.cloud.cluster.ManagementServerHostVO;
import com.cloud.cluster.dao.ManagementServerHostDao;
import com.cloud.user.Account;
@@ -619,6 +622,7 @@ public void checkCharacterInkParams(final Map params) {
}
@Override
+ @WithSpan("ApiServer.handleRequest")
@SuppressWarnings("rawtypes")
public String handleRequest(final Map params, final String responseType, final StringBuilder auditTrailSb) throws ServerApiException {
checkCharacterInkParams(params);
@@ -628,6 +632,10 @@ public String handleRequest(final Map params, final String responseType, final S
try {
command = (String[])params.get("command");
+ if (command != null && command.length > 0) {
+ Span.current().updateName("ApiServer.handleRequest " + command[0]);
+ Span.current().setAttribute("api.command", command[0]);
+ }
if (command == null) {
logger.error("invalid request, no command sent");
if (logger.isTraceEnabled()) {
diff --git a/tools/docker/supervisord.conf b/tools/docker/supervisord.conf
index 93f01387575c..1c14578c4cf3 100644
--- a/tools/docker/supervisord.conf
+++ b/tools/docker/supervisord.conf
@@ -12,6 +12,7 @@ command=/bin/bash -c "mvn -pl client jetty:run -Dsimulator -Dorg.eclipse.jetty.a
directory=/root
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
+redirect_stderr=true
user=root
[program:cloudstack-ui]