Skip to content

Latest commit

 

History

History
444 lines (325 loc) · 31.6 KB

cosmosdb.md

File metadata and controls

444 lines (325 loc) · 31.6 KB

Semantic conventions for Microsoft Azure Cosmos DB

Status: Development

The Semantic Conventions for Microsoft Cosmos DB extend and override the Database Semantic Conventions.

Spans

Cosmos DB instrumentations include call-level spans that represent logical database calls and adhere to the general Semantic Conventions for Database Client Spans.

Additional spans representing network calls may also be created depending on the connection mode (Gateway or Direct). Semantic conventions described in this document apply to the call-level spans only.

The following table outlines the span attributes applicable to Cosmos DB.

db.system.name MUST be set to "azure.cosmosdb" and SHOULD be provided at span creation time.

Attribute Type Description Examples Requirement Level Stability
azure.cosmosdb.connection.mode string Cosmos client connection mode. gateway; direct Conditionally Required [1] Development
azure.cosmosdb.consistency.level string Account or request consistency level. Eventual; ConsistentPrefix; BoundedStaleness; Strong; Session Conditionally Required If available. Development
azure.cosmosdb.operation.contacted_regions string[] List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was performed on multiple regions i.e. cross-regional call. [2] ["North Central US", "Australia East", "Australia Southeast"] Conditionally Required If available. Development
azure.cosmosdb.operation.request_charge double The number of request units consumed by the operation. 46.18; 1.0 Conditionally Required when available Development
azure.cosmosdb.response.sub_status_code int Cosmos DB sub status code. 1000; 1002 Conditionally Required when response was received and contained sub-code. Development
db.collection.name string Cosmos DB container name. [3] public.users; customers Conditionally Required if available Release Candidate
db.namespace string The name of the database, fully qualified within the server address and port. customers; test.users Conditionally Required If available. Release Candidate
db.operation.name string The name of the operation or command being executed. [4] create_item; query_items; read_item Conditionally Required [5] Release Candidate
db.response.returned_rows int Cosmos DB row count in result set. 10; 20 Conditionally Required if response was received and returned any rows Development
db.response.status_code string Cosmos DB status code. [6] 200; 201 Conditionally Required if response was received Release Candidate
error.type string Describes a class of error the operation ended with. [7] timeout; java.net.UnknownHostException; server_certificate_invalid; 500 Conditionally Required If and only if the operation failed. Stable
server.port int Server port number. [8] 80; 8080; 443 Conditionally Required If not default (443). Stable
az.namespace string Azure Resource Provider Namespace as recognized by the client. [9] Microsoft.DocumentDB Recommended Development
azure.client.id string The unique identifier of the client instance. 3ba4827d-4422-483f-b59f-85b74211c11d; storage-client-1 Recommended Development
azure.cosmosdb.request.body.size int Request payload size in bytes. Recommended Development
db.operation.batch.size int The number of queries included in a batch operation. [10] 2; 3; 4 Recommended Release Candidate
db.query.summary string Low cardinality representation of a database query text. [11] SELECT wuser_table; INSERT shipping_details SELECT orders; get user by id Recommended [12] Release Candidate
db.query.text string The database query being executed. [13] SELECT * FROM wuser_table where username = ?; SET mykey ? Recommended [14] Release Candidate
server.address string Name of the database host. [15] example.com; 10.1.2.80; /tmp/my.sock Recommended Stable
user_agent.original string Full user-agent string is generated by Cosmos DB SDK [16] cosmos-netstandard-sdk/3.23.0|3.23.1|1|X64|Linux 5.4.0-1098-azure 104 18|.NET Core 3.1.32|S| Recommended Stable
db.operation.parameter.<key> string A database operation parameter, with <key> being the parameter name, and the attribute value being a string representation of the parameter value. [17] someval; 55 Opt-In Release Candidate

[1] azure.cosmosdb.connection.mode: if not gateway (the default value is assumed to be gateway).

