Adding http tracing capability 14/137014/1
authorsaul.gill <saul.gill@est.tech>
Tue, 16 Jan 2024 12:43:09 +0000 (12:43 +0000)
committersaul.gill <saul.gill@est.tech>
Tue, 16 Jan 2024 12:47:38 +0000 (12:47 +0000)
Open telemetry tracing now supported in acm

Issue-ID: POLICY-4875
Change-Id: I7423211f3b775825f24e4bd4b906f646a882747b
Signed-off-by: saul.gill <saul.gill@est.tech>
pom.xml
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/OpenTelConfiguration.java [new file with mode: 0644]
runtime-acm/src/test/resources/application-prometheus-noauth.yaml
runtime-acm/src/test/resources/application-test.yaml

diff --git a/pom.xml b/pom.xml
index 34e4d1c..dfee76b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -1,6 +1,6 @@
 <!--
   ============LICENSE_START=======================================================
-  Copyright (C) 2021-2023 Nordix Foundation.
+  Copyright (C) 2021-2024 Nordix Foundation.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
             <groupId>io.micrometer</groupId>
             <artifactId>micrometer-registry-prometheus</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.micrometer</groupId>
+            <artifactId>micrometer-tracing-bridge-otel</artifactId>
+            <version>1.1.3</version>
+        </dependency>
+        <dependency>
+            <groupId>io.opentelemetry</groupId>
+            <artifactId>opentelemetry-exporter-otlp</artifactId>
+            <version>1.25.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.opentelemetry</groupId>
+            <artifactId>opentelemetry-sdk-extension-jaeger-remote-sampler</artifactId>
+            <version>1.25.0</version>
+        </dependency>
         <dependency>
             <groupId>org.springdoc</groupId>
             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/OpenTelConfiguration.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/OpenTelConfiguration.java
new file mode 100644 (file)
index 0000000..3727333
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2024 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.config;
+
+import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
+import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
+import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSampler;
+import io.opentelemetry.sdk.trace.samplers.Sampler;
+import java.time.Duration;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class OpenTelConfiguration {
+
+    @Bean
+    @ConditionalOnProperty(prefix = "tracing", name = "enabled", havingValue = "true", matchIfMissing = false)
+    @ConditionalOnExpression("'http'.equals('${tracing.exporter.protocol}')")
+    OtlpHttpSpanExporter otlpHttpSpanExporter(@Value("${tracing.exporter.endpoint:http://jaeger:4318/v1/traces}") String url) {
+        return OtlpHttpSpanExporter.builder()
+                .setEndpoint(url)
+                .build();
+    }
+
+    @Bean
+    @ConditionalOnProperty(prefix = "tracing", name = "enabled", havingValue = "true", matchIfMissing = false)
+    @ConditionalOnExpression("'grpc'.equals('${tracing.exporter.protocol}')")
+    OtlpGrpcSpanExporter otlpGrpcSpanExporter(@Value("${tracing.exporter.endpoint:http://jaeger:4317}") String url) {
+        return OtlpGrpcSpanExporter.builder()
+                .setEndpoint(url)
+                .build();
+    }
+
+    @Bean
+    @ConditionalOnProperty(prefix = "tracing", name = "enabled", havingValue = "true", matchIfMissing = false)
+    JaegerRemoteSampler jaegerRemoteSampler(
+            @Value("${tracing.sampler.jaeger-remote.endpoint:http://jaeger:14250}") String url,
+            @Value("${SERVICE_ID:unknown_service}") String serviceId) {
+        return JaegerRemoteSampler.builder()
+                .setEndpoint(url)
+                .setPollingInterval(Duration.ofSeconds(30))
+                .setInitialSampler(Sampler.alwaysOff())
+                .setServiceName(serviceId)
+                .build();
+    }
+}
index 25187a6..b344911 100644 (file)
@@ -38,3 +38,12 @@ runtime:
         servers:
           - localhost
         topic: POLICY-ACRUNTIME-PARTICIPANT
+
+tracing:
+  enabled: true
+  exporter:
+    endpoint: http://jaeger:4318
+    protocol: http
+  sampler:
+    jaeger-remote:
+      endpoint: http://jaeger:14250
\ No newline at end of file
index aa40445..cf0fa4c 100644 (file)
@@ -41,3 +41,24 @@ runtime:
   acmParameters:
     acElementName: org.onap.policy.clamp.acm.AutomationCompositionElement
     acNodeType: org.onap.policy.clamp.acm.AutomationComposition
+
+management:
+  endpoints:
+    web:
+      base-path: /
+      exposure:
+        include: health, metrics, prometheus
+  tracing:
+    propagation:
+      produce: b3
+    sampling:
+      probability: 1.0
+
+tracing:
+  enabled: true
+  exporter:
+    endpoint: http://jaeger:4317
+    protocol: grpc
+  sampler:
+    jaeger-remote:
+      endpoint: http://jaeger:14250
\ No newline at end of file