diff --git a/Makefile b/Makefile
index 4f659d08622a49b6330e82aa81d13ca248364bba..26dd2f8cb4ff6590ca78d8c4d6bae33c6456b792 100644
--- a/Makefile
+++ b/Makefile
@@ -111,7 +111,7 @@ integration-test: generate-integration-test-certs build-images
 	echo "Will sleep for the quantumlayers to get ready"
 	sleep 25
 	go test -p 1 -count=1 -v ./integration-tests/code/*
-	docker-compose -f integration-tests/docker-compose_integration_test.yml down
+#   docker-compose -f integration-tests/docker-compose_integration_test.yml down
 
 playground-start: generate-certs build-images
 	sudo containerlab deploy --reconfigure --topo dev_env_data/containerlab/playground.clab.yaml
diff --git a/go.mod b/go.mod
index e1f4ae4d7efb5932b01b8004f17d30bad4bf2b1e..4afadde524206a131d6e7acbc1c09a4d5431f7b3 100644
--- a/go.mod
+++ b/go.mod
@@ -39,6 +39,7 @@ require (
 	github.com/tklauser/go-sysconf v0.3.13 // indirect
 	github.com/tklauser/numcpus v0.7.0 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
+	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 // indirect
 	go.opentelemetry.io/otel v1.28.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect
diff --git a/go.sum b/go.sum
index 8045ebc8a84a351ceec6785694e514ba9dae7464..a4fb370f05ce6982c7e1b71fcd0cc6487efd4013 100644
--- a/go.sum
+++ b/go.sum
@@ -125,6 +125,8 @@ github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDgu
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
 github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0 h1:vS1Ao/R55RNV4O7TA2Qopok8yN+X0LIP6RVWLFkprck=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.52.0/go.mod h1:BMsdeOxN04K0L5FNUBfjFdvwWGNe/rkmSwH4Aelu/X0=
 go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
 go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY=
diff --git a/goKMS/kms/kms.go b/goKMS/kms/kms.go
index 5540cb88e5e5ee7d02826b7ad0edff84aa6659c0..ad7f2fa33ca2ce1fb819f1ff152cb31d82bd0762 100644
--- a/goKMS/kms/kms.go
+++ b/goKMS/kms/kms.go
@@ -33,6 +33,7 @@ import (
 	"code.fbi.h-da.de/danet/quant/goKMS/kms/util"
 	pbQS "code.fbi.h-da.de/danet/quipsec/gen/go/quipsec"
 	"github.com/google/uuid"
+	"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
 )
 
 type Route struct {
@@ -242,7 +243,7 @@ func (kms *KMS) startGRPC() {
 		log.Fatalf("unable to generate gRPC server: %v", err)
 	}
 
-	interKMSServer := grpc.NewServer(grpc.Creds(gRPCTransportCreds))
+	interKMSServer := grpc.NewServer(grpc.Creds(gRPCTransportCreds), grpc.StatsHandler(otelgrpc.NewServerHandler()))
 	healthCheck := health.NewServer()
 
 	healthpb.RegisterHealthServer(interKMSServer, healthCheck)
diff --git a/goKMS/main.go b/goKMS/main.go
index 51d6ade05bd16142771c94dd80ea6d349f2afabf..d7f6c28943068cadae60d9d62d2c4710df8a97c6 100644
--- a/goKMS/main.go
+++ b/goKMS/main.go
@@ -110,6 +110,9 @@ func main() {
 		Receivers: make(map[uuid.UUID]chan<- struct{}),
 	}
 
+	if err != nil {
+		log.Fatalf("failed to initialize OpenTelemetry: %v", err)
+	}
 	kms := kms.NewKMS(kmsId, os.Stdout, log.GetLevel(), false, kmsConfig, receiver)
 
 	// start Qkdn Manager server, if there is info about it in the config
diff --git a/goKMS/telemetry/telemetry.go b/goKMS/telemetry/telemetry.go
new file mode 100644
index 0000000000000000000000000000000000000000..8c3497baa06e4a4ff2f63f8e93049f7bed48b680
--- /dev/null
+++ b/goKMS/telemetry/telemetry.go
@@ -0,0 +1,27 @@
+package telemetry
+
+import (
+	"context"
+	"fmt"
+
+	"go.opentelemetry.io/otel"
+	"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
+	"go.opentelemetry.io/otel/propagation"
+	"go.opentelemetry.io/otel/sdk/trace"
+)
+
+// Init configures an OpenTelemetry exporter and trace provider.
+func InitOpenTelemitry() (*trace.TracerProvider, error) {
+	traceExporter, err := otlptracehttp.New(context.TODO(), otlptracehttp.WithInsecure())
+	if err != nil {
+		return nil, fmt.Errorf("failed to create trace exporter: %w", err)
+	}
+
+	tp := trace.NewTracerProvider(
+		trace.WithSampler(trace.AlwaysSample()),
+		trace.WithBatcher(traceExporter),
+	)
+	otel.SetTracerProvider(tp)
+	otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
+	return tp, nil
+}
diff --git a/integration-tests/docker-compose_integration_test.yml b/integration-tests/docker-compose_integration_test.yml
index d60c3644bdc3f2005b2fd43d37817b5c73cb0ab3..1d4c6ff6182d640dfc8b669f878ee5f5e251e488 100644
--- a/integration-tests/docker-compose_integration_test.yml
+++ b/integration-tests/docker-compose_integration_test.yml
@@ -8,6 +8,8 @@ services:
                 "--kms_config",
                 "/tmp/kms/config/kms_1.yaml",
             ]
+        environment:
+            - OTEL_EXPORTER_OTLP_ENDPOINT="http://jaeger:443"
         volumes:
             - ./config/kms/kms_1.yaml:/tmp/kms/config/kms_1.yaml
             - ../artifacts/integration-tests/ssl:/config/ssl
@@ -25,6 +27,8 @@ services:
                 "--kms_config",
                 "/tmp/kms/config/kms_2.yaml",
             ]
+        environment:
+            - OTEL_EXPORTER_OTLP_ENDPOINT="http://jaeger:443"
         volumes:
             - ./config/kms/kms_2.yaml:/tmp/kms/config/kms_2.yaml
             - ../artifacts/integration-tests/ssl:/config/ssl