[2] azure.cosmosdb.operation.contacted_regions: Region name matches the format of displayName in Azure Location API

[3] db.collection.name: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.

[4] db.operation.name: The db.operation.name has the following list of well-known values. If one of them applies, then the respective value MUST be used.

Batch operations:

  • execute_batch

Bulk operations:

  • execute_bulk SHOULD be used on spans reported for methods like executeBulkOperations). which represents a bulk execution of multiple operations.
  • bulk_{operation name} (bulk_create_item, bulk_upsert_item, etc) SHOULD be used on spans describing individual operations (when they are reported) within the bulk. This pattern SHOULD be used when instrumentation creates span per each operation, but operations are buffered and then performed in bulk. For example, this applies when AllowBulkExecution property is configured on the Microsoft.Azure.Cosmos client.

Change feed operations:

  • query_change_feed

Conflicts operations:

  • delete_conflict
  • query_conflicts
  • read_all_conflicts
  • read_conflict

Container operations:

  • create_container
  • create_container_if_not_exists
  • delete_container
  • query_containers
  • read_all_containers
  • read_container
  • read_container_throughput
  • replace_container
  • replace_container_throughput

Database operations:

  • create_database
  • create_database_if_not_exists
  • delete_database
  • query_databases
  • read_all_databases
  • read_database
  • read_database_throughput
  • replace_database_throughput

Encryption key operations:

  • create_client_encryption_key
  • query_client_encryption_keys
  • read_all_client_encryption_keys
  • read_client_encryption_key
  • replace_client_encryption_key

Item operations:

  • create_item
  • delete_all_items_by_partition_key
  • delete_item
  • patch_item
  • query_items
  • read_all_items
  • read_all_items_of_logical_partition
  • read_many_items
  • read_item
  • replace_item
  • upsert_item

Permission operations:

  • create_permission
  • delete_permission
  • query_permissions
  • read_all_permissions
  • read_permission
  • replace_permission
  • upsert_permission

Stored procedure operations:

  • create_stored_procedure
  • delete_stored_procedure
  • execute_stored_procedure
  • query_stored_procedures
  • read_all_stored_procedures
  • read_stored_procedure
  • replace_stored_procedure

Trigger operations:

  • create_trigger
  • delete_trigger
  • query_triggers
  • read_all_triggers
  • read_trigger
  • replace_trigger

User operations:

  • create_user
  • delete_user
  • query_users
  • read_all_users
  • read_user
  • replace_user
  • upsert_user

User-defined function operations:

  • create_user_defined_function
  • delete_user_defined_function
  • query_user_defined_functions
  • read_all_user_defined_functions
  • read_user_defined_function

If none of them applies, it's RECOMMENDED to use language-agnostic representation of client method name in snake_case. Instrumentations SHOULD document additional values when introducing new operations.

[5] db.operation.name: If readily available and if there is a single operation name that describes the database call.

[6] db.response.status_code: Response codes in the 4xx and 5xx range SHOULD be considered errors.

[7] 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.

[8] 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.

[9] az.namespace: When az.namespace attribute is populated, it MUST be set to Microsoft.DocumentDB for all operations performed by Cosmos DB client.

[10] 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.

[11] db.query.summary: db.query.summary provides static summary of the query text. It describes a class of database queries and is useful as a grouping key, especially when analyzing telemetry for database calls involving complex queries. Summary may be available to the instrumentation through instrumentation hooks or other means. If it is not available, instrumentations that support query parsing SHOULD generate a summary following Generating query summary section.

[12] db.query.summary: if readily available or if instrumentation supports query summarization.

[13] db.query.text: For sanitization see Sanitization of db.query.text. For batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator ; or some other database system specific separator if more applicable. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.

[14] db.query.text: Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See Sanitization of db.query.text. Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see db.operation.parameter.<key>).

[15] 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.

