diff options
author | sourabh_sourabh <sourabh.sourabh@est.tech> | 2024-07-19 17:27:54 +0100 |
---|---|---|
committer | sourabh_sourabh <sourabh.sourabh@est.tech> | 2024-07-31 14:28:40 +0100 |
commit | e2527ea17f2e70f6b27655666e928314bdc56a22 (patch) | |
tree | e3badb0c2abe17fbe476ddb4b5cbe224fd7f5cdc /cps-ncmp-service/src/main/java | |
parent | b66c993cc2ab670db0f62afe22bb0b5020e5dc40 (diff) |
Effect changes on scheduled tasks (don't want scheduled tasks to be monitored)
- Applied a filter on tasks.scheduled.execution.
- It is configurable from application.ymal into cps.scheduled-task-names: - tasks.scheduled.execution by default.
- Added a new property configuration bean for open telemetry.
- Introduced new propery attribute that takes list of task names to be
filtered.
Issue-ID: CPS-2250
Change-Id: I8e5334cd166343181df6dd1985471f5465f14f0e
Signed-off-by: sourabh_sourabh <sourabh.sourabh@est.tech>
Diffstat (limited to 'cps-ncmp-service/src/main/java')
-rw-r--r-- | cps-ncmp-service/src/main/java/org/onap/cps/ncmp/config/OpenTelemetryConfig.java | 72 |
1 files changed, 51 insertions, 21 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/config/OpenTelemetryConfig.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/config/OpenTelemetryConfig.java index cff3187966..a6a82b7936 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/config/OpenTelemetryConfig.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/config/OpenTelemetryConfig.java @@ -26,7 +26,11 @@ 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 jakarta.annotation.PostConstruct; import java.time.Duration; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryCustomizer; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; @@ -37,11 +41,14 @@ import org.springframework.http.server.observation.ServerRequestObservationConte import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; +/** + * Configuration class for setting up OpenTelemetry tracing in a Spring Boot application. + * This class provides beans for OTLP exporters (gRPC and HTTP), a Jaeger remote sampler, + * and customizes the ObservationRegistry to exclude certain endpoints from being observed. + */ @Configuration public class OpenTelemetryConfig { - public static final int JAEGER_REMOTE_SAMPLER_POLLING_INTERVAL_IN_SECOND = 30; - @Value("${spring.application.name:cps-application}") private String serviceId; @@ -51,9 +58,29 @@ public class OpenTelemetryConfig { @Value("${cps.tracing.sampler.jaeger_remote.endpoint:http://onap-otel-collector:14250}") private String jaegerRemoteSamplerUrl; + @Value("${cps.tracing.excluded-observation-names:tasks.scheduled.execution}") + private String excludedObservationNamesAsCsv; + + private static final int JAEGER_REMOTE_SAMPLER_POLLING_INTERVAL_IN_SECONDS = 30; + + private List<String> excludedObservationNames; + /** - * OTLP Exporter with Grpc exporter protocol. - */ + * Initializes the excludedObservationNames after the bean's properties have been set. + * This method is called by the Spring container during bean initialization. + */ + @PostConstruct + public void init() { + excludedObservationNames = Arrays.stream(excludedObservationNamesAsCsv.split(",")) + .map(String::trim) + .collect(Collectors.toList()); + } + + /** + * Creates an OTLP Exporter with gRPC protocol. + * + * @return OtlpGrpcSpanExporter bean if tracing is enabled and the exporter protocol is gRPC + */ @Bean @ConditionalOnExpression( "${cps.tracing.enabled} && 'grpc'.equals('${cps.tracing.exporter.protocol}')") @@ -62,7 +89,9 @@ public class OpenTelemetryConfig { } /** - * OTLP Exporter with HTTP exporter protocol. + * Creates an OTLP Exporter with HTTP protocol. + * + * @return OtlpHttpSpanExporter bean if tracing is enabled and the exporter protocol is HTTP */ @Bean @ConditionalOnExpression( @@ -72,39 +101,40 @@ public class OpenTelemetryConfig { } /** - * Jaeger Remote Sampler. + * Creates a Jaeger Remote Sampler. + * + * @return JaegerRemoteSampler bean if tracing is enabled */ @Bean @ConditionalOnProperty("cps.tracing.enabled") public JaegerRemoteSampler createJaegerRemoteSampler() { return JaegerRemoteSampler.builder() - .setEndpoint(jaegerRemoteSamplerUrl) - .setPollingInterval(Duration.ofSeconds(JAEGER_REMOTE_SAMPLER_POLLING_INTERVAL_IN_SECOND)) - .setInitialSampler(Sampler.alwaysOff()) - .setServiceName(serviceId) - .build(); + .setEndpoint(jaegerRemoteSamplerUrl) + .setPollingInterval(Duration.ofSeconds(JAEGER_REMOTE_SAMPLER_POLLING_INTERVAL_IN_SECONDS)) + .setInitialSampler(Sampler.alwaysOff()) + .setServiceName(serviceId) + .build(); } /** - * Excluding /actuator/** endpoints. - */ + * Customizes the ObservationRegistry to exclude /actuator/** endpoints from being observed. + * + * @return ObservationRegistryCustomizer bean if tracing is enabled + */ @Bean @ConditionalOnProperty("cps.tracing.enabled") - ObservationRegistryCustomizer<ObservationRegistry> skipActuatorEndpointsFromObservation() { + public ObservationRegistryCustomizer<ObservationRegistry> skipActuatorEndpointsFromObservation() { final PathMatcher pathMatcher = new AntPathMatcher("/"); return registry -> - registry.observationConfig().observationPredicate(observationPredicate(pathMatcher)); + registry.observationConfig().observationPredicate(observationPredicate(pathMatcher)); } - /** - * Excluding /actuator/** endpoints. - */ - static ObservationPredicate observationPredicate(final PathMatcher pathMatcher) { - return (name, context) -> { + private ObservationPredicate observationPredicate(final PathMatcher pathMatcher) { + return (observationName, context) -> { if (context instanceof ServerRequestObservationContext observationContext) { return !pathMatcher.match("/actuator/**", observationContext.getCarrier().getRequestURI()); } else { - return true; + return !excludedObservationNames.contains(observationName); } }; } |