Recommend making create spans disableable (#1446)

Co-authored-by: Joao Grassi <5938087+joaopgrassi@users.noreply.github.com>
This commit is contained in:
Liudmila Molkova 2024-10-07 10:06:33 -07:00 committed by GitHub
parent fbecf791d1
commit a663f7c9ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 78 additions and 5 deletions

6
.chloggen/1446.yaml Normal file
View File

@ -0,0 +1,6 @@
change_type: enhancement
component: messaging
note: >
Add recommendation to report "Create" spans for batch send calls only and
to allow to disable "Create" spans.
issues: [ 1273 ]

View File

@ -31,7 +31,8 @@
- [Examples](#examples) - [Examples](#examples)
- [Topic with multiple consumers](#topic-with-multiple-consumers) - [Topic with multiple consumers](#topic-with-multiple-consumers)
- [Batch receiving](#batch-receiving) - [Batch receiving](#batch-receiving)
- [Batch publishing](#batch-publishing) - [Batch publishing with "Create" spans](#batch-publishing-with-create-spans)
- [Batch publishing without "Create" spans](#batch-publishing-without-create-spans)
<!-- tocstop --> <!-- tocstop -->
@ -238,6 +239,14 @@ into the message.
The "Publish" span SHOULD always link to the creation context that was injected The "Publish" span SHOULD always link to the creation context that was injected
into a message either from a "Create" span or as a custom creation context. into a message either from a "Create" span or as a custom creation context.
When instrumenting a library API that always sends a single message, it is
RECOMMENDED to create "Publish" span without "Create" span.
When instrumenting a library API that usually operate with batches, it is
RECOMMENDED to create a "Create" span for each message along with the "Publish" span.
It is also RECOMMENDED to provide a configuration option allowing to disable "Create"
span creation.
#### Consumer spans #### Consumer spans
"Receive" spans SHOULD be created for operations of passing messages to the "Receive" spans SHOULD be created for operations of passing messages to the
@ -272,7 +281,7 @@ messages were received). For each message it accounts for, the "Process" or
> - It is the only option to correlate producer and consumer(s) in batch scenarios > - It is the only option to correlate producer and consumer(s) in batch scenarios
> as a span can only have a single parent. > as a span can only have a single parent.
> >
> - It is the only option to correlate produce and consumer(s) when message > - It is the only option to correlate producer and consumer(s) when message
> consumption can happen in the scope of another ambient context such as a > consumption can happen in the scope of another ambient context such as a
> HTTP server span. > HTTP server span.
@ -294,8 +303,8 @@ allowing users to control this behavior.
It is NOT RECOMMENDED to use the message creation context as the parent of "Process" It is NOT RECOMMENDED to use the message creation context as the parent of "Process"
spans (by default) if processing happens in the scope of another span. spans (by default) if processing happens in the scope of another span.
If instrumentation use the message creation context as the parent for "Process" If instrumentation uses the message creation context as the parent for "Process"
spans in the scope of another valid ambient context, they SHOULD add the spans in the scope of another valid ambient context, it SHOULD add the
ambient context as a link on the "Process" span to preserve the correlation ambient context as a link on the "Process" span to preserve the correlation
between message processing and that context. between message processing and that context.
@ -575,11 +584,14 @@ flowchart LR;
| `messaging.message.id` | `"a1"` | `"a2"` | | | `messaging.message.id` | `"a1"` | `"a2"` | |
| `messaging.batch.message_count` | | | 2 | | `messaging.batch.message_count` | | | 2 |
### Batch publishing ### Batch publishing with "Create" spans
Given is a publisher that publishes a batch with two messages to a topic "Q" on Given is a publisher that publishes a batch with two messages to a topic "Q" on
Kafka, and two different consumers receiving one of the messages. Kafka, and two different consumers receiving one of the messages.
Instrumentation in this case reports "Create" span for each message and a "Publish"
span that's linked to a "Create" span.
```mermaid ```mermaid
flowchart LR; flowchart LR;
subgraph PRODUCER subgraph PRODUCER
@ -621,4 +633,49 @@ flowchart LR;
| `messaging.message.id` | `"a1"` | `"a2"` | | `"a1"` | `"a2"` | | `messaging.message.id` | `"a1"` | `"a2"` | | `"a1"` | `"a2"` |
| `messaging.batch.message_count` | | | 2 | | | | `messaging.batch.message_count` | | | 2 | | |
### Batch publishing without "Create" spans
Given is a publisher that publishes a batch with two messages to a topic "Q" on
Kafka, and two different consumers receiving one of the messages.
Based on the configuration provided by user, instrumentation in this case reports
"Publish" span only. It injects "Publish" span context into both messages.
```mermaid
flowchart LR;
subgraph PRODUCER
direction TB
P[Span Publish]
end
subgraph CONSUMER1
direction TB
D1[Span Receive A]
end
subgraph CONSUMER2
direction TB
D2[Span Receive B]
end
P-. link .-D1;
P-. link .-D2;
classDef normal fill:green
class P,D1,D2 normal
linkStyle 0,1 color:green,stroke:green
```
| Field or Attribute | Span Publish | Span Receive A | Span Receive B |
|-|-|-|-|
| Span name | `send Q` | `poll Q` | `poll Q` |
| Parent | | | |
| Links | | Span Publish | Span Publish |
| SpanKind | `PRODUCER` | `CONSUMER` | `CONSUMER` |
| `server.address` | `"ms"` | `"ms"` | `"ms"` |
| `server.port` | `1234` | `1234` | `1234` |
| `messaging.system` | `"kafka"` | `"kafka"` | `"kafka"` |
| `messaging.destination.name` | `"Q"` | `"Q"` | `"Q"` |
| `messaging.operation.name` | `"send"` | `"poll"` | `"poll"` |
| `messaging.operation.type` | `"publish"` | `"receive"` | `"receive"` |
| `messaging.message.id` | | `"a1"` | `"a2"` |
| `messaging.batch.message_count`| 2 | | |
[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status [DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status

View File

@ -1,6 +1,7 @@
groups: groups:
- id: registry.messaging.deprecated - id: registry.messaging.deprecated
type: attribute_group type: attribute_group
stability: experimental
display_name: Deprecated Messaging Attributes display_name: Deprecated Messaging Attributes
brief: "Describes deprecated messaging attributes." brief: "Describes deprecated messaging attributes."
attributes: attributes:

View File

@ -1,6 +1,7 @@
groups: groups:
- id: registry.messaging - id: registry.messaging
type: attribute_group type: attribute_group
stability: experimental
display_name: General Messaging Attributes display_name: General Messaging Attributes
brief: 'Attributes describing telemetry around messaging systems and messaging activities.' brief: 'Attributes describing telemetry around messaging systems and messaging activities.'
attributes: attributes:

View File

@ -1,6 +1,7 @@
groups: groups:
- id: attributes.messaging.trace.minimal - id: attributes.messaging.trace.minimal
type: attribute_group type: attribute_group
stability: experimental
brief: > brief: >
Defines minimal set of attributes used by all messaging systems. Defines minimal set of attributes used by all messaging systems.
extends: attributes.messaging.common.minimal extends: attributes.messaging.common.minimal
@ -29,6 +30,7 @@ groups:
- id: messaging - id: messaging
type: span type: span
stability: experimental
brief: > brief: >
Defines a full set of attributes used in messaging systems. Defines a full set of attributes used in messaging systems.
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
@ -87,6 +89,7 @@ groups:
- id: messaging.network.attributes - id: messaging.network.attributes
type: attribute_group type: attribute_group
stability: experimental
brief: Attributes that describe messaging operation along with network information. brief: Attributes that describe messaging operation along with network information.
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
attributes: attributes:
@ -99,6 +102,7 @@ groups:
- id: messaging.rabbitmq - id: messaging.rabbitmq
type: attribute_group type: attribute_group
stability: experimental
extends: messaging.network.attributes extends: messaging.network.attributes
brief: > brief: >
Attributes for RabbitMQ Attributes for RabbitMQ
@ -117,6 +121,7 @@ groups:
- id: messaging.kafka - id: messaging.kafka
type: attribute_group type: attribute_group
stability: experimental
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
brief: > brief: >
Attributes for Apache Kafka Attributes for Apache Kafka
@ -149,6 +154,7 @@ groups:
- id: messaging.rocketmq - id: messaging.rocketmq
type: attribute_group type: attribute_group
stability: experimental
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
brief: > brief: >
Attributes for Apache RocketMQ Attributes for Apache RocketMQ
@ -212,6 +218,7 @@ groups:
- `create` and `receive` for [common messaging operations](/docs/messaging/messaging-spans.md#operation-types) - `create` and `receive` for [common messaging operations](/docs/messaging/messaging-spans.md#operation-types)
- id: messaging.servicebus - id: messaging.servicebus
type: attribute_group type: attribute_group
stability: experimental
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
brief: > brief: >
Attributes for Azure Service Bus Attributes for Azure Service Bus
@ -252,6 +259,7 @@ groups:
- id: messaging.eventhubs - id: messaging.eventhubs
type: attribute_group type: attribute_group
stability: experimental
extends: attributes.messaging.trace.minimal extends: attributes.messaging.trace.minimal
brief: > brief: >
Attributes for Azure Event Hubs Attributes for Azure Event Hubs