[16] user_agent.original: The user-agent value is generated by SDK which is a combination of
sdk_version : Current version of SDK. e.g. 'cosmos-netstandard-sdk/3.23.0'
direct_pkg_version : Direct package version used by Cosmos DB SDK. e.g. '3.23.1'
number_of_client_instances : Number of cosmos client instances created by the application. e.g. '1'
type_of_machine_architecture : Machine architecture. e.g. 'X64'
operating_system : Operating System. e.g. 'Linux 5.4.0-1098-azure 104 18'
runtime_framework : Runtime Framework. e.g. '.NET Core 3.1.32'
failover_information : Generated key to determine if region failover enabled. Format Reg-{D (Disabled discovery)}-S(application region)|L(List of preferred regions)|N(None, user did not configure it). Default value is "NS".

[17] db.operation.parameter: If a parameter has no name and instead is referenced only by index, then <key> SHOULD be the 0-based index. If db.query.text is also captured, then db.operation.parameter.<key> SHOULD match up with the parameterized placeholders present in db.query.text.

The following attributes can be important for making sampling decisions and SHOULD be provided at span creation time (if provided at all):


azure.cosmosdb.connection.mode 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
direct Direct connection. Development
gateway Gateway (HTTP) connection. Development

azure.cosmosdb.consistency.level 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
BoundedStaleness bounded_staleness Development
ConsistentPrefix consistent_prefix Development
Eventual eventual Development
Session session Development
Strong strong Development

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. Stable

Example

Key Value
Span name "read_item orders"
az.namespace "Microsoft.DocumentDB"
azure.client.id "3ba4827d-4422-483f-b59f-85b74211c11d"
azure.cosmosdb.operation.request_charge 7.43
azure.cosmosdb.request.body.size 20
azure.cosmosdb.response.sub_status_code 0
db.system.name "azure.cosmosdb"
db.collection.name "orders"
db.namespace "ShopDb"
db.operation.name "read_item"
db.response.status_code 201
server.address "account.documents.azure.com"
user_agent.original "cosmos-netstandard-sdk/3.23.0|3.23.1|1|X64|Linux 5.4.0-1098-azure 104 18|.NET Core 3.1.32|S|"

Metrics

The following metrics provide insights into Azure Cosmos DB client operation performance and behavior.

Metric: db.client.operation.duration

This metric is required.

It captures the total time taken by an Azure Cosmos DB operation. This metric follows the common db.client.operation.duration definition.

Refer azure.cosmosdb.client.operation.request_charge metrics for dimensions.

Metric: db.client.response.returned_rows

This metric is required.

It captures the number of items returned by a query or feed operation in Azure Cosmos DB. It helps identify response sizes that may contribute to high latency, increased memory/CPU usage, or network call failures. This metric follows the common db.client.response.returned_rows definition.

Refer azure.cosmosdb.client.operation.request_charge metrics for dimensions.

Metric: azure.cosmosdb.client.operation.request_charge

This metric is required.

It captures the Request Units consumed by each operation in Azure Cosmos DB. Since Request Units serve as a form of throughput control within the Azure Cosmos DB database, monitoring their usage is crucial to avoid throttling.

this metric SHOULD be specified with ExplicitBucketBoundaries of [ 1, 5, 10, 25, 50, 100, 250, 500, 1000].

Explaining bucket configuration:

  1. 1, 5, 10: Low Usage Levels, These smaller buckets allow for precise tracking of operations that consume a minimal number of Request Units. This is important for lightweight operations, such as basic read requests or small queries, where resource utilization should be optimized. Monitoring these low usage levels can help ensure that the application is not inadvertently using more resources than necessary.
  2. 25, 50: Moderate Usage Levels, These ranges capture more moderate operations, which are typical in many applications. For example, queries that return a reasonable amount of data or perform standard CRUD operations may fall within these limits. Identifying usage patterns in these buckets can help detect efficiency issues in routine operations.
  3. 100, 250: Higher Usage Levels, These boundaries represent operations that may require significant resources, such as complex queries or larger transactions. Monitoring RUs in these ranges can help identify performance bottlenecks or costly queries that might lead to throttling.
  4. 500, 1000: Very High Usage Levels, These buckets capture operations that consume a substantial number of Request Units, which may indicate potentially expensive queries or batch processes. Understanding the frequency and patterns of such high RU usage can be critical in optimizing performance and ensuring the application remains within provisioned throughput limits.
