Add observation for message channels (#3944)
* Add observation for message channels * Add observation for message channels The `MessageChannel.send()` is, essentially, only the point in Spring Integration where we produce a message and can emit a `PRODUCER` kind span. * Implement `IntegrationObservation.PRODUCER` infrastructure based on the `MessageSenderContext` * Implement an observation emission in the `AbstractMessageChannel` based on the mentioned `IntegrationObservation.PRODUCER` * Build a `MutableMessage.of(message)` to be able to modify message header in the `MessageSenderContext` via tracer `Propagator` or other tracing injection instrument * Document which components are instrumented with an `ObservationRegistry` * Fix language in docs Co-authored-by: Gary Russell <grussell@vmware.com> Co-authored-by: Gary Russell <grussell@vmware.com>
This commit is contained in:
@@ -159,6 +159,17 @@ Can be configured as `*` to match all components.
|
||||
|
||||
The meters are not gathered in this case independently, but delegated to an appropriate `ObservationHandler` configured on the provided `ObservationRegistry`.
|
||||
|
||||
The following Spring Integration components are instrumented with observation logic each with a respective convention:
|
||||
|
||||
* `MessageProducerSupport`, being the inbound endpoint of the flow, is considered as a `CONSUMER` span type and uses the `IntegrationObservation.HANDLER` API;
|
||||
* MessagingGatewaySupport` is an inbound request-reply endpoint, and is considered as a `SERVER` span type.
|
||||
It uses the `IntegrationObservation.GATEWAY` API;
|
||||
* An `AbstractMessageChannel.send()` operation is the only Spring Integration API where it produces messages.
|
||||
So, it is treated as a `PRODUCER` span type and uses the `IntegrationObservation.PRODCUER` API.
|
||||
This makes more sense when a channel is a distributed implementation (e.g. `PublishSubscribeKafkaChannel` or `ZeroMqChannel`) and trace information has to be added to the message.
|
||||
So, the `IntegrationObservation.PRODUCER` observation is based on a `MessageSenderContext` where Spring Integration supplies a `MutableMessage` to allow a subsequent tracing `Propagator` to add headers so they are available to the consumer;
|
||||
* An `AbstractMessageHandler` is a `CONSUMER` span type and uses the `IntegrationObservation.HANDLER` API.
|
||||
|
||||
An observation production on the `IntegrationManagement` components can be customized via `ObservationConvention` configuration.
|
||||
For example an `AbstractMessageHandler` expects a `MessageReceiverObservationConvention` via its `setObservationConvention()` API.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user