Skip to content

Jaeger OTel input package#17231

Draft
teresaromero wants to merge 9 commits intoelastic:mainfrom
teresaromero:17137-jaeger-input
Draft

Jaeger OTel input package#17231
teresaromero wants to merge 9 commits intoelastic:mainfrom
teresaromero:17137-jaeger-input

Conversation

@teresaromero
Copy link
Contributor

@teresaromero teresaromero commented Feb 4, 2026

Proposed commit message

Jaeger OpenTelemetry Input Package

Introduces the Jaeger OpenTelemetry Input Package for Elastic, enabling collection of trace data in Jaeger format (legacy Protobuf gRPC, Thrift HTTP) via the jaegerreceiver from OpenTelemetry Collector Contrib.

WHAT:

  • New input package jaeger_input_otel that configures the Jaeger receiver in EDOT
  • Supports gRPC (port 14250) and optional Thrift HTTP (port 14268) for Jaeger agent compatibility
  • TLS and mTLS configuration for secure connections
  • Custom Python-based trace generator for system tests (jaeger-tracegen only supports OTLP; this package requires Jaeger format)
  • SIGHUP-based synchronization: trace sender waits for agent-ready signal before sending
  • Policy tests for default, TLS, Thrift HTTP, and custom endpoint configurations
  • Documentation clarifies Jaeger vs OTLP format and links to upstream Jaeger docs and jaegerreceiver README

WHY:

  • Addresses protocol mismatch: the Jaeger receiver expects native Jaeger format, not OTLP
  • Enables users with existing Jaeger clients/agents to send traces directly to Elastic Agent
  • System tests now validate end-to-end flow with Jaeger Thrift HTTP format

Status: Waiting for the Fleet APM fix to ingest traces before full validation in production workflows.

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.
  • I have verified that any added dashboard complies with Kibana's Dashboard good practices (N/A – no dashboard added)

Author's Checklist

  • Policy tests pass
  • System tests pass with Jaeger Thrift HTTP trace sender
  • Trace ingestion validated once Fleet APM fix is available

How to test this PR locally

# Run policy tests
cd packages/jaeger_input_otel && elastic-package test policy

# Run system tests (requires elastic-package stack up)
cd packages/jaeger_input_otel && elastic-package test system

The system test deploys a Python trace sender that emits Jaeger Thrift HTTP format to elastic-agent:14268. Traces are sent after the agent signals readiness via SIGHUP.

Related issues

Screenshots

Screenshot 2026-02-25 at 09 15 28

Introduced the Jaeger OpenTelemetry Input Package, enabling trace data collection in Jaeger format via OpenTelemetry protocols. Updated CODEOWNERS and issue templates to include the new package. Added necessary files including changelog, license, manifest, and documentation. Implemented support for multiple protocols (gRPC, Thrift HTTP, Thrift Binary, Thrift Compact) with configurable options.
@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2026

✅ Vale Linting Results

No issues found on modified lines!


The Vale linter checks documentation changes against the Elastic Docs style guide.

To use Vale locally or report issues, refer to Elastic style guide for Vale.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

System test will not exercise the Jaeger receiver

The core issue with this PR is a protocol mismatch in the system test setup:

  • The input.yml.hbs configures a Jaeger-native gRPC receiver on port 14250
  • The docker-compose.yml test sender (jaeger-tracegen with -trace-exporter otlp-grpc) sends OTLP data to localhost:4317

These are different protocols on different ports. The test sender will never reach the Jaeger receiver, so the system test cannot validate that the package works.

Note: In Jaeger v2, jaeger-tracegen no longer supports sending in native Jaeger format (the jaeger exporter was removed). To test the Jaeger receiver, you'll need a different test client that can send traces in Jaeger-native gRPC format, or alternatively reconsider whether this package should use an OTLP receiver instead.

Other issues

  • Changelog link is a placeholder (pull/1) — should reference this PR.
  • CODEOWNERS and issue template entries are out of alphabetical order.

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

- IBM QRadar [ibm_qradar]
- IIS OpenTelemetry assets [iis_otel]
- IIS OpenTelemetry Input Package [iis_input_otel]
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
Copy link
Contributor

Choose a reason for hiding this comment

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

🟡 MEDIUM Issue template entry is out of alphabetical order

Why: Jaeger is placed between IIS entries (IIS OpenTelemetry Input Package and IIS [iis]). Move it after the IIS [iis] line (line 216) to maintain alphabetical order. Same fix needed in integration_feature_request.yml.


Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

@andrewkroh andrewkroh added New Integration Issue or pull request for creating a new integration package. documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. labels Feb 4, 2026
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

Critical: System test protocol mismatch

The docker-compose test uses jaegertracing/jaeger-tracegen:2.14.0 with -trace-exporter otlp-grpc, which sends traces using the OTLP gRPC protocol. However, the jaegerreceiver configured in input.yml.hbs only accepts the Jaeger native gRPC protocol on port 14250. These are incompatible protocols — the system test will not produce any ingested traces.