Name Instrument Type Unit (UCUM) Description Stability
azure.cosmosdb.client.operation.request_charge Histogram {request_unit} Request units consumed by the operation Development
Attribute Type Description Examples Requirement Level Stability
azure.cosmosdb.consistency.level string Account or request consistency level. Eventual; ConsistentPrefix; BoundedStaleness; Strong; Session Conditionally Required If available. Development
azure.cosmosdb.response.sub_status_code int Cosmos DB sub status code. 1000; 1002 Conditionally Required when response was received and contained sub-code. Development
db.collection.name string Cosmos DB container name. [1] public.users; customers Conditionally Required If available. Release Candidate
db.namespace string The name of the database, fully qualified within the server address and port. customers; test.users Conditionally Required If available. Release Candidate
db.operation.name string The name of the operation or command being executed. [2] findAndModify; HMSET; SELECT Conditionally Required If readily available. Release Candidate
db.response.status_code string Database response status code. [3] 102; ORA-17002; 08P01; 404 Conditionally Required [4] Release Candidate
error.type string Describes a class of error the operation ended with. [5] timeout; java.net.UnknownHostException; server_certificate_invalid; 500 Conditionally Required If and only if the operation failed. Stable
server.port int Server port number. [6] 80; 8080; 443 Conditionally Required [7] Stable
azure.cosmosdb.operation.contacted_regions string[] List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was performed on multiple regions i.e. cross-regional call. [8] ["North Central US", "Australia East", "Australia Southeast"] Recommended If available Development
server.address string Name of the database host. [9] example.com; 10.1.2.80; /tmp/my.sock Recommended Stable

[1] db.collection.name: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.

[2] db.operation.name: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.

The operation name SHOULD NOT be extracted from db.query.text, when the database system supports cross-table queries in non-batch operations.

For batch operations, if the individual operations are known to have the same operation name then that operation name SHOULD be used prepended by BATCH , otherwise db.operation.name SHOULD be BATCH or some other database system specific term if more applicable.

[3] db.response.status_code: The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. Semantic conventions for individual database systems SHOULD document what db.response.status_code means in the context of that system.

[4] db.response.status_code: If the operation failed and status code is available.

[5] 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.

[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.

[7] server.port: If using a port other than the default port for this DBMS and if server.address is set.

[8] azure.cosmosdb.operation.contacted_regions: Region name matches the format of displayName in Azure Location API

[9] 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.


azure.cosmosdb.consistency.level 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
BoundedStaleness bounded_staleness Development
ConsistentPrefix consistent_prefix Development
Eventual eventual Development
Session session Development
Strong strong Development

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. Stable

Metric: azure.cosmosdb.client.active_instance.count

This metric is required.

It captures the number of active instances at any given time. Best practices dictate that there should ideally be only one instance of the SDK client per Azure Cosmos DB account. Having multiple instances of the SDK client for the same account in a single process can lead to CPU or memory-related issues.

Name Instrument Type Unit (UCUM) Description Stability
azure.cosmosdb.client.active_instance.count UpDownCounter {instance} Number of active client instances Development
Attribute Type Description Examples Requirement Level Stability
server.port int Server port number. [1] 80; 8080; 443 Conditionally Required [2] Stable
server.address string Name of the database host. [3] example.com; 10.1.2.80; /tmp/my.sock Recommended Stable

[1] 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.

[2] server.port: If using a port other than the default port for this DBMS and if server.address is set.

[3] 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.