Skip to content

Conversation

@san81
Copy link
Collaborator

@san81 san81 commented Jan 5, 2026

Implements time-series based APM service map generation from OpenTelemetry traces using three-window sliding architecture with off-heap storage for scalability. Generates service relationship events and performance metrics.

Description

[Describe what this change achieves]

Issues Resolved

Resolves #[Issue number to be closed when this PR is merged]

Check List

  • New functionality includes testing.
  • New functionality has a documentation issue. Please link to it in this PR.
    • New functionality has javadoc added
  • Commits are signed with a real name per the DCO

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Implements time-series based APM service map generation from OpenTelemetry traces using three-window sliding architecture with off-heap storage for scalability. Generates service relationship events and performance metrics.
Copy link
Member

@dlvenable dlvenable left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @san81 ! I only took a cursory look so far, but have a few comments.

testImplementation project(':data-prepper-test:test-common')
}

test {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need this section.

useJUnitPlatform()
}

jacocoTestReport {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think you need this either.

@@ -0,0 +1,34 @@
/*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JsonProperty(value = WINDOW_DURATION, defaultValue = "" + DEFAULT_WINDOW_DURATION)
@JsonPropertyDescription("Represents the fixed time window, in seconds, " +
"during which APM service map relationships are evaluated.")
private int windowDuration = DEFAULT_WINDOW_DURATION;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be defined as a Duration. You can set a min and max using @DurationMin and @DurationMax.

@JsonProperty(value = DB_PATH, defaultValue = DEFAULT_DB_PATH)
@JsonPropertyDescription("Represents folder path for creating database files storing transient data off heap memory" +
"when processing APM service-map data.")
private String dbPath = DEFAULT_DB_PATH;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if this is the right way to go. Why would somebody need to configure this path? I think ideally, this is part of the data-prepper directory structure and is automatically defined.

@JsonClassDescription("The <code>otel_apm_service_map</code> processor uses OpenTelemetry data to create APM service map " +
"relationships for visualization, generating ServiceDetails and ServiceRemoteDetails events.")
public class OtelApmServiceMapProcessorConfig {
private static final String WINDOW_DURATION = "window_duration";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think there is any value to using these constants. Just put the literal value in the @JsonProperty. Some older implementations did this to support migration from legacy concepts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants