[Playground] OTLP-Mapper - instana to otlp span mapper#2534
[Playground] OTLP-Mapper - instana to otlp span mapper#2534abhilash-sivan wants to merge 129 commits into
Conversation
4490ab0 to
f1c0d6f
Compare
53e1fcc to
d261bc5
Compare
This needs to be communicated in the next WG. Traces & Metrics mapping is required. |
e827e9c to
d6c01a6
Compare
74c5459 to
b5a51c8
Compare
| * RabbitMQ-specific mappings | ||
| * Extends base messaging with RabbitMQ-specific fields | ||
| */ | ||
| rabbitmq: { |
There was a problem hiding this comment.
Not verified rabbitmq per se. It's just to show how we differentiate children under messaging or any other group.
There was a problem hiding this comment.
But for RabbitMQ, there’s nothing really common with BASE_MAPPINGS.messaging. I don’t think any of the others share much with it either, apart from Kafka.
| mappings: SPAN_ATTRIBUTE_MAPPINGS.kafka, | ||
| prefix: 'messaging.kafka', | ||
| additionalAttributes: { | ||
| 'messaging.system': 'kafka' |
There was a problem hiding this comment.
Why do we need that here? If we have already a custom kafka mapping object?
There was a problem hiding this comment.
messaging.system is an additional attribute that we append to the span. For Kafka, the system name also happens to be kafka, so it may seem redundant at first glance.
However, additionalAttributes is intended for constant or computed attributes that do not directly map from a single field inside span.data.kafka.
messaging.system falls into that category since it is effectively a constant defined per transformer, rather than something extracted from the incoming span payload itself.
I have changed this to: 'messaging.system': this.systemName
which will fetch the appropriate value in this case
e6f4c61 to
0b054c3
Compare
| util.init(config); | ||
| util.hasThePackageBeenInitializedTooLate.activate(); | ||
| secrets.init(config); | ||
| otlp.init(config); |
There was a problem hiding this comment.
Should we call the module exporters/otlpExporter?
otlp is a bit too short and semantically not easy to read.
WDYT. Choose
|
|
||
| // Use dataPort for sending all telemetry data (metrics, spans, profiles, events, etc.) | ||
| // dataPort defaults to agentPort but can be configured separately for future use cases (e.g., OTel format) | ||
| const isOtlpEndpoint = path.startsWith('/v1/'); |
There was a problem hiding this comment.
There is multiple checks for isOtlpX in this file. Lets have one place and just provide the data for the call.
|
|
||
| downstreamConnection.sendMetrics( | ||
| payload, | ||
| { otlpEnabled }, |
There was a problem hiding this comment.
downstreamConnection knows that we use otlp, right?
| @@ -0,0 +1,106 @@ | |||
| /* | |||
| * (c) Copyright IBM Corp. 2026 | |||
There was a problem hiding this comment.
Do we need this app still?
Wondering if we can just have a separate npm script in the example-apps/collector app?
With config otlp being on.
There was a problem hiding this comment.
We can remove this after finishing the playground work, since the example app also includes Kafka and database tests that are only required for playground testing.
| let options = {}; | ||
| let callback; | ||
|
|
||
| if (typeof optionsOrCallback === 'function') { |
There was a problem hiding this comment.
Is this logic new? 🤔
Maybe lets revert this to its bare minimum for otlp
There was a problem hiding this comment.
Ah maybe it got added because of the provided config option. We can read the config from the init config object
Summary
Introduces the Instana-to-OTLP Converter Playground.
4318/v1/traces).Out of Scope
TODO
Core Implementation
span.data.peer,span.data.mongo)INSTANA_OTLP_ENABLED?) - NOT PART OF THISSpan Data Mapping @abhilash-sivan
Testing
Unit Tests
End-to-End Testing (@abhilash-sivan)
Performance Testing
Special Cases
Issue Tracking
Validation Checklist
Before merging, verify the following:
4318/v1/traces).Future Enhancements/TODO
/v1/logsendpoint.References