RabbitMQ: Specify how to populate `messaging.destination.name` (#1531)
This commit is contained in:
parent
0da8d8ab7e
commit
7bffed6dee
|
|
@ -0,0 +1,4 @@
|
||||||
|
change_type: breaking
|
||||||
|
component: messaging
|
||||||
|
note: "RabbitMQ: Specify how to populate `messaging.destination.name`"
|
||||||
|
issues: [1529]
|
||||||
|
|
@ -40,9 +40,6 @@ The Semantic Conventions for [RabbitMQ](https://www.rabbitmq.com/) extend and ov
|
||||||
|
|
||||||
## RabbitMQ attributes
|
## RabbitMQ attributes
|
||||||
|
|
||||||
In RabbitMQ, the destination is defined by an *exchange* and a *routing key*.
|
|
||||||
`messaging.destination.name` MUST be set to the name of the exchange. This will be an empty string if the default exchange is used.
|
|
||||||
|
|
||||||
<!-- semconv messaging.rabbitmq -->
|
<!-- semconv messaging.rabbitmq -->
|
||||||
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
|
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
|
||||||
<!-- see templates/registry/markdown/snippet.md.j2 -->
|
<!-- see templates/registry/markdown/snippet.md.j2 -->
|
||||||
|
|
@ -52,21 +49,34 @@ In RabbitMQ, the destination is defined by an *exchange* and a *routing key*.
|
||||||
|
|
||||||
| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|
| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|
||||||
|---|---|---|---|---|---|
|
|---|---|---|---|---|---|
|
||||||
|
| [`messaging.destination.name`](/docs/attributes-registry/messaging.md) | string | The message destination name [1] | `direct_logs:warning`; `logs` | `Required` |  |
|
||||||
| [`messaging.operation.name`](/docs/attributes-registry/messaging.md) | string | The system-specific name of the messaging operation. | `ack`; `nack`; `send` | `Required` |  |
|
| [`messaging.operation.name`](/docs/attributes-registry/messaging.md) | string | The system-specific name of the messaging operation. | `ack`; `nack`; `send` | `Required` |  |
|
||||||
| [`error.type`](/docs/attributes-registry/error.md) | string | Describes a class of error the operation ended with. [1] | `amqp:decode-error`; `KAFKA_STORAGE_ERROR`; `channel-error` | `Conditionally Required` If and only if the messaging operation has failed. |  |
|
| [`error.type`](/docs/attributes-registry/error.md) | string | Describes a class of error the operation ended with. [2] | `amqp:decode-error`; `KAFKA_STORAGE_ERROR`; `channel-error` | `Conditionally Required` If and only if the messaging operation has failed. |  |
|
||||||
| [`messaging.destination.name`](/docs/attributes-registry/messaging.md) | string | The message destination name [2] | `MyQueue`; `MyTopic` | `Conditionally Required` [3] |  |
|
| [`messaging.operation.type`](/docs/attributes-registry/messaging.md) | string | A string identifying the type of the messaging operation. [3] | `create`; `send`; `receive` | `Conditionally Required` If applicable. |  |
|
||||||
| [`messaging.operation.type`](/docs/attributes-registry/messaging.md) | string | A string identifying the type of the messaging operation. [4] | `create`; `send`; `receive` | `Conditionally Required` If applicable. |  |
|
|
||||||
| [`messaging.rabbitmq.destination.routing_key`](/docs/attributes-registry/messaging.md) | string | RabbitMQ message routing key. | `myKey` | `Conditionally Required` If not empty. |  |
|
| [`messaging.rabbitmq.destination.routing_key`](/docs/attributes-registry/messaging.md) | string | RabbitMQ message routing key. | `myKey` | `Conditionally Required` If not empty. |  |
|
||||||
| [`messaging.rabbitmq.message.delivery_tag`](/docs/attributes-registry/messaging.md) | int | RabbitMQ message delivery tag | `123` | `Conditionally Required` When available. |  |
|
| [`messaging.rabbitmq.message.delivery_tag`](/docs/attributes-registry/messaging.md) | int | RabbitMQ message delivery tag | `123` | `Conditionally Required` When available. |  |
|
||||||
| [`server.address`](/docs/attributes-registry/server.md) | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | `Conditionally Required` If available. |  |
|
| [`server.address`](/docs/attributes-registry/server.md) | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | `Conditionally Required` If available. |  |
|
||||||
| [`messaging.message.conversation_id`](/docs/attributes-registry/messaging.md) | string | Message [correlation Id](https://www.rabbitmq.com/tutorials/tutorial-six-java#correlation-id) property. | `MyConversationId` | `Recommended` |  |
|
| [`messaging.message.conversation_id`](/docs/attributes-registry/messaging.md) | string | Message [correlation Id](https://www.rabbitmq.com/tutorials/tutorial-six-java#correlation-id) property. | `MyConversationId` | `Recommended` |  |
|
||||||
| [`messaging.message.id`](/docs/attributes-registry/messaging.md) | string | A value used by the messaging system as an identifier for the message, represented as a string. | `452a7c7c7c7048c2f887f61572b18fc2` | `Recommended` If span describes operation on a single message. |  |
|
| [`messaging.message.id`](/docs/attributes-registry/messaging.md) | string | A value used by the messaging system as an identifier for the message, represented as a string. | `452a7c7c7c7048c2f887f61572b18fc2` | `Recommended` If span describes operation on a single message. |  |
|
||||||
| [`network.peer.address`](/docs/attributes-registry/network.md) | string | Peer address of the network connection - IP address or Unix domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | `Recommended` |  |
|
| [`network.peer.address`](/docs/attributes-registry/network.md) | string | Peer address of the network connection - IP address or Unix domain socket name. [5] | `10.1.2.80`; `/tmp/my.sock` | `Recommended` |  |
|
||||||
| [`network.peer.port`](/docs/attributes-registry/network.md) | int | Peer port number of the network connection. | `65123` | `Recommended` |  |
|
| [`network.peer.port`](/docs/attributes-registry/network.md) | int | Peer port number of the network connection. | `65123` | `Recommended` |  |
|
||||||
| [`server.port`](/docs/attributes-registry/server.md) | int | Server port number. [7] | `80`; `8080`; `443` | `Recommended` |  |
|
| [`server.port`](/docs/attributes-registry/server.md) | int | Server port number. [6] | `80`; `8080`; `443` | `Recommended` |  |
|
||||||
| [`messaging.message.body.size`](/docs/attributes-registry/messaging.md) | int | The size of the message body in bytes. [8] | `1439` | `Opt-In` |  |
|
| [`messaging.message.body.size`](/docs/attributes-registry/messaging.md) | int | The size of the message body in bytes. [7] | `1439` | `Opt-In` |  |
|
||||||
|
|
||||||
**[1] `error.type`:** The `error.type` SHOULD be predictable, and SHOULD have low cardinality.
|
**[1] `messaging.destination.name`:** In RabbitMQ, the destination is defined by an *exchange*, a *routing key* and for consumers, a *queue*.
|
||||||
|
|
||||||
|
`messaging.destination.name` SHOULD be set to:
|
||||||
|
|
||||||
|
- **On the producer side**: `{exchange}:{routing key}` when both values are present and non-empty.
|
||||||
|
When only one is available, only that value SHOULD be used. E.g., `{exchange}` or `{routing key}`.
|
||||||
|
Otherwise: `amq.default` when the default exchange is used and no routing key is provided
|
||||||
|
|
||||||
|
- **On the consumer side**: `{exchange}:{routing key}:{queue}` when all values are present and non-empty.
|
||||||
|
If any has an empty value (e.g., the default exchange is used) it SHOULD be omitted.
|
||||||
|
For cases when `{routing key}` and `{queue}` are equal, only one of them SHOULD
|
||||||
|
be used, e.g., `{exchange}:{routing key}`.
|
||||||
|
|
||||||
|
**[2] `error.type`:** The `error.type` SHOULD be predictable, and SHOULD have low cardinality.
|
||||||
|
|
||||||
When `error.type` is set to a type (e.g., an exception type), its
|
When `error.type` is set to a type (e.g., an exception type), its
|
||||||
canonical class name identifying the type within the artifact SHOULD be used.
|
canonical class name identifying the type within the artifact SHOULD be used.
|
||||||
|
|
@ -86,20 +96,15 @@ it's RECOMMENDED to:
|
||||||
- Use a domain-specific attribute
|
- Use a domain-specific attribute
|
||||||
- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.
|
- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.
|
||||||
|
|
||||||
**[2] `messaging.destination.name`:** Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If
|
**[3] `messaging.operation.type`:** If a custom value is used, it MUST be of low cardinality.
|
||||||
the broker doesn't have such notion, the destination name SHOULD uniquely identify the broker.
|
|
||||||
|
|
||||||
**[3] `messaging.destination.name`:** If span describes operation on a single message or if the value applies to all messages in the batch.
|
**[4] `server.address`:** Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.
|
||||||
|
|
||||||
**[4] `messaging.operation.type`:** If a custom value is used, it MUST be of low cardinality.
|
**[5] `network.peer.address`:** If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.
|
||||||
|
|
||||||
**[5] `server.address`:** Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.
|
**[6] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available.
|
||||||
|
|
||||||
**[6] `network.peer.address`:** If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.
|
**[7] `messaging.message.body.size`:** This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed
|
||||||
|
|
||||||
**[7] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available.
|
|
||||||
|
|
||||||
**[8] `messaging.message.body.size`:** This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed
|
|
||||||
body size should be used.
|
body size should be used.
|
||||||
|
|
||||||
The following attributes can be important for making sampling decisions
|
The following attributes can be important for making sampling decisions
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,22 @@ groups:
|
||||||
Message [correlation Id](https://www.rabbitmq.com/tutorials/tutorial-six-java#correlation-id) property.
|
Message [correlation Id](https://www.rabbitmq.com/tutorials/tutorial-six-java#correlation-id) property.
|
||||||
- ref: messaging.message.body.size
|
- ref: messaging.message.body.size
|
||||||
requirement_level: opt_in
|
requirement_level: opt_in
|
||||||
|
- ref: messaging.destination.name
|
||||||
|
note: |
|
||||||
|
In RabbitMQ, the destination is defined by an *exchange*, a *routing key* and for consumers, a *queue*.
|
||||||
|
|
||||||
|
`messaging.destination.name` SHOULD be set to:
|
||||||
|
|
||||||
|
- **On the producer side**: `{exchange}:{routing key}` when both values are present and non-empty.
|
||||||
|
When only one is available, only that value SHOULD be used. E.g., `{exchange}` or `{routing key}`.
|
||||||
|
Otherwise: `amq.default` when the default exchange is used and no routing key is provided
|
||||||
|
|
||||||
|
- **On the consumer side**: `{exchange}:{routing key}:{queue}` when all values are present and non-empty.
|
||||||
|
If any has an empty value (e.g., the default exchange is used) it SHOULD be omitted.
|
||||||
|
For cases when `{routing key}` and `{queue}` are equal, only one of them SHOULD
|
||||||
|
be used, e.g., `{exchange}:{routing key}`.
|
||||||
|
examples: ['direct_logs:warning', 'logs']
|
||||||
|
requirement_level: required
|
||||||
|
|
||||||
- id: messaging.kafka
|
- id: messaging.kafka
|
||||||
type: attribute_group
|
type: attribute_group
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue