Skip to content

Support for otel_traces codec to create Span Events from OTEL Traces#6843

Merged
divbok merged 1 commit into
opensearch-project:mainfrom
divbok:main
May 19, 2026
Merged

Support for otel_traces codec to create Span Events from OTEL Traces#6843
divbok merged 1 commit into
opensearch-project:mainfrom
divbok:main

Conversation

@divbok
Copy link
Copy Markdown
Collaborator

@divbok divbok commented May 8, 2026

Description

Add a new otel_traces InputCodec that can parse OpenTelemetry trace data from pull-based sources like S3 and Kinesis Data Streams, producing Span events. The implementation follows the same pattern as the existing otel_logs codec and reuses the existing OTelProtoDecoder.parseExportTraceServiceRequest() for the actual trace-to-Span conversion.

Example usage:

trace-pipeline:
  source:
    s3:
      codec:
        otel_traces:
          format: json
  processor:
    - otel_trace_raw:
    - service_map:
  sink:
    - opensearch:
        index: otel-v1-apm-span

Issues Resolved

Resolves #6650

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.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 8, 2026

✅ License Header Check Passed

All newly added files have proper license headers. Great work! 🎉

@divbok divbok force-pushed the main branch 2 times, most recently from b7fc0d4 to beb9ac6 Compare May 8, 2026 20:12
private static final String TEST_REQUEST_JSON_TRACES_FILE = "test-request-multiple-traces.json";
// This protobuf file is generated using the OTel proto library. It contains a single
// ExportTraceServiceRequest with 2 spans (mimics awss3exporter otlp_proto format).
private static final String TEST_REQUEST_TRACES_FILE = "test-otel-trace.protobuf";
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is it possible generate these binary files on the fly from JSON? I think it is ideal to avoid checking in binary files here.

class OTelTraceInputCodecTest {

@Test
void constructor_with_json_format_creates_codec() {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Use the new @DataPrepperPluginTest test framework for these. You can even make these configurations available as YAML to verify it.

otel-pipeline:
  source:
    unused:
  processor:
    - otel_traces:
        format: json
        otel_format: opensearch

  sink:
    - unused:

Even though this is not a processor it will load using this.

import java.util.Map;
import java.util.stream.Collectors;

public enum OTelTraceFormatOption {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Let's rename all these classes to OTelTraces (plural) for consistency.

@divbok divbok force-pushed the main branch 3 times, most recently from 4e1e90e to f4c9578 Compare May 8, 2026 21:20
Signed-off-by: Divyansh Bokadia <dbokadia@amazon.com>
@divbok divbok merged commit 87be60a into opensearch-project:main May 19, 2026
67 of 72 checks passed
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.

Support for a codec that can create Span Events from OpenTelemetry traces

3 participants