Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .chloggen/974.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
change_type: breaking

component: db

note: Clarify database span name format and fallback values.

issues: [974, 704]
2 changes: 1 addition & 1 deletion docs/database/cosmosdb.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ In addition to Cosmos DB attributes, all spans include

| Key | Value |
|:-------------------------------------| :------------------- |
| Span name | `"ReadItemsAsync"` |
| Span name | `"ReadItemsAsync orders"` |
| `kind` | `"internal"` |
| `az.namespace` | `"Microsoft.DocumentDB"` |
| `db.system` | `"cosmosdb"` |
Expand Down
34 changes: 23 additions & 11 deletions docs/database/database-spans.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ linkTitle: Client Calls

<!-- toc -->

- [Name](#name)
- [Common attributes](#common-attributes)
- [Notes and well-known identifiers for `db.system`](#notes-and-well-known-identifiers-for-dbsystem)
- [Semantic Conventions for specific database technologies](#semantic-conventions-for-specific-database-technologies)
Expand Down Expand Up @@ -51,21 +52,32 @@ linkTitle: Client Calls

**Span kind:** MUST always be `CLIENT`.

The **span name** SHOULD be set to a low cardinality value representing the statement executed on the database.
It MAY be a stored procedure name (without arguments), DB statement without variable arguments, operation name, etc.
Since SQL statements may have very high cardinality even without arguments, SQL spans SHOULD be named the
following way, unless the statement is known to be of low cardinality:
`<db.operation.name> <db.namespace>.<db.collection.name>`, provided that `db.operation.name` and `db.collection.name` are available.
If `db.collection.name` is not available due to its semantics, the span SHOULD be named `<db.operation.name> <db.namespace>`.

It is not recommended to attempt any client-side parsing of `db.query.text` just to get these properties,
they should only be used if the library being instrumented already provides them.
When it's otherwise impossible to get any meaningful span name, `db.namespace` or the tech-specific database name MAY be used.

Span that describes database call SHOULD cover the duration of the corresponding call as if it was observed by the caller (such as client application).
For example, if a transient issue happened and was retried within this database call, the corresponding span should cover the duration of the logical operation
with all retries.

## Name

Database spans MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.31.0/specification/trace/api.md#span).

<!-- markdown-link-check-disable -->
<!-- HTML anchors are not supported https://github.com/tcort/markdown-link-check/issues/225-->
The **span name** SHOULD be `{db.operation.name} {target}` if there is a
(low-cardinality) `db.operation.name` available (see below for the exact definition of the [`{target}`](#target-placeholder) placeholder).

If there is no (low-cardinality) `db.operation.name` available, database span names
SHOULD be [`{target}`](#target-placeholder).
<!-- markdown-link-check-enable -->

Semantic conventions for individual database systems MAY specify different span name format.

The <span id="target-placeholder">`{target}`</span> SHOULD adhere to one of the following values, arranged in prioritized order, provided they are accessible:

- `db.collection.name`
- `db.namespace`
- `server.address:server.port`
- `db.system`

## Common attributes

These attributes will usually be the same for all operations performed over the same database connection.
Expand Down
2 changes: 1 addition & 1 deletion docs/database/mongodb.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ described on this page.

| Key | Value |
|:------------------------| :----------------------------------------------------------- |
| Span name | `"products.findAndModify"` |
| Span name | `"findAndModify products"` |
| `db.system` | `"mongodb"` |
| `server.address` | `"mongodb0.example.com"` |
| `server.port` | `27017` |
Expand Down
4 changes: 2 additions & 2 deletions docs/database/redis.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ In this example, Redis is connected using a unix domain socket and therefore the

| Key | Value |
|:--------------------------| :-------------------------------------------- |
| Span name | `"HMSET myhash"` |
| Span name | `"HMSET 15"` |
| `db.system` | `"redis"` |
| `network.peer.address` | `"/tmp/redis.sock"` |
| `network.transport` | `"unix"` |
| `db.namespace` | `"15"` |
| `db.query.text` | `"HMSET myhash field1 'Hello' field2 'World"` |
| `db.operation.name` | not set |
| `db.operation.name` | `"HMSET"` |

[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/tree/v1.31.0/specification/document-status.md