Repository navigation
feat(otel): Add OpenTelemetry distributed tracing support - #1769
Conversation
0e1e69d to
176f5f5
Compare
jeanouii
left a comment
There was a problem hiding this comment.
Great PR and a good start.
I've added a couple of notes and questions.
It's been a while since I worked with this.
176f5f5 to
b55e0a6
Compare
b55e0a6 to
225e05a
Compare
|
@cshannon wdyt about this one for 6.3.0? |
I haven't looked at this at all and this definitely needs to wait. Did
I think 6.4.0 makes more sense, I don't think anyone else has paid attention to this (I know I haven't) and adding a major new framework like this is a pretty big deal, even if it's off by default. I think it would be good to have some more time. |
|
6.4.0 is good idea. |
ef8c660 to
a890f90
Compare
2ca3a64 to
f68470e
Compare
cshannon
left a comment
There was a problem hiding this comment.
LGTM, it's a new plugin and off by default so it's good to get it into 6.4.0 for people to try it out. It could be expanded in future releases to add more tracing in other broker methods or fix any bugs that show up.
|
The build failure due to my bad JMX SSL merge, which is now fixed and merged. A rebase of the PR, or a Rebase+Merge should fix it. |
New activemq-opentelemetry module that instruments the broker using the OpenTelemetry API. The plugin traces send (PRODUCER), dispatch (CONSUMER), and acknowledge (INTERNAL) operations with W3C TraceContext propagation and standard OTel messaging semantic conventions. Depends on opentelemetry-api only; users bring their own SDK and exporter at runtime. Included in the distribution with example configuration.
- Fix OTel semantic convention attribute names: messaging.system -> messaging.system.name messaging.operation -> messaging.operation.type messaging.client_id -> messaging.client.id (dot notation) - Initialize propagator and tracer once in constructor instead of per-invocation - Bound dispatchSpans map to prevent unbounded growth / span leaks; oldest span is ended and evicted when the limit is exceeded - Add comment explaining setMarshalledProperties(null) in TextMapSetter - Replace Thread.sleep() in tests with Wait.waitFor() pattern - Document topic fan-out span behavior in class Javadoc
…PSHOT) The module's parent POM referenced activemq-parent:6.3.0-SNAPSHOT, which no longer exists since the root pom.xml was bumped to 6.4.0-SNAPSHOT, breaking CI reactor resolution.
…fix example config - Wire activemq-opentelemetry into activemq-spring (optional dependency and maven-xbean-plugin includes) so that openTelemetryPlugin is generated in activemq.xsd and recognized by XBean Spring - Remove unnecessary jetty.xml import and ws transport connector from activemq-opentelemetry.xml to pass XML validation and standalone broker start tests
…onstants, semconv fixes - Add messagingSystem property (default 'activemq') - Use AttributeKey constants for attribute keys and constants for values - Use messaging.system and the 'settle' operation type per semantic conventions - Resolve OpenTelemetry lazily and allow explicit injection via setOpenTelemetry - Log trace context read failures; null-safe span error status - Document deliver/ack span semantics and dispatch span cap
ef89585 to
d854170
Compare
New activemq-opentelemetry module that instruments the broker using the OpenTelemetry API. The plugin traces send (PRODUCER), dispatch (CONSUMER), and acknowledge (INTERNAL) operations with W3C TraceContext propagation and standard OTel messaging semantic conventions.
Depends on opentelemetry-api only; users bring their own SDK and exporter at runtime. Included in the distribution with example configuration. Maybe we should add a default SDK/exporter in the ActiveMQ distribution, just wondering 😄