115 lines
6.9 KiB
Markdown
115 lines
6.9 KiB
Markdown
<!--- Hugo front matter used to generate the website version of this page:
|
|
linkTitle: MongoDB
|
|
--->
|
|
|
|
# Semantic conventions for MongoDB client operations
|
|
|
|
**Status**: [Development][DocumentStatus]
|
|
|
|
<!-- toc -->
|
|
|
|
- [Spans](#spans)
|
|
- [Example](#example)
|
|
- [Metrics](#metrics)
|
|
|
|
<!-- tocstop -->
|
|
|
|
The Semantic Conventions for [MongoDB](https://www.mongodb.com/) extend and override the [Database Semantic Conventions](README.md).
|
|
|
|
## Spans
|
|
|
|
<!-- semconv span.db.mongodb.client -->
|
|
<!-- NOTE: THIS TEXT IS AUTOGENERATED. DO NOT EDIT BY HAND. -->
|
|
<!-- see templates/registry/markdown/snippet.md.j2 -->
|
|
<!-- prettier-ignore-start -->
|
|
<!-- markdownlint-capture -->
|
|
<!-- markdownlint-disable -->
|
|
|
|
**Status:** 
|
|
|
|
Spans representing calls to MongoDB adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).
|
|
|
|
`db.system.name` MUST be set to `"mongodb"` and SHOULD be provided **at span creation time**.
|
|
**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)
|
|
|
|
**Span kind** SHOULD be `CLIENT`.
|
|
|
|
**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.
|
|
|
|
| Attribute | Type | Description | Examples | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Stability |
|
|
|---|---|---|---|---|---|
|
|
| [`db.collection.name`](/docs/attributes-registry/db.md) | string | The MongoDB collection being accessed within the database stated in `db.namespace`. [1] | `public.users`; `customers` | `Required` |  |
|
|
| [`db.namespace`](/docs/attributes-registry/db.md) | string | The MongoDB database name. | `customers`; `test.users` | `Conditionally Required` If available. |  |
|
|
| [`db.operation.name`](/docs/attributes-registry/db.md) | string | The name of the [MongoDB command](https://www.mongodb.com/docs/manual/reference/command/) being executed. | `findAndModify`; `getMore`; `insertMany`; `bulkWrite` | `Conditionally Required` If readily available. |  |
|
|
| [`db.response.status_code`](/docs/attributes-registry/db.md) | string | [MongoDB error code](https://www.mongodb.com/docs/manual/reference/error-codes/) represented as a string. [2] | `36`; `11602` | `Conditionally Required` [3] |  |
|
|
| [`error.type`](/docs/attributes-registry/error.md) | string | Describes a class of error the operation ended with. [4] | `timeout`; `java.net.UnknownHostException`; `server_certificate_invalid`; `500` | `Conditionally Required` If and only if the operation failed. |  |
|
|
| [`server.port`](/docs/attributes-registry/server.md) | int | Server port number. [5] | `80`; `8080`; `443` | `Conditionally Required` [6] |  |
|
|
| [`db.operation.batch.size`](/docs/attributes-registry/db.md) | int | The number of queries included in a batch operation. [7] | `2`; `3`; `4` | `Recommended` |  |
|
|
| [`server.address`](/docs/attributes-registry/server.md) | string | Name of the database host. [8] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | `Recommended` |  |
|
|
|
|
**[1] `db.collection.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.
|
|
For batch operations, if the individual operations are known to have the same collection name then that collection name SHOULD be used.
|
|
|
|
**[2] `db.response.status_code`:** All MongoDB error codes SHOULD be considered errors.
|
|
|
|
**[3] `db.response.status_code`:** If the operation failed and error code is available.
|
|
|
|
**[4] `error.type`:** The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.
|
|
When using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.
|
|
Instrumentations SHOULD document how `error.type` is populated.
|
|
|
|
**[5] `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] `server.port`:** If using a port other than the default port for this DBMS and if `server.address` is set.
|
|
|
|
**[7] `db.operation.batch.size`:** Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.
|
|
|
|
**[8] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available.
|
|
|
|
The following attributes can be important for making sampling decisions
|
|
and SHOULD be provided **at span creation time** (if provided at all):
|
|
|
|
* [`db.collection.name`](/docs/attributes-registry/db.md)
|
|
* [`db.namespace`](/docs/attributes-registry/db.md)
|
|
* [`db.operation.name`](/docs/attributes-registry/db.md)
|
|
* [`server.address`](/docs/attributes-registry/server.md)
|
|
* [`server.port`](/docs/attributes-registry/server.md)
|
|
|
|
---
|
|
|
|
`error.type` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
|
|
|
|
| Value | Description | Stability |
|
|
|---|---|---|
|
|
| `_OTHER` | A fallback error value to be used when the instrumentation doesn't define a custom value. |  |
|
|
|
|
<!-- markdownlint-restore -->
|
|
<!-- prettier-ignore-end -->
|
|
<!-- END AUTOGENERATED TEXT -->
|
|
<!-- endsemconv -->
|
|
|
|
### Example
|
|
|
|
| Key | Value |
|
|
|:------------------------| :----------------------------------------------------------- |
|
|
| Span name | `"findAndModify products"` |
|
|
| `db.system.name` | `"mongodb"` |
|
|
| `server.address` | `"mongodb0.example.com"` |
|
|
| `server.port` | `27017` |
|
|
| `network.peer.address` | `"192.0.2.14"` |
|
|
| `network.peer.port` | `27017` |
|
|
| `network.transport` | `"tcp"` |
|
|
| `db.collection.name` | `"products"` |
|
|
| `db.namespace` | `"shopDb"` |
|
|
| `db.query.text` | not set |
|
|
| `db.operation.name` | `"findAndModify"` |
|
|
|
|
## Metrics
|
|
|
|
MongoDB client instrumentations SHOULD collect metrics according to the general
|
|
[Semantic Conventions for Database Client Metrics](database-metrics.md).
|
|
|
|
`db.system.name` MUST be set to `"mongodb"`.
|
|
|
|
[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status
|