In Jaeger v2.x, the jaeger-tracegen tool dropped support for Jaeger-native export ("jaeger exporter is no longer supported, please use otlp"). The test needs to either:

  1. Use a different trace generator that supports the legacy Jaeger gRPC protocol (e.g., an older Jaeger client or a dedicated test tool), or
  2. Reconsider whether the jaegerreceiver is the right OTel receiver for this use case, given that Jaeger v2 itself has moved to OTLP.

Other issues

  • Changelog link is a placeholder (pull/1), needs to be updated to pull/17231.
  • Alphabetical ordering in CODEOWNERS and issue templates: jaeger_input_otel should be placed between istio and jamf_* entries, not between journald and jumpcloud (CODEOWNERS) or between IIS and Imperva (issue templates).

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

…pport

- Changed package name from `jaeger_otel_input` to `jaeger_input_otel`.
- Updated Kibana version requirement to 9.4.0.
- Added support for TLS configuration and Thrift HTTP protocol in the input package.
- Enhanced documentation to reflect new features and requirements.
- Updated changelog link to the latest PR.
…emetry Input Package

- Introduced a sample_event.json file to provide a template for trace data.
- Updated Docker deployment configuration to build the Jaeger trace sender from source.
- Added a Python script to generate and send Jaeger traces for testing.
- Removed obsolete variants.yml file and adjusted system test configuration for trace count.
- Enhanced documentation to clarify Jaeger and OpenTelemetry roles and requirements.
@teresaromero teresaromero changed the title [DRAFT] Input Package for Jaeger receiver Jaeger OTel input package Feb 25, 2026
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

The template logic issue I identified is new — the TLS configuration block will be incorrectly nested under thrift_http rather than grpc when both are enabled together.

Existing unresolved issues from prior reviews:

  • Alphabetical ordering in issue templates (already flagged in integration_bug.yml, same fix needed in integration_feature_request.yml)
  • CODEOWNERS ordering (appears resolved)

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

protocols:
grpc:
endpoint: {{grpc_endpoint}}
{{#if thrift_http_endpoint}}
Copy link
Contributor

Choose a reason for hiding this comment

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

🟠 HIGH TLS block will be misplaced under thrift_http when both are configured

Why: When both thrift_http_endpoint and TLS are enabled, the tls: block (at 8-space indent) appears after thrift_http:, making it a child of thrift_http instead of grpc. TLS would not apply to gRPC connections.

Suggested change
{{#if thrift_http_endpoint}}
Reorder so TLS appears before the thrift_http conditional:
```suggestion
{{#if tls_enabled}}
{{#if tls_cert_file}}
{{#if tls_key_file}}
tls:
cert_file: {{tls_cert_file}}
key_file: {{tls_key_file}}
{{#if tls_client_ca_file}}
client_ca_file: {{tls_client_ca_file}}
{{/if}}
{{/if}}
{{/if}}
{{/if}}
{{#if thrift_http_endpoint}}
thrift_http:
endpoint: {{thrift_http_endpoint}}
{{/if}}

---
[Why is Claude responding?](https://ela.st/github-ai-tools) | Type `@claude` to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

… Input Package changes

- Added Jaeger OpenTelemetry Input Package to CODEOWNERS.
- Updated issue templates to include Jaeger OpenTelemetry Input Package in the list of integrations.
…upport

- Updated manifest to clarify TLS support for both gRPC and Thrift HTTP connections.
- Added expected policy and test files for Thrift HTTP with TLS configuration.
- Modified input template to conditionally include TLS settings based on configuration variables.
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

The prior review on input.yml.hbs (TLS nesting) appears to be incorrect — the expected output files confirm that TLS is correctly applied to both grpc and thrift_http when both are configured. The template indentation is correct.

The remaining issue from prior reviews (alphabetical ordering in issue templates) still applies to the current diff.

Lower-priority observations (1)

💬 NITPICK Missing trailing newline — packages/jaeger_input_otel/changelog.yml:6

Why: File should end with a newline for consistency with other changelogs in the repo.

      link: https://github.com/elastic/integrations/pull/17231

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

- IIS OpenTelemetry assets [iis_otel]
- IIS OpenTelemetry Input Package [iis_input_otel]
- IIS [iis]
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
Copy link
Contributor

Choose a reason for hiding this comment

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

🟡 MEDIUM Alphabetical ordering

Why: Jaeger should be placed after Istio (line 226), not after IIS entries. The file is sorted alphabetically by integration name.

Suggested change
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
- Istio [istio]
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
- Jamf Compliance Reporter [jamf_compliance_reporter]

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

- IIS OpenTelemetry assets [iis_otel]
- IIS OpenTelemetry Input Package [iis_input_otel]
- IIS [iis]
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
Copy link
Contributor

Choose a reason for hiding this comment

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

🟡 MEDIUM Alphabetical ordering

Why: Same as bug template - Jaeger should be placed after Istio, not after IIS entries.

Suggested change
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
- Istio [istio]
- Jaeger OpenTelemetry Input Package [jaeger_input_otel]
- Jamf Compliance Reporter [jamf_compliance_reporter]

Why is Claude responding? | Type @claude to interact further

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

@elasticmachine
Copy link

💚 Build Succeeded

History

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

Labels

documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. New Integration Issue or pull request for creating a new integration package.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create Input Package: Jaeger receiver

4 participants