diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f89ef1505..85bdbadc28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,8 @@ Increment the:
[#2398](https://github.com/open-telemetry/opentelemetry-cpp/pull/2398)
* [EXPORTER] Rework OTLP/HTTP and OTLP/GRPC exporter options
[#2388](https://github.com/open-telemetry/opentelemetry-cpp/pull/2388)
+* [SEMANTIC CONVENTION] Upgrade to semconv 1.23.1
+ [#2428](https://github.com/open-telemetry/opentelemetry-cpp/pull/2428)
Important changes:
diff --git a/api/include/opentelemetry/trace/semantic_conventions.h b/api/include/opentelemetry/trace/semantic_conventions.h
index 16d6562ee9..49f507c90b 100644
--- a/api/include/opentelemetry/trace/semantic_conventions.h
+++ b/api/include/opentelemetry/trace/semantic_conventions.h
@@ -22,16 +22,16 @@ namespace SemanticConventions
/**
* The URL of the OpenTelemetry schema for these keys and values.
*/
-static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.22.0";
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.23.1";
/**
- * Client address - domain name if available without reverse DNS lookup, otherwise IP address or
+ * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or
Unix domain socket name.
*
*
Notes:
- When observed from the server side, and when communicating through an intermediary,
- {@code client.address} SHOULD represent the client address behind any intermediaries (e.g. proxies)
- if it's available.
+ {@code client.address} SHOULD represent the client address behind any intermediaries, for example
+ proxies, if it's available.
*/
static constexpr const char *kClientAddress = "client.address";
@@ -40,125 +40,19 @@ static constexpr const char *kClientAddress = "client.address";
*
* Notes:
- When observed from the server side, and when communicating through an intermediary,
- {@code client.port} SHOULD represent the client port behind any intermediaries (e.g. proxies) if
- it's available.
+ {@code client.port} SHOULD represent the client port behind any intermediaries, for example
+ proxies, if it's available.
*/
static constexpr const char *kClientPort = "client.port";
/**
- * Deprecated, use {@code server.address}.
- *
- * @deprecated Deprecated, use `server.address`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetHostName = "net.host.name";
-
-/**
- * Deprecated, use {@code server.port}.
- *
- * @deprecated Deprecated, use `server.port`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetHostPort = "net.host.port";
-
-/**
- * Deprecated, use {@code server.address} on client spans and {@code client.address} on server
- * spans.
- *
- * @deprecated Deprecated, use `server.address` on client spans and `client.address` on server
- * spans.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetPeerName = "net.peer.name";
-
-/**
- * Deprecated, use {@code server.port} on client spans and {@code client.port} on server spans.
- *
- * @deprecated Deprecated, use `server.port` on client spans and `client.port` on server spans.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetPeerPort = "net.peer.port";
-
-/**
- * Deprecated, use {@code network.protocol.name}.
- *
- * @deprecated Deprecated, use `network.protocol.name`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetProtocolName = "net.protocol.name";
-
-/**
- * Deprecated, use {@code network.protocol.version}.
- *
- * @deprecated Deprecated, use `network.protocol.version`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetProtocolVersion = "net.protocol.version";
-
-/**
- * Deprecated, use {@code network.transport} and {@code network.type}.
- *
- * @deprecated Deprecated, use `network.transport` and `network.type`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockFamily = "net.sock.family";
-
-/**
- * Deprecated, use {@code network.local.address}.
- *
- * @deprecated Deprecated, use `network.local.address`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockHostAddr = "net.sock.host.addr";
-
-/**
- * Deprecated, use {@code network.local.port}.
- *
- * @deprecated Deprecated, use `network.local.port`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockHostPort = "net.sock.host.port";
-
-/**
- * Deprecated, use {@code network.peer.address}.
- *
- * @deprecated Deprecated, use `network.peer.address`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockPeerAddr = "net.sock.peer.addr";
-
-/**
- * Deprecated, no replacement at this time.
- *
- * @deprecated Deprecated, no replacement at this time.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockPeerName = "net.sock.peer.name";
-
-/**
- * Deprecated, use {@code network.peer.port}.
- *
- * @deprecated Deprecated, use `network.peer.port`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetSockPeerPort = "net.sock.peer.port";
-
-/**
- * Deprecated, use {@code network.transport}.
- *
- * @deprecated Deprecated, use `network.transport`.
- */
-OPENTELEMETRY_DEPRECATED
-static constexpr const char *kNetTransport = "net.transport";
-
-/**
- * Destination address - domain name if available without reverse DNS lookup, otherwise IP address
+ * Destination address - domain name if available without reverse DNS lookup; otherwise, IP address
or Unix domain socket name.
*
* Notes:
- When observed from the source side, and when communicating through an intermediary,
- {@code destination.address} SHOULD represent the destination address behind any intermediaries
- (e.g. proxies) if it's available.
+ {@code destination.address} SHOULD represent the destination address behind any intermediaries, for
+ example proxies, if it's available.
*/
static constexpr const char *kDestinationAddress = "destination.address";
@@ -173,14 +67,15 @@ static constexpr const char *kDestinationPort = "destination.port";
* Notes:
- The {@code error.type} SHOULD be predictable and SHOULD have low cardinality.
Instrumentations SHOULD document the list of errors they report.
- The cardinality of {@code
-error.type} within one instrumentation library SHOULD be low, but telemetry consumers that aggregate
+error.type} within one instrumentation library SHOULD be low. Telemetry consumers that aggregate
data from multiple instrumentation libraries and applications should be prepared for {@code
-error.type} to have high cardinality at query time, when no additional filters are
+error.type} to have high cardinality at query time when no additional filters are
applied.
- If the operation has completed successfully, instrumentations SHOULD NOT set {@code
-error.type}.
- If a specific domain defines its own set of error codes (such as HTTP or gRPC
-status codes), it's RECOMMENDED to use a domain-specific attribute and also set {@code error.type}
-to capture all errors, regardless of whether they are defined within the domain-specific set or
-not.
+error.type}.If a specific domain defines its own set of error identifiers (such as HTTP or
+gRPC status codes), it's RECOMMENDED to:Use a domain-specific attribute Set {@code
+error.type} to capture all errors, regardless of whether they are defined within the domain-specific
+set or not.
+
*/
static constexpr const char *kErrorType = "error.type";
@@ -263,57 +158,12 @@ static constexpr const char *kEnduserRole = "enduser.role";
*/
static constexpr const char *kEnduserScope = "enduser.scope";
-/**
- * Whether the thread is daemon or not.
- */
-static constexpr const char *kThreadDaemon = "thread.daemon";
-
-/**
- * Current "managed" thread ID (as opposed to OS thread ID).
- */
-static constexpr const char *kThreadId = "thread.id";
-
-/**
- * Current thread name.
- */
-static constexpr const char *kThreadName = "thread.name";
-
-/**
- * The column number in {@code code.filepath} best representing the operation. It SHOULD point
- * within the code unit named in {@code code.function}.
- */
-static constexpr const char *kCodeColumn = "code.column";
-
-/**
- * The source code file name that identifies the code unit as uniquely as possible (preferably an
- * absolute file path).
- */
-static constexpr const char *kCodeFilepath = "code.filepath";
-
-/**
- * The method or function name, or equivalent (usually rightmost part of the code unit's name).
- */
-static constexpr const char *kCodeFunction = "code.function";
-
-/**
- * The line number in {@code code.filepath} best representing the operation. It SHOULD point within
- * the code unit named in {@code code.function}.
- */
-static constexpr const char *kCodeLineno = "code.lineno";
-
-/**
- * The "namespace" within which {@code code.function} is defined. Usually the qualified
- * class or module name, such that {@code code.namespace} + some separator + {@code code.function}
- * form a unique identifier for the code unit.
- */
-static constexpr const char *kCodeNamespace = "code.namespace";
-
/**
* The domain identifies the business context for the events.
*
* Notes:
-
- Events across different domains may have same {@code event.name}, yet be
-unrelated events.
+ - Events across different domains may have same {@code event.name}, yet be unrelated
+ events.
*/
static constexpr const char *kEventDomain = "event.domain";
@@ -358,9 +208,31 @@ static constexpr const char *kLogFilePath = "log.file.path";
*/
static constexpr const char *kLogFilePathResolved = "log.file.path_resolved";
+/**
+ * This attribute represents the state the application has transitioned into at the occurrence of
+ the event.
+ *
+ * Notes:
+
+ */
+static constexpr const char *kIosState = "ios.state";
+
+/**
+ * This attribute represents the state the application has transitioned into at the occurrence of
+ the event.
+ *
+ * Notes:
+
+ */
+static constexpr const char *kAndroidState = "android.state";
+
/**
* The name of the connection pool; unique within the instrumented application. In case the
- * connection pool implementation does not provide a name, then the db.connection_string
* should be used
*/
@@ -474,96 +346,34 @@ static constexpr const char *kSystemNetworkState = "system.network.state";
static constexpr const char *kSystemProcessesStatus = "system.processes.status";
/**
- * Local address of the network connection - IP address or Unix domain socket name.
- */
-static constexpr const char *kNetworkLocalAddress = "network.local.address";
-
-/**
- * Local port number of the network connection.
- */
-static constexpr const char *kNetworkLocalPort = "network.local.port";
-
-/**
- * Peer address of the network connection - IP address or Unix domain socket name.
- */
-static constexpr const char *kNetworkPeerAddress = "network.peer.address";
-
-/**
- * Peer port number of the network connection.
- */
-static constexpr const char *kNetworkPeerPort = "network.peer.port";
-
-/**
- * OSI application layer or non-OSI
- equivalent.
- *
- * Notes:
-
- The value SHOULD be normalized to lowercase.
- */
-static constexpr const char *kNetworkProtocolName = "network.protocol.name";
-
-/**
- * Version of the protocol specified in {@code network.protocol.name}.
- *
- * Notes:
-
- {@code network.protocol.version} refers to the version of the protocol used and might be
- different from the protocol client's version. If the HTTP client used has a version of {@code
- 0.27.2}, but sends HTTP version {@code 1.1}, this attribute should be set to {@code 1.1}.
-
- */
-static constexpr const char *kNetworkProtocolVersion = "network.protocol.version";
-
-/**
- * OSI transport layer or inter-process communication
-method.
- *
- * Notes:
-
- The value SHOULD be normalized to lowercase.
- Consider always setting the
-transport when setting a port number, since a port number is ambiguous without knowing the
-transport, for example different processes could be listening on TCP port 12345 and UDP port
-12345.
- */
-static constexpr const char *kNetworkTransport = "network.transport";
-
-/**
- * OSI network layer or non-OSI equivalent.
- *
- * Notes:
-
- The value SHOULD be normalized to lowercase.
- */
-static constexpr const char *kNetworkType = "network.type";
-
-/**
- * The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.
- */
-static constexpr const char *kNetworkCarrierIcc = "network.carrier.icc";
-
-/**
- * The mobile carrier country code.
+ * The column number in {@code code.filepath} best representing the operation. It SHOULD point
+ * within the code unit named in {@code code.function}.
*/
-static constexpr const char *kNetworkCarrierMcc = "network.carrier.mcc";
+static constexpr const char *kCodeColumn = "code.column";
/**
- * The mobile carrier network code.
+ * The source code file name that identifies the code unit as uniquely as possible (preferably an
+ * absolute file path).
*/
-static constexpr const char *kNetworkCarrierMnc = "network.carrier.mnc";
+static constexpr const char *kCodeFilepath = "code.filepath";
/**
- * The name of the mobile carrier.
+ * The method or function name, or equivalent (usually rightmost part of the code unit's name).
*/
-static constexpr const char *kNetworkCarrierName = "network.carrier.name";
+static constexpr const char *kCodeFunction = "code.function";
/**
- * This describes more details regarding the connection.type. It may be the type of cell technology
- * connection, but it could be used for describing details about a wifi connection.
+ * The line number in {@code code.filepath} best representing the operation. It SHOULD point within
+ * the code unit named in {@code code.function}.
*/
-static constexpr const char *kNetworkConnectionSubtype = "network.connection.subtype";
+static constexpr const char *kCodeLineno = "code.lineno";
/**
- * The internet connection type.
+ * The "namespace" within which {@code code.function} is defined. Usually the qualified
+ * class or module name, such that {@code code.namespace} + some separator + {@code code.function}
+ * form a unique identifier for the code unit.
*/
-static constexpr const char *kNetworkConnectionType = "network.connection.type";
+static constexpr const char *kCodeNamespace = "code.namespace";
/**
* Deprecated, use {@code http.request.method} instead.
@@ -574,17 +384,17 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kHttpMethod = "http.method";
/**
- * Deprecated, use {@code http.request.body.size} instead.
+ * Deprecated, use {@code http.request.header.content-length} instead.
*
- * @deprecated Deprecated, use `http.request.body.size` instead.
+ * @deprecated Deprecated, use `http.request.header.content-length` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kHttpRequestContentLength = "http.request_content_length";
/**
- * Deprecated, use {@code http.response.body.size} instead.
+ * Deprecated, use {@code http.response.header.content-length} instead.
*
- * @deprecated Deprecated, use `http.response.body.size` instead.
+ * @deprecated Deprecated, use `http.response.header.content-length` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kHttpResponseContentLength = "http.response_content_length";
@@ -622,12 +432,118 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kHttpUrl = "http.url";
/**
- * The size of the request payload body in bytes. This is the number of bytes transferred excluding
- * headers and is often, but not always, present as the Content-Length
- * header. For requests using transport encoding, this should be the compressed size.
+ * Deprecated, use {@code server.address}.
+ *
+ * @deprecated Deprecated, use `server.address`.
*/
-static constexpr const char *kHttpRequestBodySize = "http.request.body.size";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetHostName = "net.host.name";
+
+/**
+ * Deprecated, use {@code server.port}.
+ *
+ * @deprecated Deprecated, use `server.port`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetHostPort = "net.host.port";
+
+/**
+ * Deprecated, use {@code server.address} on client spans and {@code client.address} on server
+ * spans.
+ *
+ * @deprecated Deprecated, use `server.address` on client spans and `client.address` on server
+ * spans.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetPeerName = "net.peer.name";
+
+/**
+ * Deprecated, use {@code server.port} on client spans and {@code client.port} on server spans.
+ *
+ * @deprecated Deprecated, use `server.port` on client spans and `client.port` on server spans.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetPeerPort = "net.peer.port";
+
+/**
+ * Deprecated, use {@code network.protocol.name}.
+ *
+ * @deprecated Deprecated, use `network.protocol.name`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetProtocolName = "net.protocol.name";
+
+/**
+ * Deprecated, use {@code network.protocol.version}.
+ *
+ * @deprecated Deprecated, use `network.protocol.version`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetProtocolVersion = "net.protocol.version";
+
+/**
+ * Deprecated, use {@code network.transport} and {@code network.type}.
+ *
+ * @deprecated Deprecated, use `network.transport` and `network.type`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockFamily = "net.sock.family";
+
+/**
+ * Deprecated, use {@code network.local.address}.
+ *
+ * @deprecated Deprecated, use `network.local.address`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockHostAddr = "net.sock.host.addr";
+
+/**
+ * Deprecated, use {@code network.local.port}.
+ *
+ * @deprecated Deprecated, use `network.local.port`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockHostPort = "net.sock.host.port";
+
+/**
+ * Deprecated, use {@code network.peer.address}.
+ *
+ * @deprecated Deprecated, use `network.peer.address`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockPeerAddr = "net.sock.peer.addr";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockPeerName = "net.sock.peer.name";
+
+/**
+ * Deprecated, use {@code network.peer.port}.
+ *
+ * @deprecated Deprecated, use `network.peer.port`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetSockPeerPort = "net.sock.peer.port";
+
+/**
+ * Deprecated, use {@code network.transport}.
+ *
+ * @deprecated Deprecated, use `network.transport`.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kNetTransport = "net.transport";
+
+/**
+ * The size of the request payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size.
+ */
+static constexpr const char *kHttpRequestBodySize = "http.request.body.size";
/**
* HTTP request method.
@@ -664,7 +580,7 @@ static constexpr const char *kHttpRequestMethodOriginal = "http.request.method_o
regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503
Server Unavailable, network issues, or any other).
*/
-static constexpr const char *kHttpResendCount = "http.resend_count";
+static constexpr const char *kHttpRequestResendCount = "http.request.resend_count";
/**
* The size of the response payload body in bytes. This is the number of bytes transferred excluding
@@ -680,8 +596,8 @@ static constexpr const char *kHttpResponseBodySize = "http.response.body.size";
static constexpr const char *kHttpResponseStatusCode = "http.response.status_code";
/**
- * The matched route (path template in the format used by the respective server framework). See note
-below
+ * The matched route, that is, the path template in the format used by the respective server
+framework.
*
* Notes:
- MUST NOT be populated when this is not supported by the HTTP server framework as the
@@ -692,878 +608,1036 @@ one.
static constexpr const char *kHttpRoute = "http.route";
/**
- * Server address - domain name if available without reverse DNS lookup, otherwise IP address or
-Unix domain socket name.
+ * The number of messages sent, received, or processed in the scope of the batching operation.
*
* Notes:
-
- When observed from the client side, and when communicating through an intermediary,
-{@code server.address} SHOULD represent the server address behind any intermediaries (e.g. proxies)
-if it's available.
+ - Instrumentations SHOULD NOT set {@code messaging.batch.message_count} on spans that
+ operate with a single message. When a messaging client library supports both batch and
+ single-message API for the same operation, instrumentations SHOULD use {@code
+ messaging.batch.message_count} for batching APIs and SHOULD NOT use it for single-message
+ APIs.
*/
-static constexpr const char *kServerAddress = "server.address";
+static constexpr const char *kMessagingBatchMessageCount = "messaging.batch.message_count";
/**
- * Server port number.
- *
- * Notes:
-
- When observed from the client side, and when communicating through an intermediary,
- {@code server.port} SHOULD represent the server port behind any intermediaries (e.g. proxies) if
- it's available.
+ * A unique identifier for the client that consumes or produces a message.
*/
-static constexpr const char *kServerPort = "server.port";
+static constexpr const char *kMessagingClientId = "messaging.client_id";
/**
- * A unique id to identify a session.
+ * A boolean that is true if the message destination is anonymous (could be unnamed or have
+ * auto-generated name).
*/
-static constexpr const char *kSessionId = "session.id";
+static constexpr const char *kMessagingDestinationAnonymous = "messaging.destination.anonymous";
/**
- * Source address - domain name if available without reverse DNS lookup, otherwise IP address or
- Unix domain socket name.
+ * The message destination name
*
* Notes:
-
- When observed from the destination side, and when communicating through an intermediary,
- {@code source.address} SHOULD represent the source address behind any intermediaries (e.g. proxies)
- if it's available.
- */
-static constexpr const char *kSourceAddress = "source.address";
-
-/**
- * Source port number
+ - Destination name SHOULD uniquely identify a specific queue, topic or other entity within
+the broker. If the broker doesn't have such notion, the destination name SHOULD uniquely identify
+the broker.
*/
-static constexpr const char *kSourcePort = "source.port";
+static constexpr const char *kMessagingDestinationName = "messaging.destination.name";
/**
- * The full invoked ARN as provided on the {@code Context} passed to the function ({@code
- Lambda-Runtime-Invoked-Function-Arn} header on the {@code /runtime/invocation/next} applicable).
+ * Low cardinality representation of the messaging destination name
*
* Notes:
-
- This may be different from {@code cloud.resource_id} if an alias is involved.
+ - Destination names could be constructed from templates. An example would be a destination
+ name involving a user name or product id. Although the destination name in this case is of high
+ cardinality, the underlying template is of low cardinality and can be effectively used for grouping
+ and aggregation.
*/
-static constexpr const char *kAwsLambdaInvokedArn = "aws.lambda.invoked_arn";
+static constexpr const char *kMessagingDestinationTemplate = "messaging.destination.template";
/**
- * The event_id
- * uniquely identifies the event.
+ * A boolean that is true if the message destination is temporary and might not exist anymore after
+ * messages are processed.
*/
-static constexpr const char *kCloudeventsEventId = "cloudevents.event_id";
+static constexpr const char *kMessagingDestinationTemporary = "messaging.destination.temporary";
/**
- * The source
- * identifies the context in which an event happened.
+ * A boolean that is true if the publish message destination is anonymous (could be unnamed or have
+ * auto-generated name).
*/
-static constexpr const char *kCloudeventsEventSource = "cloudevents.event_source";
+static constexpr const char *kMessagingDestinationPublishAnonymous =
+ "messaging.destination_publish.anonymous";
/**
- * The version of
- * the CloudEvents specification which the event uses.
+ * The name of the original destination the message was published to
+ *
+ * Notes:
+
- The name SHOULD uniquely identify a specific queue, topic, or other entity within the
+broker. If the broker doesn't have such notion, the original destination name SHOULD uniquely
+identify the broker.
*/
-static constexpr const char *kCloudeventsEventSpecVersion = "cloudevents.event_spec_version";
+static constexpr const char *kMessagingDestinationPublishName =
+ "messaging.destination_publish.name";
/**
- * The subject of
- * the event in the context of the event producer (identified by source).
+ * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not
+ * producers.
*/
-static constexpr const char *kCloudeventsEventSubject = "cloudevents.event_subject";
+static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
/**
- * The event_type
- * contains a value describing the type of event related to the originating occurrence.
+ * Partition the message is sent to.
*/
-static constexpr const char *kCloudeventsEventType = "cloudevents.event_type";
+static constexpr const char *kMessagingKafkaDestinationPartition =
+ "messaging.kafka.destination.partition";
/**
- * Parent-child Reference type
+ * Message keys in Kafka are used for grouping alike messages to ensure they're processed on the
+ same partition. They differ from {@code messaging.message.id} in that they're not unique. If the
+ key is {@code null}, the attribute MUST NOT be set.
*
* Notes:
-
- The causal relationship between a child Span and a parent Span.
+ - If the key type is not string, it's string representation has to be supplied for the
+ attribute. If the key has no unambiguous, canonical string form, don't include its value.
+
*/
-static constexpr const char *kOpentracingRefType = "opentracing.ref_type";
+static constexpr const char *kMessagingKafkaMessageKey = "messaging.kafka.message.key";
/**
- * The connection string used to connect to the database. It is recommended to remove embedded
- * credentials.
+ * The offset of a record in the corresponding Kafka partition.
*/
-static constexpr const char *kDbConnectionString = "db.connection_string";
+static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
/**
- * The fully-qualified class name of the Java Database Connectivity
- * (JDBC) driver used to connect.
+ * A boolean that is true if the message is a tombstone.
*/
-static constexpr const char *kDbJdbcDriverClassname = "db.jdbc.driver_classname";
+static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
/**
- * This attribute is used to report the name of the database being accessed. For commands that
- switch the database, this should be set to the target database (even if the command fails).
+ * The size of the message body in bytes.
*
* Notes:
-
- In some SQL databases, the database name to be used is called "schema name". In
- case there are multiple layers that could be considered for database name (e.g. Oracle instance
- name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema
- name).
+ - This can refer to both the compressed or uncompressed body size. If both sizes are known,
+the uncompressed body size should be used.
*/
-static constexpr const char *kDbName = "db.name";
+static constexpr const char *kMessagingMessageBodySize = "messaging.message.body.size";
/**
- * The name of the operation being executed, e.g. the MongoDB command
- name such as {@code findAndModify}, or the SQL keyword.
+ * The conversation ID identifying the conversation to which the message belongs, represented as a
+ * string. Sometimes called "Correlation ID".
+ */
+static constexpr const char *kMessagingMessageConversationId = "messaging.message.conversation_id";
+
+/**
+ * The size of the message body and metadata in bytes.
*
* Notes:
-
- When setting this to an SQL keyword, it is not recommended to attempt any client-side
- parsing of {@code db.statement} just to get this property, but it should be set if the operation
- name is provided by the library being instrumented. If the SQL statement has an ambiguous
- operation, or performs more than one operation, this value may be omitted.
+ - This can refer to both the compressed or uncompressed size. If both sizes are known, the
+uncompressed size should be used.
*/
-static constexpr const char *kDbOperation = "db.operation";
+static constexpr const char *kMessagingMessageEnvelopeSize = "messaging.message.envelope.size";
/**
- * The database statement being executed.
+ * A value used by the messaging system as an identifier for the message, represented as a string.
*/
-static constexpr const char *kDbStatement = "db.statement";
+static constexpr const char *kMessagingMessageId = "messaging.message.id";
/**
- * An identifier for the database management system (DBMS) product being used. See below for a list
- * of well-known identifiers.
+ * A string identifying the kind of messaging operation.
+ *
+ * Notes:
+
- If a custom value is used, it MUST be of low cardinality.
*/
-static constexpr const char *kDbSystem = "db.system";
+static constexpr const char *kMessagingOperation = "messaging.operation";
/**
- * Username for accessing the database.
+ * RabbitMQ message routing key.
*/
-static constexpr const char *kDbUser = "db.user";
+static constexpr const char *kMessagingRabbitmqDestinationRoutingKey =
+ "messaging.rabbitmq.destination.routing_key";
/**
- * The Microsoft SQL Server instance
- name connecting to. This name is used to determine the port of a named instance.
- *
- * Notes:
-
- If setting a {@code db.mssql.instance_name}, {@code server.port} is no longer required
- (but still recommended if non-standard).
+ * Name of the RocketMQ producer/consumer group that is handling the message. The client type is
+ * identified by the SpanKind.
*/
-static constexpr const char *kDbMssqlInstanceName = "db.mssql.instance_name";
+static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
/**
- * The consistency level of the query. Based on consistency values from CQL.
+ * Model of message consumption. This only applies to consumer spans.
*/
-static constexpr const char *kDbCassandraConsistencyLevel = "db.cassandra.consistency_level";
+static constexpr const char *kMessagingRocketmqConsumptionModel =
+ "messaging.rocketmq.consumption_model";
/**
- * The data center of the coordinating node for a query.
+ * The delay time level for delay message, which determines the message delay time.
*/
-static constexpr const char *kDbCassandraCoordinatorDc = "db.cassandra.coordinator.dc";
+static constexpr const char *kMessagingRocketmqMessageDelayTimeLevel =
+ "messaging.rocketmq.message.delay_time_level";
/**
- * The ID of the coordinating node for a query.
+ * The timestamp in milliseconds that the delay message is expected to be delivered to consumer.
*/
-static constexpr const char *kDbCassandraCoordinatorId = "db.cassandra.coordinator.id";
+static constexpr const char *kMessagingRocketmqMessageDeliveryTimestamp =
+ "messaging.rocketmq.message.delivery_timestamp";
/**
- * Whether or not the query is idempotent.
+ * It is essential for FIFO message. Messages that belong to the same message group are always
+ * processed one by one within the same consumer group.
*/
-static constexpr const char *kDbCassandraIdempotence = "db.cassandra.idempotence";
+static constexpr const char *kMessagingRocketmqMessageGroup = "messaging.rocketmq.message.group";
/**
- * The fetch size used for paging, i.e. how many rows will be returned at once.
+ * Key(s) of message, another way to mark message besides message id.
*/
-static constexpr const char *kDbCassandraPageSize = "db.cassandra.page_size";
+static constexpr const char *kMessagingRocketmqMessageKeys = "messaging.rocketmq.message.keys";
/**
- * The number of times a query was speculatively executed. Not set or {@code 0} if the query was not
- * executed speculatively.
+ * The secondary classifier of message besides topic.
*/
-static constexpr const char *kDbCassandraSpeculativeExecutionCount =
- "db.cassandra.speculative_execution_count";
+static constexpr const char *kMessagingRocketmqMessageTag = "messaging.rocketmq.message.tag";
/**
- * The name of the primary table that the operation is acting upon, including the keyspace name (if
- applicable).
- *
- * Notes:
-
- This mirrors the db.sql.table attribute but references cassandra rather than sql. It is
- not recommended to attempt any client-side parsing of {@code db.statement} just to get this
- property, but it should be set if it is provided by the library being instrumented. If the
- operation is acting upon an anonymous table, or more than one table, this value MUST NOT be
- set.
+ * Type of message.
*/
-static constexpr const char *kDbCassandraTable = "db.cassandra.table";
+static constexpr const char *kMessagingRocketmqMessageType = "messaging.rocketmq.message.type";
/**
- * The index of the database being accessed as used in the {@code SELECT} command, provided as an integer. To be
- * used instead of the generic {@code db.name} attribute.
+ * Namespace of RocketMQ resources, resources in different namespaces are individual.
*/
-static constexpr const char *kDbRedisDatabaseIndex = "db.redis.database_index";
+static constexpr const char *kMessagingRocketmqNamespace = "messaging.rocketmq.namespace";
/**
- * The collection being accessed within the database stated in {@code db.name}.
+ * A string identifying the messaging system.
*/
-static constexpr const char *kDbMongodbCollection = "db.mongodb.collection";
+static constexpr const char *kMessagingSystem = "messaging.system";
/**
- * Represents the identifier of an Elasticsearch cluster.
+ * The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.
*/
-static constexpr const char *kDbElasticsearchClusterName = "db.elasticsearch.cluster.name";
+static constexpr const char *kNetworkCarrierIcc = "network.carrier.icc";
/**
- * Represents the human-readable identifier of the node/instance to which a request was routed.
+ * The mobile carrier country code.
*/
-static constexpr const char *kDbElasticsearchNodeName = "db.elasticsearch.node.name";
+static constexpr const char *kNetworkCarrierMcc = "network.carrier.mcc";
/**
- * The name of the primary table that the operation is acting upon, including the database name (if
- applicable).
- *
- * Notes:
-
- It is not recommended to attempt any client-side parsing of {@code db.statement} just to
- get this property, but it should be set if it is provided by the library being instrumented. If the
- operation is acting upon an anonymous table, or more than one table, this value MUST NOT be
- set.
+ * The mobile carrier network code.
*/
-static constexpr const char *kDbSqlTable = "db.sql.table";
+static constexpr const char *kNetworkCarrierMnc = "network.carrier.mnc";
/**
- * Unique Cosmos client instance id.
+ * The name of the mobile carrier.
*/
-static constexpr const char *kDbCosmosdbClientId = "db.cosmosdb.client_id";
+static constexpr const char *kNetworkCarrierName = "network.carrier.name";
/**
- * Cosmos client connection mode.
+ * This describes more details regarding the connection.type. It may be the type of cell technology
+ * connection, but it could be used for describing details about a wifi connection.
*/
-static constexpr const char *kDbCosmosdbConnectionMode = "db.cosmosdb.connection_mode";
+static constexpr const char *kNetworkConnectionSubtype = "network.connection.subtype";
/**
- * Cosmos DB container name.
+ * The internet connection type.
*/
-static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
+static constexpr const char *kNetworkConnectionType = "network.connection.type";
/**
- * CosmosDB Operation Type.
+ * Local address of the network connection - IP address or Unix domain socket name.
*/
-static constexpr const char *kDbCosmosdbOperationType = "db.cosmosdb.operation_type";
+static constexpr const char *kNetworkLocalAddress = "network.local.address";
/**
- * RU consumed for that operation
+ * Local port number of the network connection.
*/
-static constexpr const char *kDbCosmosdbRequestCharge = "db.cosmosdb.request_charge";
+static constexpr const char *kNetworkLocalPort = "network.local.port";
/**
- * Request payload size in bytes
+ * Peer address of the network connection - IP address or Unix domain socket name.
*/
-static constexpr const char *kDbCosmosdbRequestContentLength = "db.cosmosdb.request_content_length";
+static constexpr const char *kNetworkPeerAddress = "network.peer.address";
/**
- * Cosmos DB status code.
+ * Peer port number of the network connection.
*/
-static constexpr const char *kDbCosmosdbStatusCode = "db.cosmosdb.status_code";
+static constexpr const char *kNetworkPeerPort = "network.peer.port";
/**
- * Cosmos DB sub status code.
+ * OSI application layer or non-OSI
+ equivalent.
+ *
+ * Notes:
+
- The value SHOULD be normalized to lowercase.
*/
-static constexpr const char *kDbCosmosdbSubStatusCode = "db.cosmosdb.sub_status_code";
+static constexpr const char *kNetworkProtocolName = "network.protocol.name";
/**
- * Name of the code, either "OK" or "ERROR". MUST NOT be set if the status code
- * is UNSET.
+ * Version of the protocol specified in {@code network.protocol.name}.
+ *
+ * Notes:
+
- {@code network.protocol.version} refers to the version of the protocol used and might be
+ different from the protocol client's version. If the HTTP client has a version of {@code 0.27.2},
+ but sends HTTP version {@code 1.1}, this attribute should be set to {@code 1.1}.
*/
-static constexpr const char *kOtelStatusCode = "otel.status_code";
+static constexpr const char *kNetworkProtocolVersion = "network.protocol.version";
/**
- * Description of the Status if it has a value, otherwise not set.
+ * OSI transport layer or inter-process communication
+method.
+ *
+ * Notes:
+
- The value SHOULD be normalized to lowercase.
- Consider always setting the
+transport when setting a port number, since a port number is ambiguous without knowing the
+transport. For example different processes could be listening on TCP port 12345 and UDP port
+12345.
*/
-static constexpr const char *kOtelStatusDescription = "otel.status_description";
+static constexpr const char *kNetworkTransport = "network.transport";
/**
- * The invocation ID of the current function invocation.
+ * OSI network layer or non-OSI equivalent.
+ *
+ * Notes:
+
- The value SHOULD be normalized to lowercase.
*/
-static constexpr const char *kFaasInvocationId = "faas.invocation_id";
+static constexpr const char *kNetworkType = "network.type";
/**
- * The name of the source on which the triggering operation was performed. For example, in Cloud
- * Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.
+ * The error codes of the Connect
+ * request. Error codes are always string values.
*/
-static constexpr const char *kFaasDocumentCollection = "faas.document.collection";
+static constexpr const char *kRpcConnectRpcErrorCode = "rpc.connect_rpc.error_code";
/**
- * The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the
- * name of the file, and in Cosmos DB the table name.
+ * The numeric status
+ * code of the gRPC request.
*/
-static constexpr const char *kFaasDocumentName = "faas.document.name";
+static constexpr const char *kRpcGrpcStatusCode = "rpc.grpc.status_code";
/**
- * Describes the type of the operation that was performed on the data.
+ * {@code error.code} property of response if it is an error response.
*/
-static constexpr const char *kFaasDocumentOperation = "faas.document.operation";
+static constexpr const char *kRpcJsonrpcErrorCode = "rpc.jsonrpc.error_code";
/**
- * A string containing the time when the data was accessed in the ISO 8601 format expressed in UTC.
+ * {@code error.message} property of response if it is an error response.
*/
-static constexpr const char *kFaasDocumentTime = "faas.document.time";
+static constexpr const char *kRpcJsonrpcErrorMessage = "rpc.jsonrpc.error_message";
/**
- * A string containing the schedule period as Cron
- * Expression.
+ * {@code id} property of request or response. Since protocol allows id to be int, string, {@code
+ * null} or missing (for notifications), value is expected to be cast to string for simplicity. Use
+ * empty string in case of {@code null} value. Omit entirely if this is a notification.
*/
-static constexpr const char *kFaasCron = "faas.cron";
+static constexpr const char *kRpcJsonrpcRequestId = "rpc.jsonrpc.request_id";
/**
- * A string containing the function invocation time in the ISO 8601 format expressed in UTC.
+ * Protocol version as in {@code jsonrpc} property of request/response. Since JSON-RPC 1.0 doesn't
+ * specify this, the value can be omitted.
*/
-static constexpr const char *kFaasTime = "faas.time";
+static constexpr const char *kRpcJsonrpcVersion = "rpc.jsonrpc.version";
/**
- * A boolean that is true if the serverless function is executed for the first time (aka
- * cold-start).
+ * The name of the (logical) method being called, must be equal to the $method part in the span
+ name.
+ *
+ * Notes:
+
- This is the logical name of the method from the RPC interface perspective, which can be
+ different from the name of any implementing method/function. The {@code code.function} attribute
+ may be used to store the latter (e.g., method actually executing the call on the server side, RPC
+ client stub method on the client side).
*/
-static constexpr const char *kFaasColdstart = "faas.coldstart";
+static constexpr const char *kRpcMethod = "rpc.method";
/**
- * The unique identifier of the feature flag.
+ * The full (logical) name of the service being called, including its package name, if applicable.
+ *
+ * Notes:
+
- This is the logical name of the service from the RPC interface perspective, which can be
+ different from the name of any implementing class. The {@code code.namespace} attribute may be used
+ to store the latter (despite the attribute name, it may include a class name; e.g., class with
+ method actually executing the call on the server side, RPC client stub class on the client
+ side).
*/
-static constexpr const char *kFeatureFlagKey = "feature_flag.key";
+static constexpr const char *kRpcService = "rpc.service";
/**
- * The name of the service provider that performs the flag evaluation.
+ * A string identifying the remoting system. See below for a list of well-known identifiers.
*/
-static constexpr const char *kFeatureFlagProviderName = "feature_flag.provider_name";
+static constexpr const char *kRpcSystem = "rpc.system";
/**
- * SHOULD be a semantic identifier for a value. If one is unavailable, a stringified version of the
-value can be used.
- *
- * Notes:
-
- A semantic identifier, commonly referred to as a variant, provides a means
-for referring to a value without including the value itself. This can
-provide additional context for understanding the meaning behind a value.
-For example, the variant {@code red} maybe be used for the value {@code #c05543}.
- A
-stringified version of the value can be used in situations where a semantic identifier is
-unavailable. String representation of the value should be determined by the implementer.
+ * Current "managed" thread ID (as opposed to OS thread ID).
*/
-static constexpr const char *kFeatureFlagVariant = "feature_flag.variant";
+static constexpr const char *kThreadId = "thread.id";
/**
- * The AWS request ID as returned in the response headers {@code x-amz-request-id} or {@code
- * x-amz-requestid}.
+ * Current thread name.
*/
-static constexpr const char *kAwsRequestId = "aws.request_id";
+static constexpr const char *kThreadName = "thread.name";
/**
- * The value of the {@code AttributesToGet} request parameter.
+ * The URI fragment component
*/
-static constexpr const char *kAwsDynamodbAttributesToGet = "aws.dynamodb.attributes_to_get";
+static constexpr const char *kUrlFragment = "url.fragment";
/**
- * The value of the {@code ConsistentRead} request parameter.
+ * Absolute URL describing a network resource according to RFC3986
+ *
+ * Notes:
+
- For network calls, URL usually has {@code scheme://host[:port][path][?query][#fragment]}
+format, where the fragment is not transmitted over HTTP, but if it is known, it SHOULD be included
+nevertheless.
+{@code url.full} MUST NOT contain credentials passed via URL in form of {@code
+https://username:password@www.example.com/}. In such case username and password SHOULD be redacted
+and attribute's value SHOULD be {@code https://REDACTED:REDACTED@www.example.com/}.
+{@code url.full} SHOULD capture the absolute URL when it is available (or can be reconstructed) and
+SHOULD NOT be validated or modified except for sanitizing purposes.
*/
-static constexpr const char *kAwsDynamodbConsistentRead = "aws.dynamodb.consistent_read";
+static constexpr const char *kUrlFull = "url.full";
/**
- * The JSON-serialized value of each item in the {@code ConsumedCapacity} response field.
+ * The URI path component
*/
-static constexpr const char *kAwsDynamodbConsumedCapacity = "aws.dynamodb.consumed_capacity";
+static constexpr const char *kUrlPath = "url.path";
/**
- * The value of the {@code IndexName} request parameter.
+ * The URI query component
+ *
+ * Notes:
+
- Sensitive content provided in query string SHOULD be scrubbed when instrumentations can
+ identify it.
*/
-static constexpr const char *kAwsDynamodbIndexName = "aws.dynamodb.index_name";
+static constexpr const char *kUrlQuery = "url.query";
/**
- * The JSON-serialized value of the {@code ItemCollectionMetrics} response field.
+ * The URI scheme component
+ * identifying the used protocol.
*/
-static constexpr const char *kAwsDynamodbItemCollectionMetrics =
- "aws.dynamodb.item_collection_metrics";
+static constexpr const char *kUrlScheme = "url.scheme";
/**
- * The value of the {@code Limit} request parameter.
+ * Value of the HTTP
+ * User-Agent header sent by the client.
*/
-static constexpr const char *kAwsDynamodbLimit = "aws.dynamodb.limit";
+static constexpr const char *kUserAgentOriginal = "user_agent.original";
/**
- * The value of the {@code ProjectionExpression} request parameter.
+ * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain
+ socket name.
+ *
+ * Notes:
+
- When observed from the client side, and when communicating through an intermediary,
+ {@code server.address} SHOULD represent the server address behind any intermediaries, for example
+ proxies, if it's available.
*/
-static constexpr const char *kAwsDynamodbProjection = "aws.dynamodb.projection";
+static constexpr const char *kServerAddress = "server.address";
/**
- * The value of the {@code ProvisionedThroughput.ReadCapacityUnits} request parameter.
+ * Server port number.
+ *
+ * Notes:
+
- When observed from the client side, and when communicating through an intermediary,
+ {@code server.port} SHOULD represent the server port behind any intermediaries, for example
+ proxies, if it's available.
*/
-static constexpr const char *kAwsDynamodbProvisionedReadCapacity =
- "aws.dynamodb.provisioned_read_capacity";
+static constexpr const char *kServerPort = "server.port";
/**
- * The value of the {@code ProvisionedThroughput.WriteCapacityUnits} request parameter.
+ * A unique id to identify a session.
*/
-static constexpr const char *kAwsDynamodbProvisionedWriteCapacity =
- "aws.dynamodb.provisioned_write_capacity";
+static constexpr const char *kSessionId = "session.id";
/**
- * The value of the {@code Select} request parameter.
+ * The previous {@code session.id} for this user, when known.
*/
-static constexpr const char *kAwsDynamodbSelect = "aws.dynamodb.select";
+static constexpr const char *kSessionPreviousId = "session.previous_id";
/**
- * The keys in the {@code RequestItems} object field.
+ * Source address - domain name if available without reverse DNS lookup; otherwise, IP address or
+ Unix domain socket name.
+ *
+ * Notes:
+
- When observed from the destination side, and when communicating through an intermediary,
+ {@code source.address} SHOULD represent the source address behind any intermediaries, for example
+ proxies, if it's available.
*/
-static constexpr const char *kAwsDynamodbTableNames = "aws.dynamodb.table_names";
+static constexpr const char *kSourceAddress = "source.address";
/**
- * The JSON-serialized value of each item of the {@code GlobalSecondaryIndexes} request field
+ * Source port number
*/
-static constexpr const char *kAwsDynamodbGlobalSecondaryIndexes =
- "aws.dynamodb.global_secondary_indexes";
+static constexpr const char *kSourcePort = "source.port";
/**
- * The JSON-serialized value of each item of the {@code LocalSecondaryIndexes} request field.
+ * The full invoked ARN as provided on the {@code Context} passed to the function ({@code
+ Lambda-Runtime-Invoked-Function-Arn} header on the {@code /runtime/invocation/next} applicable).
+ *
+ * Notes:
+
- This may be different from {@code cloud.resource_id} if an alias is involved.
*/
-static constexpr const char *kAwsDynamodbLocalSecondaryIndexes =
- "aws.dynamodb.local_secondary_indexes";
+static constexpr const char *kAwsLambdaInvokedArn = "aws.lambda.invoked_arn";
/**
- * The value of the {@code ExclusiveStartTableName} request parameter.
+ * The event_id
+ * uniquely identifies the event.
*/
-static constexpr const char *kAwsDynamodbExclusiveStartTable = "aws.dynamodb.exclusive_start_table";
+static constexpr const char *kCloudeventsEventId = "cloudevents.event_id";
/**
- * The the number of items in the {@code TableNames} response parameter.
+ * The source
+ * identifies the context in which an event happened.
*/
-static constexpr const char *kAwsDynamodbTableCount = "aws.dynamodb.table_count";
+static constexpr const char *kCloudeventsEventSource = "cloudevents.event_source";
/**
- * The value of the {@code ScanIndexForward} request parameter.
+ * The version of
+ * the CloudEvents specification which the event uses.
*/
-static constexpr const char *kAwsDynamodbScanForward = "aws.dynamodb.scan_forward";
+static constexpr const char *kCloudeventsEventSpecVersion = "cloudevents.event_spec_version";
/**
- * The value of the {@code Count} response parameter.
+ * The subject of
+ * the event in the context of the event producer (identified by source).
*/
-static constexpr const char *kAwsDynamodbCount = "aws.dynamodb.count";
+static constexpr const char *kCloudeventsEventSubject = "cloudevents.event_subject";
/**
- * The value of the {@code ScannedCount} response parameter.
+ * The event_type
+ * contains a value describing the type of event related to the originating occurrence.
*/
-static constexpr const char *kAwsDynamodbScannedCount = "aws.dynamodb.scanned_count";
+static constexpr const char *kCloudeventsEventType = "cloudevents.event_type";
/**
- * The value of the {@code Segment} request parameter.
+ * Parent-child Reference type
+ *
+ * Notes:
+
- The causal relationship between a child Span and a parent Span.
*/
-static constexpr const char *kAwsDynamodbSegment = "aws.dynamodb.segment";
+static constexpr const char *kOpentracingRefType = "opentracing.ref_type";
/**
- * The value of the {@code TotalSegments} request parameter.
+ * The connection string used to connect to the database. It is recommended to remove embedded
+ * credentials.
*/
-static constexpr const char *kAwsDynamodbTotalSegments = "aws.dynamodb.total_segments";
+static constexpr const char *kDbConnectionString = "db.connection_string";
/**
- * The JSON-serialized value of each item in the {@code AttributeDefinitions} request field.
+ * The fully-qualified class name of the Java Database Connectivity
+ * (JDBC) driver used to connect.
*/
-static constexpr const char *kAwsDynamodbAttributeDefinitions =
- "aws.dynamodb.attribute_definitions";
+static constexpr const char *kDbJdbcDriverClassname = "db.jdbc.driver_classname";
/**
- * The JSON-serialized value of each item in the the {@code GlobalSecondaryIndexUpdates} request
- * field.
+ * This attribute is used to report the name of the database being accessed. For commands that
+ switch the database, this should be set to the target database (even if the command fails).
+ *
+ * Notes:
+
- In some SQL databases, the database name to be used is called "schema name". In
+ case there are multiple layers that could be considered for database name (e.g. Oracle instance
+ name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema
+ name).
*/
-static constexpr const char *kAwsDynamodbGlobalSecondaryIndexUpdates =
- "aws.dynamodb.global_secondary_index_updates";
+static constexpr const char *kDbName = "db.name";
/**
- * The S3 bucket name the request refers to. Corresponds to the {@code --bucket} parameter of the S3 API operations.
+ * The name of the operation being executed, e.g. the MongoDB command
+ name such as {@code findAndModify}, or the SQL keyword.
*
* Notes:
-
- The {@code bucket} attribute is applicable to all S3 operations that reference a bucket,
-i.e. that require the bucket name as a mandatory parameter. This applies to almost all S3 operations
-except {@code list-buckets}.
+ - When setting this to an SQL keyword, it is not recommended to attempt any client-side
+ parsing of {@code db.statement} just to get this property, but it should be set if the operation
+ name is provided by the library being instrumented. If the SQL statement has an ambiguous
+ operation, or performs more than one operation, this value may be omitted.
*/
-static constexpr const char *kAwsS3Bucket = "aws.s3.bucket";
+static constexpr const char *kDbOperation = "db.operation";
/**
- * The source object (in the form {@code bucket}/{@code key}) for the copy operation.
- *
- * Notes:
-
+ * The database statement being executed.
*/
-static constexpr const char *kAwsS3CopySource = "aws.s3.copy_source";
+static constexpr const char *kDbStatement = "db.statement";
/**
- * The delete request container that specifies the objects to be deleted.
+ * An identifier for the database management system (DBMS) product being used. See below for a list
+ * of well-known identifiers.
+ */
+static constexpr const char *kDbSystem = "db.system";
+
+/**
+ * Username for accessing the database.
+ */
+static constexpr const char *kDbUser = "db.user";
+
+/**
+ * The Microsoft SQL Server instance
+ name connecting to. This name is used to determine the port of a named instance.
*
* Notes:
-
+ - If setting a {@code db.mssql.instance_name}, {@code server.port} is no longer required
+ (but still recommended if non-standard).
*/
-static constexpr const char *kAwsS3Delete = "aws.s3.delete";
+static constexpr const char *kDbMssqlInstanceName = "db.mssql.instance_name";
/**
- * The S3 object key the request refers to. Corresponds to the {@code --key} parameter of the S3 API operations.
+ * The consistency level of the query. Based on consistency values from CQL.
+ */
+static constexpr const char *kDbCassandraConsistencyLevel = "db.cassandra.consistency_level";
+
+/**
+ * The data center of the coordinating node for a query.
+ */
+static constexpr const char *kDbCassandraCoordinatorDc = "db.cassandra.coordinator.dc";
+
+/**
+ * The ID of the coordinating node for a query.
+ */
+static constexpr const char *kDbCassandraCoordinatorId = "db.cassandra.coordinator.id";
+
+/**
+ * Whether or not the query is idempotent.
+ */
+static constexpr const char *kDbCassandraIdempotence = "db.cassandra.idempotence";
+
+/**
+ * The fetch size used for paging, i.e. how many rows will be returned at once.
+ */
+static constexpr const char *kDbCassandraPageSize = "db.cassandra.page_size";
+
+/**
+ * The number of times a query was speculatively executed. Not set or {@code 0} if the query was not
+ * executed speculatively.
+ */
+static constexpr const char *kDbCassandraSpeculativeExecutionCount =
+ "db.cassandra.speculative_execution_count";
+
+/**
+ * The name of the primary table that the operation is acting upon, including the keyspace name (if
+ applicable).
*
* Notes:
-
+ - This mirrors the db.sql.table attribute but references cassandra rather than sql. It is
+ not recommended to attempt any client-side parsing of {@code db.statement} just to get this
+ property, but it should be set if it is provided by the library being instrumented. If the
+ operation is acting upon an anonymous table, or more than one table, this value MUST NOT be
+ set.
*/
-static constexpr const char *kAwsS3Key = "aws.s3.key";
+static constexpr const char *kDbCassandraTable = "db.cassandra.table";
/**
- * The part number of the part being uploaded in a multipart-upload operation. This is a positive
-integer between 1 and 10,000.
+ * The index of the database being accessed as used in the {@code SELECT} command, provided as an integer. To be
+ * used instead of the generic {@code db.name} attribute.
+ */
+static constexpr const char *kDbRedisDatabaseIndex = "db.redis.database_index";
+
+/**
+ * The collection being accessed within the database stated in {@code db.name}.
+ */
+static constexpr const char *kDbMongodbCollection = "db.mongodb.collection";
+
+/**
+ * Represents the identifier of an Elasticsearch cluster.
+ */
+static constexpr const char *kDbElasticsearchClusterName = "db.elasticsearch.cluster.name";
+
+/**
+ * Represents the human-readable identifier of the node/instance to which a request was routed.
+ */
+static constexpr const char *kDbElasticsearchNodeName = "db.elasticsearch.node.name";
+
+/**
+ * The name of the primary table that the operation is acting upon, including the database name (if
+ applicable).
*
* Notes:
-
+ - It is not recommended to attempt any client-side parsing of {@code db.statement} just to
+ get this property, but it should be set if it is provided by the library being instrumented. If the
+ operation is acting upon an anonymous table, or more than one table, this value MUST NOT be
+ set.
+ */
+static constexpr const char *kDbSqlTable = "db.sql.table";
+
+/**
+ * Unique Cosmos client instance id.
+ */
+static constexpr const char *kDbCosmosdbClientId = "db.cosmosdb.client_id";
+
+/**
+ * Cosmos client connection mode.
+ */
+static constexpr const char *kDbCosmosdbConnectionMode = "db.cosmosdb.connection_mode";
+
+/**
+ * Cosmos DB container name.
+ */
+static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
+
+/**
+ * CosmosDB Operation Type.
+ */
+static constexpr const char *kDbCosmosdbOperationType = "db.cosmosdb.operation_type";
+
+/**
+ * RU consumed for that operation
+ */
+static constexpr const char *kDbCosmosdbRequestCharge = "db.cosmosdb.request_charge";
+
+/**
+ * Request payload size in bytes
+ */
+static constexpr const char *kDbCosmosdbRequestContentLength = "db.cosmosdb.request_content_length";
+
+/**
+ * Cosmos DB status code.
+ */
+static constexpr const char *kDbCosmosdbStatusCode = "db.cosmosdb.status_code";
+
+/**
+ * Cosmos DB sub status code.
+ */
+static constexpr const char *kDbCosmosdbSubStatusCode = "db.cosmosdb.sub_status_code";
+
+/**
+ * Name of the code, either "OK" or "ERROR". MUST NOT be set if the status code
+ * is UNSET.
+ */
+static constexpr const char *kOtelStatusCode = "otel.status_code";
+
+/**
+ * Description of the Status if it has a value, otherwise not set.
*/
-static constexpr const char *kAwsS3PartNumber = "aws.s3.part_number";
+static constexpr const char *kOtelStatusDescription = "otel.status_description";
/**
- * Upload ID that identifies the multipart upload.
- *
- * Notes:
-
+ * The invocation ID of the current function invocation.
*/
-static constexpr const char *kAwsS3UploadId = "aws.s3.upload_id";
+static constexpr const char *kFaasInvocationId = "faas.invocation_id";
/**
- * The GraphQL document being executed.
- *
- * Notes:
-
- The value may be sanitized to exclude sensitive information.
+ * The name of the source on which the triggering operation was performed. For example, in Cloud
+ * Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.
*/
-static constexpr const char *kGraphqlDocument = "graphql.document";
+static constexpr const char *kFaasDocumentCollection = "faas.document.collection";
/**
- * The name of the operation being executed.
+ * The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the
+ * name of the file, and in Cosmos DB the table name.
*/
-static constexpr const char *kGraphqlOperationName = "graphql.operation.name";
+static constexpr const char *kFaasDocumentName = "faas.document.name";
/**
- * The type of the operation being executed.
+ * Describes the type of the operation that was performed on the data.
*/
-static constexpr const char *kGraphqlOperationType = "graphql.operation.type";
+static constexpr const char *kFaasDocumentOperation = "faas.document.operation";
/**
- * The size of the message body in bytes.
- *
- * Notes:
-
- This can refer to both the compressed or uncompressed body size. If both sizes are known,
-the uncompressed body size should be used.
+ * A string containing the time when the data was accessed in the ISO 8601 format expressed in UTC.
*/
-static constexpr const char *kMessagingMessageBodySize = "messaging.message.body.size";
+static constexpr const char *kFaasDocumentTime = "faas.document.time";
/**
- * The conversation ID identifying the conversation to which the
- * message belongs, represented as a string. Sometimes called "Correlation ID".
+ * A string containing the schedule period as Cron
+ * Expression.
*/
-static constexpr const char *kMessagingMessageConversationId = "messaging.message.conversation_id";
+static constexpr const char *kFaasCron = "faas.cron";
/**
- * The size of the message body and metadata in bytes.
- *
- * Notes:
-
- This can refer to both the compressed or uncompressed size. If both sizes are known, the
-uncompressed size should be used.
+ * A string containing the function invocation time in the ISO 8601 format expressed in UTC.
*/
-static constexpr const char *kMessagingMessageEnvelopeSize = "messaging.message.envelope.size";
+static constexpr const char *kFaasTime = "faas.time";
/**
- * A value used by the messaging system as an identifier for the message, represented as a string.
+ * A boolean that is true if the serverless function is executed for the first time (aka
+ * cold-start).
*/
-static constexpr const char *kMessagingMessageId = "messaging.message.id";
+static constexpr const char *kFaasColdstart = "faas.coldstart";
/**
- * A boolean that is true if the message destination is anonymous (could be unnamed or have
- * auto-generated name).
+ * The unique identifier of the feature flag.
*/
-static constexpr const char *kMessagingDestinationAnonymous = "messaging.destination.anonymous";
+static constexpr const char *kFeatureFlagKey = "feature_flag.key";
/**
- * The message destination name
- *
- * Notes:
-
- Destination name SHOULD uniquely identify a specific queue, topic or other entity within
-the broker. If the broker does not have such notion, the destination name SHOULD uniquely identify
-the broker.
+ * The name of the service provider that performs the flag evaluation.
*/
-static constexpr const char *kMessagingDestinationName = "messaging.destination.name";
+static constexpr const char *kFeatureFlagProviderName = "feature_flag.provider_name";
/**
- * Low cardinality representation of the messaging destination name
+ * SHOULD be a semantic identifier for a value. If one is unavailable, a stringified version of the
+value can be used.
*
* Notes:
-
- Destination names could be constructed from templates. An example would be a destination
- name involving a user name or product id. Although the destination name in this case is of high
- cardinality, the underlying template is of low cardinality and can be effectively used for grouping
- and aggregation.
+ - A semantic identifier, commonly referred to as a variant, provides a means
+for referring to a value without including the value itself. This can
+provide additional context for understanding the meaning behind a value.
+For example, the variant {@code red} maybe be used for the value {@code #c05543}.
- A
+stringified version of the value can be used in situations where a semantic identifier is
+unavailable. String representation of the value should be determined by the implementer.
*/
-static constexpr const char *kMessagingDestinationTemplate = "messaging.destination.template";
+static constexpr const char *kFeatureFlagVariant = "feature_flag.variant";
/**
- * A boolean that is true if the message destination is temporary and might not exist anymore after
- * messages are processed.
+ * The AWS request ID as returned in the response headers {@code x-amz-request-id} or {@code
+ * x-amz-requestid}.
*/
-static constexpr const char *kMessagingDestinationTemporary = "messaging.destination.temporary";
+static constexpr const char *kAwsRequestId = "aws.request_id";
/**
- * A boolean that is true if the publish message destination is anonymous (could be unnamed or have
- * auto-generated name).
+ * The value of the {@code AttributesToGet} request parameter.
*/
-static constexpr const char *kMessagingDestinationPublishAnonymous =
- "messaging.destination_publish.anonymous";
+static constexpr const char *kAwsDynamodbAttributesToGet = "aws.dynamodb.attributes_to_get";
/**
- * The name of the original destination the message was published to
- *
- * Notes:
-
- The name SHOULD uniquely identify a specific queue, topic, or other entity within the
-broker. If the broker does not have such notion, the original destination name SHOULD uniquely
-identify the broker.
+ * The value of the {@code ConsistentRead} request parameter.
*/
-static constexpr const char *kMessagingDestinationPublishName =
- "messaging.destination_publish.name";
+static constexpr const char *kAwsDynamodbConsistentRead = "aws.dynamodb.consistent_read";
/**
- * The number of messages sent, received, or processed in the scope of the batching operation.
- *
- * Notes:
-
- Instrumentations SHOULD NOT set {@code messaging.batch.message_count} on spans that
- operate with a single message. When a messaging client library supports both batch and
- single-message API for the same operation, instrumentations SHOULD use {@code
- messaging.batch.message_count} for batching APIs and SHOULD NOT use it for single-message
- APIs.
+ * The JSON-serialized value of each item in the {@code ConsumedCapacity} response field.
*/
-static constexpr const char *kMessagingBatchMessageCount = "messaging.batch.message_count";
+static constexpr const char *kAwsDynamodbConsumedCapacity = "aws.dynamodb.consumed_capacity";
/**
- * A unique identifier for the client that consumes or produces a message.
+ * The value of the {@code IndexName} request parameter.
*/
-static constexpr const char *kMessagingClientId = "messaging.client_id";
+static constexpr const char *kAwsDynamodbIndexName = "aws.dynamodb.index_name";
/**
- * A string identifying the kind of messaging operation as defined in the Operation names section above.
- *
- * Notes:
-
- If a custom value is used, it MUST be of low cardinality.
+ * The JSON-serialized value of the {@code ItemCollectionMetrics} response field.
*/
-static constexpr const char *kMessagingOperation = "messaging.operation";
+static constexpr const char *kAwsDynamodbItemCollectionMetrics =
+ "aws.dynamodb.item_collection_metrics";
/**
- * A string identifying the messaging system.
+ * The value of the {@code Limit} request parameter.
*/
-static constexpr const char *kMessagingSystem = "messaging.system";
+static constexpr const char *kAwsDynamodbLimit = "aws.dynamodb.limit";
/**
- * RabbitMQ message routing key.
+ * The value of the {@code ProjectionExpression} request parameter.
*/
-static constexpr const char *kMessagingRabbitmqDestinationRoutingKey =
- "messaging.rabbitmq.destination.routing_key";
+static constexpr const char *kAwsDynamodbProjection = "aws.dynamodb.projection";
/**
- * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not
- * producers.
+ * The value of the {@code ProvisionedThroughput.ReadCapacityUnits} request parameter.
*/
-static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
+static constexpr const char *kAwsDynamodbProvisionedReadCapacity =
+ "aws.dynamodb.provisioned_read_capacity";
/**
- * Partition the message is sent to.
+ * The value of the {@code ProvisionedThroughput.WriteCapacityUnits} request parameter.
*/
-static constexpr const char *kMessagingKafkaDestinationPartition =
- "messaging.kafka.destination.partition";
+static constexpr const char *kAwsDynamodbProvisionedWriteCapacity =
+ "aws.dynamodb.provisioned_write_capacity";
/**
- * Message keys in Kafka are used for grouping alike messages to ensure they're processed on the
- same partition. They differ from {@code messaging.message.id} in that they're not unique. If the
- key is {@code null}, the attribute MUST NOT be set.
- *
- * Notes:
-
- If the key type is not string, it's string representation has to be supplied for the
- attribute. If the key has no unambiguous, canonical string form, don't include its value.
-
+ * The value of the {@code Select} request parameter.
*/
-static constexpr const char *kMessagingKafkaMessageKey = "messaging.kafka.message.key";
+static constexpr const char *kAwsDynamodbSelect = "aws.dynamodb.select";
/**
- * The offset of a record in the corresponding Kafka partition.
+ * The keys in the {@code RequestItems} object field.
*/
-static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+static constexpr const char *kAwsDynamodbTableNames = "aws.dynamodb.table_names";
/**
- * A boolean that is true if the message is a tombstone.
+ * The JSON-serialized value of each item of the {@code GlobalSecondaryIndexes} request field
*/
-static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
+static constexpr const char *kAwsDynamodbGlobalSecondaryIndexes =
+ "aws.dynamodb.global_secondary_indexes";
/**
- * Name of the RocketMQ producer/consumer group that is handling the message. The client type is
- * identified by the SpanKind.
+ * The JSON-serialized value of each item of the {@code LocalSecondaryIndexes} request field.
*/
-static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
+static constexpr const char *kAwsDynamodbLocalSecondaryIndexes =
+ "aws.dynamodb.local_secondary_indexes";
/**
- * Model of message consumption. This only applies to consumer spans.
+ * The value of the {@code ExclusiveStartTableName} request parameter.
*/
-static constexpr const char *kMessagingRocketmqConsumptionModel =
- "messaging.rocketmq.consumption_model";
+static constexpr const char *kAwsDynamodbExclusiveStartTable = "aws.dynamodb.exclusive_start_table";
/**
- * The delay time level for delay message, which determines the message delay time.
+ * The the number of items in the {@code TableNames} response parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageDelayTimeLevel =
- "messaging.rocketmq.message.delay_time_level";
+static constexpr const char *kAwsDynamodbTableCount = "aws.dynamodb.table_count";
/**
- * The timestamp in milliseconds that the delay message is expected to be delivered to consumer.
+ * The value of the {@code ScanIndexForward} request parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageDeliveryTimestamp =
- "messaging.rocketmq.message.delivery_timestamp";
+static constexpr const char *kAwsDynamodbScanForward = "aws.dynamodb.scan_forward";
/**
- * It is essential for FIFO message. Messages that belong to the same message group are always
- * processed one by one within the same consumer group.
+ * The value of the {@code Count} response parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageGroup = "messaging.rocketmq.message.group";
+static constexpr const char *kAwsDynamodbCount = "aws.dynamodb.count";
/**
- * Key(s) of message, another way to mark message besides message id.
+ * The value of the {@code ScannedCount} response parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageKeys = "messaging.rocketmq.message.keys";
+static constexpr const char *kAwsDynamodbScannedCount = "aws.dynamodb.scanned_count";
/**
- * The secondary classifier of message besides topic.
+ * The value of the {@code Segment} request parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageTag = "messaging.rocketmq.message.tag";
+static constexpr const char *kAwsDynamodbSegment = "aws.dynamodb.segment";
/**
- * Type of message.
+ * The value of the {@code TotalSegments} request parameter.
*/
-static constexpr const char *kMessagingRocketmqMessageType = "messaging.rocketmq.message.type";
+static constexpr const char *kAwsDynamodbTotalSegments = "aws.dynamodb.total_segments";
/**
- * Namespace of RocketMQ resources, resources in different namespaces are individual.
+ * The JSON-serialized value of each item in the {@code AttributeDefinitions} request field.
*/
-static constexpr const char *kMessagingRocketmqNamespace = "messaging.rocketmq.namespace";
+static constexpr const char *kAwsDynamodbAttributeDefinitions =
+ "aws.dynamodb.attribute_definitions";
/**
- * The name of the (logical) method being called, must be equal to the $method part in the span
- name.
+ * The JSON-serialized value of each item in the the {@code GlobalSecondaryIndexUpdates} request
+ * field.
+ */
+static constexpr const char *kAwsDynamodbGlobalSecondaryIndexUpdates =
+ "aws.dynamodb.global_secondary_index_updates";
+
+/**
+ * The S3 bucket name the request refers to. Corresponds to the {@code --bucket} parameter of the S3 API operations.
*
* Notes:
-
- This is the logical name of the method from the RPC interface perspective, which can be
- different from the name of any implementing method/function. The {@code code.function} attribute
- may be used to store the latter (e.g., method actually executing the call on the server side, RPC
- client stub method on the client side).
+ - The {@code bucket} attribute is applicable to all S3 operations that reference a bucket,
+i.e. that require the bucket name as a mandatory parameter. This applies to almost all S3 operations
+except {@code list-buckets}.
+ */
+static constexpr const char *kAwsS3Bucket = "aws.s3.bucket";
+
+/**
+ * The source object (in the form {@code bucket}/{@code key}) for the copy operation.
+ *
+ * Notes:
+
*/
-static constexpr const char *kRpcMethod = "rpc.method";
+static constexpr const char *kAwsS3CopySource = "aws.s3.copy_source";
/**
- * The full (logical) name of the service being called, including its package name, if applicable.
+ * The delete request container that specifies the objects to be deleted.
*
* Notes:
-
- This is the logical name of the service from the RPC interface perspective, which can be
- different from the name of any implementing class. The {@code code.namespace} attribute may be used
- to store the latter (despite the attribute name, it may include a class name; e.g., class with
- method actually executing the call on the server side, RPC client stub class on the client
- side).
+
*/
-static constexpr const char *kRpcService = "rpc.service";
+static constexpr const char *kAwsS3Delete = "aws.s3.delete";
/**
- * A string identifying the remoting system. See below for a list of well-known identifiers.
+ * The S3 object key the request refers to. Corresponds to the {@code --key} parameter of the S3 API operations.
+ *
+ * Notes:
+
*/
-static constexpr const char *kRpcSystem = "rpc.system";
+static constexpr const char *kAwsS3Key = "aws.s3.key";
/**
- * The numeric status
- * code of the gRPC request.
+ * The part number of the part being uploaded in a multipart-upload operation. This is a positive
+integer between 1 and 10,000.
+ *
+ * Notes:
+
*/
-static constexpr const char *kRpcGrpcStatusCode = "rpc.grpc.status_code";
+static constexpr const char *kAwsS3PartNumber = "aws.s3.part_number";
/**
- * {@code error.code} property of response if it is an error response.
+ * Upload ID that identifies the multipart upload.
+ *
+ * Notes:
+
*/
-static constexpr const char *kRpcJsonrpcErrorCode = "rpc.jsonrpc.error_code";
+static constexpr const char *kAwsS3UploadId = "aws.s3.upload_id";
/**
- * {@code error.message} property of response if it is an error response.
+ * The GraphQL document being executed.
+ *
+ * Notes:
+
- The value may be sanitized to exclude sensitive information.
*/
-static constexpr const char *kRpcJsonrpcErrorMessage = "rpc.jsonrpc.error_message";
+static constexpr const char *kGraphqlDocument = "graphql.document";
/**
- * {@code id} property of request or response. Since protocol allows id to be int, string, {@code
- * null} or missing (for notifications), value is expected to be cast to string for simplicity. Use
- * empty string in case of {@code null} value. Omit entirely if this is a notification.
+ * The name of the operation being executed.
*/
-static constexpr const char *kRpcJsonrpcRequestId = "rpc.jsonrpc.request_id";
+static constexpr const char *kGraphqlOperationName = "graphql.operation.name";
/**
- * Protocol version as in {@code jsonrpc} property of request/response. Since JSON-RPC 1.0 does not
- * specify this, the value can be omitted.
+ * The type of the operation being executed.
*/
-static constexpr const char *kRpcJsonrpcVersion = "rpc.jsonrpc.version";
+static constexpr const char *kGraphqlOperationType = "graphql.operation.type";
/**
* Compressed size of the message in bytes.
@@ -1590,12 +1664,6 @@ static constexpr const char *kMessageType = "message.type";
*/
static constexpr const char *kMessageUncompressedSize = "message.uncompressed_size";
-/**
- * The error codes of the Connect
- * request. Error codes are always string values.
- */
-static constexpr const char *kRpcConnectRpcErrorCode = "rpc.connect_rpc.error_code";
-
/**
* SHOULD be set to true if the exception event is recorded at a point where it is known that the
exception is escaping the scope of the span.
@@ -1615,85 +1683,10 @@ recorded at a time where it was not clear whether the exception will escape.URI fragment component
- */
-static constexpr const char *kUrlFragment = "url.fragment";
-
-/**
- * Absolute URL describing a network resource according to RFC3986
- *
- * Notes:
-
- For network calls, URL usually has {@code scheme://host[:port][path][?query][#fragment]}
-format, where the fragment is not transmitted over HTTP, but if it is known, it should be included
-nevertheless.
-{@code url.full} MUST NOT contain credentials passed via URL in form of {@code
-https://username:password@www.example.com/}. In such case username and password should be redacted
-and attribute's value should be {@code https://REDACTED:REDACTED@www.example.com/}.
-{@code url.full} SHOULD capture the absolute URL when it is available (or can be reconstructed) and
-SHOULD NOT be validated or modified except for sanitizing purposes.
- */
-static constexpr const char *kUrlFull = "url.full";
-
-/**
- * The URI path component
- *
- * Notes:
-
- When missing, the value is assumed to be {@code /}
- */
-static constexpr const char *kUrlPath = "url.path";
-
-/**
- * The URI query component
- *
- * Notes:
-
- Sensitive content provided in query string SHOULD be scrubbed when instrumentations can
- identify it.
- */
-static constexpr const char *kUrlQuery = "url.query";
-
-/**
- * The URI scheme component
- * identifying the used protocol.
- */
-static constexpr const char *kUrlScheme = "url.scheme";
-
-/**
- * Value of the HTTP
- * User-Agent header sent by the client.
- */
-static constexpr const char *kUserAgentOriginal = "user_agent.original";
-
// Enum definitions
-namespace NetSockFamilyValues
-{
-/** IPv4 address. */
-static constexpr const char *kInet = "inet";
-/** IPv6 address. */
-static constexpr const char *kInet6 = "inet6";
-/** Unix domain socket path. */
-static constexpr const char *kUnix = "unix";
-} // namespace NetSockFamilyValues
-
-namespace NetTransportValues
-{
-/** ip_tcp. */
-static constexpr const char *kIpTcp = "ip_tcp";
-/** ip_udp. */
-static constexpr const char *kIpUdp = "ip_udp";
-/** Named or anonymous pipe. */
-static constexpr const char *kPipe = "pipe";
-/** In-process communication. */
-static constexpr const char *kInproc = "inproc";
-/** Something else (non IP-based). */
-static constexpr const char *kOther = "other";
-} // namespace NetTransportValues
-
namespace ErrorTypeValues
{
-/** A fallback error value to be used when the instrumentation does not define a custom value for
- * it. */
+/** A fallback error value to be used when the instrumentation doesn't define a custom value. */
static constexpr const char *kOther = "_OTHER";
} // namespace ErrorTypeValues
@@ -1743,6 +1736,35 @@ static constexpr const char *kStdout = "stdout";
static constexpr const char *kStderr = "stderr";
} // namespace LogIostreamValues
+namespace IosStateValues
+{
+/** The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`. */
+static constexpr const char *kActive = "active";
+/** The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`. */
+static constexpr const char *kInactive = "inactive";
+/** The app is now in the background. This value is associated with UIKit notification
+ * `applicationDidEnterBackground`. */
+static constexpr const char *kBackground = "background";
+/** The app is now in the foreground. This value is associated with UIKit notification
+ * `applicationWillEnterForeground`. */
+static constexpr const char *kForeground = "foreground";
+/** The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`. */
+static constexpr const char *kTerminate = "terminate";
+} // namespace IosStateValues
+
+namespace AndroidStateValues
+{
+/** Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has
+ * been called in the app for the first time. */
+static constexpr const char *kCreated = "created";
+/** Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been
+ * called when the app was in the foreground state. */
+static constexpr const char *kBackground = "background";
+/** Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has
+ * been called when the app was in either the created or background states. */
+static constexpr const char *kForeground = "foreground";
+} // namespace AndroidStateValues
+
namespace StateValues
{
/** idle. */
@@ -1779,8 +1801,6 @@ static constexpr const char *kSteal = "steal";
namespace SystemMemoryStateValues
{
-/** total. */
-static constexpr const char *kTotal = "total";
/** used. */
static constexpr const char *kUsed = "used";
/** free. */
@@ -1899,25 +1919,90 @@ static constexpr const char *kStopped = "stopped";
static constexpr const char *kDefunct = "defunct";
} // namespace SystemProcessesStatusValues
-namespace NetworkTransportValues
+namespace NetSockFamilyValues
{
-/** TCP. */
-static constexpr const char *kTcp = "tcp";
-/** UDP. */
-static constexpr const char *kUdp = "udp";
-/** Named or anonymous pipe. See note below. */
-static constexpr const char *kPipe = "pipe";
-/** Unix domain socket. */
+/** IPv4 address. */
+static constexpr const char *kInet = "inet";
+/** IPv6 address. */
+static constexpr const char *kInet6 = "inet6";
+/** Unix domain socket path. */
static constexpr const char *kUnix = "unix";
-} // namespace NetworkTransportValues
+} // namespace NetSockFamilyValues
-namespace NetworkTypeValues
+namespace NetTransportValues
{
-/** IPv4. */
-static constexpr const char *kIpv4 = "ipv4";
-/** IPv6. */
-static constexpr const char *kIpv6 = "ipv6";
-} // namespace NetworkTypeValues
+/** ip_tcp. */
+static constexpr const char *kIpTcp = "ip_tcp";
+/** ip_udp. */
+static constexpr const char *kIpUdp = "ip_udp";
+/** Named or anonymous pipe. */
+static constexpr const char *kPipe = "pipe";
+/** In-process communication. */
+static constexpr const char *kInproc = "inproc";
+/** Something else (non IP-based). */
+static constexpr const char *kOther = "other";
+} // namespace NetTransportValues
+
+namespace HttpRequestMethodValues
+{
+/** CONNECT method. */
+static constexpr const char *kConnect = "CONNECT";
+/** DELETE method. */
+static constexpr const char *kDelete = "DELETE";
+/** GET method. */
+static constexpr const char *kGet = "GET";
+/** HEAD method. */
+static constexpr const char *kHead = "HEAD";
+/** OPTIONS method. */
+static constexpr const char *kOptions = "OPTIONS";
+/** PATCH method. */
+static constexpr const char *kPatch = "PATCH";
+/** POST method. */
+static constexpr const char *kPost = "POST";
+/** PUT method. */
+static constexpr const char *kPut = "PUT";
+/** TRACE method. */
+static constexpr const char *kTrace = "TRACE";
+/** Any HTTP method that the instrumentation has no prior knowledge of. */
+static constexpr const char *kOther = "_OTHER";
+} // namespace HttpRequestMethodValues
+
+namespace MessagingOperationValues
+{
+/** One or more messages are provided for publishing to an intermediary. If a single message is
+ * published, the context of the "Publish" span can be used as the creation context and no
+ * "Create" span needs to be created. */
+static constexpr const char *kPublish = "publish";
+/** A message is created. "Create" spans always refer to a single message and are used to
+ * provide a unique creation context for messages in batch publishing scenarios. */
+static constexpr const char *kCreate = "create";
+/** One or more messages are requested by a consumer. This operation refers to pull-based scenarios,
+ * where consumers explicitly call methods of messaging SDKs to receive messages. */
+static constexpr const char *kReceive = "receive";
+/** One or more messages are passed to a consumer. This operation refers to push-based scenarios,
+ * where consumer register callbacks which get called by messaging SDKs. */
+static constexpr const char *kDeliver = "deliver";
+} // namespace MessagingOperationValues
+
+namespace MessagingRocketmqConsumptionModelValues
+{
+/** Clustering consumption model. */
+static constexpr const char *kClustering = "clustering";
+/** Broadcasting consumption model. */
+static constexpr const char *kBroadcasting = "broadcasting";
+} // namespace MessagingRocketmqConsumptionModelValues
+
+namespace MessagingRocketmqMessageTypeValues
+{
+/** Normal message. */
+static constexpr const char *kNormal = "normal";
+/** FIFO message. */
+static constexpr const char *kFifo = "fifo";
+/** Delay message. */
+static constexpr const char *kDelay = "delay";
+/** Transaction message. */
+static constexpr const char *kTransaction = "transaction";
+} // namespace MessagingRocketmqMessageTypeValues
namespace NetworkConnectionSubtypeValues
{
@@ -1979,35 +2064,119 @@ static constexpr const char *kUnavailable = "unavailable";
static constexpr const char *kUnknown = "unknown";
} // namespace NetworkConnectionTypeValues
-namespace HttpRequestMethodValues
+namespace NetworkTransportValues
{
-/** CONNECT method. */
-static constexpr const char *kConnect = "CONNECT";
-/** DELETE method. */
-static constexpr const char *kDelete = "DELETE";
-/** GET method. */
-static constexpr const char *kGet = "GET";
-/** HEAD method. */
-static constexpr const char *kHead = "HEAD";
-/** OPTIONS method. */
-static constexpr const char *kOptions = "OPTIONS";
-/** PATCH method. */
-static constexpr const char *kPatch = "PATCH";
-/** POST method. */
-static constexpr const char *kPost = "POST";
-/** PUT method. */
-static constexpr const char *kPut = "PUT";
-/** TRACE method. */
-static constexpr const char *kTrace = "TRACE";
-/** Any HTTP method that the instrumentation has no prior knowledge of. */
-static constexpr const char *kOther = "_OTHER";
-} // namespace HttpRequestMethodValues
+/** TCP. */
+static constexpr const char *kTcp = "tcp";
+/** UDP. */
+static constexpr const char *kUdp = "udp";
+/** Named or anonymous pipe. */
+static constexpr const char *kPipe = "pipe";
+/** Unix domain socket. */
+static constexpr const char *kUnix = "unix";
+} // namespace NetworkTransportValues
+
+namespace NetworkTypeValues
+{
+/** IPv4. */
+static constexpr const char *kIpv4 = "ipv4";
+/** IPv6. */
+static constexpr const char *kIpv6 = "ipv6";
+} // namespace NetworkTypeValues
+
+namespace RpcConnectRpcErrorCodeValues
+{
+/** cancelled. */
+static constexpr const char *kCancelled = "cancelled";
+/** unknown. */
+static constexpr const char *kUnknown = "unknown";
+/** invalid_argument. */
+static constexpr const char *kInvalidArgument = "invalid_argument";
+/** deadline_exceeded. */
+static constexpr const char *kDeadlineExceeded = "deadline_exceeded";
+/** not_found. */
+static constexpr const char *kNotFound = "not_found";
+/** already_exists. */
+static constexpr const char *kAlreadyExists = "already_exists";
+/** permission_denied. */
+static constexpr const char *kPermissionDenied = "permission_denied";
+/** resource_exhausted. */
+static constexpr const char *kResourceExhausted = "resource_exhausted";
+/** failed_precondition. */
+static constexpr const char *kFailedPrecondition = "failed_precondition";
+/** aborted. */
+static constexpr const char *kAborted = "aborted";
+/** out_of_range. */
+static constexpr const char *kOutOfRange = "out_of_range";
+/** unimplemented. */
+static constexpr const char *kUnimplemented = "unimplemented";
+/** internal. */
+static constexpr const char *kInternal = "internal";
+/** unavailable. */
+static constexpr const char *kUnavailable = "unavailable";
+/** data_loss. */
+static constexpr const char *kDataLoss = "data_loss";
+/** unauthenticated. */
+static constexpr const char *kUnauthenticated = "unauthenticated";
+} // namespace RpcConnectRpcErrorCodeValues
+
+namespace RpcGrpcStatusCodeValues
+{
+/** OK. */
+static constexpr const int kOk = 0;
+/** CANCELLED. */
+static constexpr const int kCancelled = 1;
+/** UNKNOWN. */
+static constexpr const int kUnknown = 2;
+/** INVALID_ARGUMENT. */
+static constexpr const int kInvalidArgument = 3;
+/** DEADLINE_EXCEEDED. */
+static constexpr const int kDeadlineExceeded = 4;
+/** NOT_FOUND. */
+static constexpr const int kNotFound = 5;
+/** ALREADY_EXISTS. */
+static constexpr const int kAlreadyExists = 6;
+/** PERMISSION_DENIED. */
+static constexpr const int kPermissionDenied = 7;
+/** RESOURCE_EXHAUSTED. */
+static constexpr const int kResourceExhausted = 8;
+/** FAILED_PRECONDITION. */
+static constexpr const int kFailedPrecondition = 9;
+/** ABORTED. */
+static constexpr const int kAborted = 10;
+/** OUT_OF_RANGE. */
+static constexpr const int kOutOfRange = 11;
+/** UNIMPLEMENTED. */
+static constexpr const int kUnimplemented = 12;
+/** INTERNAL. */
+static constexpr const int kInternal = 13;
+/** UNAVAILABLE. */
+static constexpr const int kUnavailable = 14;
+/** DATA_LOSS. */
+static constexpr const int kDataLoss = 15;
+/** UNAUTHENTICATED. */
+static constexpr const int kUnauthenticated = 16;
+} // namespace RpcGrpcStatusCodeValues
+
+namespace RpcSystemValues
+{
+/** gRPC. */
+static constexpr const char *kGrpc = "grpc";
+/** Java RMI. */
+static constexpr const char *kJavaRmi = "java_rmi";
+/** .NET WCF. */
+static constexpr const char *kDotnetWcf = "dotnet_wcf";
+/** Apache Dubbo. */
+static constexpr const char *kApacheDubbo = "apache_dubbo";
+/** Connect RPC. */
+static constexpr const char *kConnectRpc = "connect_rpc";
+} // namespace RpcSystemValues
namespace OpentracingRefTypeValues
{
/** The parent Span depends on the child Span in some capacity. */
static constexpr const char *kChildOf = "child_of";
-/** The parent Span does not depend in any way on the result of the child Span. */
+/** The parent Span doesn't depend in any way on the result of the child Span. */
static constexpr const char *kFollowsFrom = "follows_from";
} // namespace OpentracingRefTypeValues
@@ -2216,88 +2385,6 @@ static constexpr const char *kMutation = "mutation";
static constexpr const char *kSubscription = "subscription";
} // namespace GraphqlOperationTypeValues
-namespace MessagingOperationValues
-{
-/** publish. */
-static constexpr const char *kPublish = "publish";
-/** receive. */
-static constexpr const char *kReceive = "receive";
-/** process. */
-static constexpr const char *kProcess = "process";
-} // namespace MessagingOperationValues
-
-namespace MessagingRocketmqConsumptionModelValues
-{
-/** Clustering consumption model. */
-static constexpr const char *kClustering = "clustering";
-/** Broadcasting consumption model. */
-static constexpr const char *kBroadcasting = "broadcasting";
-} // namespace MessagingRocketmqConsumptionModelValues
-
-namespace MessagingRocketmqMessageTypeValues
-{
-/** Normal message. */
-static constexpr const char *kNormal = "normal";
-/** FIFO message. */
-static constexpr const char *kFifo = "fifo";
-/** Delay message. */
-static constexpr const char *kDelay = "delay";
-/** Transaction message. */
-static constexpr const char *kTransaction = "transaction";
-} // namespace MessagingRocketmqMessageTypeValues
-
-namespace RpcSystemValues
-{
-/** gRPC. */
-static constexpr const char *kGrpc = "grpc";
-/** Java RMI. */
-static constexpr const char *kJavaRmi = "java_rmi";
-/** .NET WCF. */
-static constexpr const char *kDotnetWcf = "dotnet_wcf";
-/** Apache Dubbo. */
-static constexpr const char *kApacheDubbo = "apache_dubbo";
-/** Connect RPC. */
-static constexpr const char *kConnectRpc = "connect_rpc";
-} // namespace RpcSystemValues
-
-namespace RpcGrpcStatusCodeValues
-{
-/** OK. */
-static constexpr const int kOk = 0;
-/** CANCELLED. */
-static constexpr const int kCancelled = 1;
-/** UNKNOWN. */
-static constexpr const int kUnknown = 2;
-/** INVALID_ARGUMENT. */
-static constexpr const int kInvalidArgument = 3;
-/** DEADLINE_EXCEEDED. */
-static constexpr const int kDeadlineExceeded = 4;
-/** NOT_FOUND. */
-static constexpr const int kNotFound = 5;
-/** ALREADY_EXISTS. */
-static constexpr const int kAlreadyExists = 6;
-/** PERMISSION_DENIED. */
-static constexpr const int kPermissionDenied = 7;
-/** RESOURCE_EXHAUSTED. */
-static constexpr const int kResourceExhausted = 8;
-/** FAILED_PRECONDITION. */
-static constexpr const int kFailedPrecondition = 9;
-/** ABORTED. */
-static constexpr const int kAborted = 10;
-/** OUT_OF_RANGE. */
-static constexpr const int kOutOfRange = 11;
-/** UNIMPLEMENTED. */
-static constexpr const int kUnimplemented = 12;
-/** INTERNAL. */
-static constexpr const int kInternal = 13;
-/** UNAVAILABLE. */
-static constexpr const int kUnavailable = 14;
-/** DATA_LOSS. */
-static constexpr const int kDataLoss = 15;
-/** UNAUTHENTICATED. */
-static constexpr const int kUnauthenticated = 16;
-} // namespace RpcGrpcStatusCodeValues
-
namespace MessageTypeValues
{
/** sent. */
@@ -2306,42 +2393,6 @@ static constexpr const char *kSent = "SENT";
static constexpr const char *kReceived = "RECEIVED";
} // namespace MessageTypeValues
-namespace RpcConnectRpcErrorCodeValues
-{
-/** cancelled. */
-static constexpr const char *kCancelled = "cancelled";
-/** unknown. */
-static constexpr const char *kUnknown = "unknown";
-/** invalid_argument. */
-static constexpr const char *kInvalidArgument = "invalid_argument";
-/** deadline_exceeded. */
-static constexpr const char *kDeadlineExceeded = "deadline_exceeded";
-/** not_found. */
-static constexpr const char *kNotFound = "not_found";
-/** already_exists. */
-static constexpr const char *kAlreadyExists = "already_exists";
-/** permission_denied. */
-static constexpr const char *kPermissionDenied = "permission_denied";
-/** resource_exhausted. */
-static constexpr const char *kResourceExhausted = "resource_exhausted";
-/** failed_precondition. */
-static constexpr const char *kFailedPrecondition = "failed_precondition";
-/** aborted. */
-static constexpr const char *kAborted = "aborted";
-/** out_of_range. */
-static constexpr const char *kOutOfRange = "out_of_range";
-/** unimplemented. */
-static constexpr const char *kUnimplemented = "unimplemented";
-/** internal. */
-static constexpr const char *kInternal = "internal";
-/** unavailable. */
-static constexpr const char *kUnavailable = "unavailable";
-/** data_loss. */
-static constexpr const char *kDataLoss = "data_loss";
-/** unauthenticated. */
-static constexpr const char *kUnauthenticated = "unauthenticated";
-} // namespace RpcConnectRpcErrorCodeValues
-
} // namespace SemanticConventions
} // namespace trace
OPENTELEMETRY_END_NAMESPACE
diff --git a/buildscripts/semantic-convention/generate.sh b/buildscripts/semantic-convention/generate.sh
index daa5131dc5..401e6daf60 100755
--- a/buildscripts/semantic-convention/generate.sh
+++ b/buildscripts/semantic-convention/generate.sh
@@ -18,10 +18,10 @@ ROOT_DIR="${SCRIPT_DIR}/../../"
# https://github.com/open-telemetry/opentelemetry-specification
# Repository from 1.21.0:
# https://github.com/open-telemetry/semantic-conventions
-SEMCONV_VERSION=1.22.0
+SEMCONV_VERSION=1.23.1
# repository: https://github.com/open-telemetry/build-tools
-GENERATOR_VERSION=0.22.0
+GENERATOR_VERSION=0.23.0
SPEC_VERSION=v$SEMCONV_VERSION
SCHEMA_URL=https://opentelemetry.io/schemas/$SEMCONV_VERSION
diff --git a/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h b/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
index 1b45f80c36..37ad328ae5 100644
--- a/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
+++ b/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
@@ -24,60 +24,7 @@ namespace SemanticConventions
/**
* The URL of the OpenTelemetry schema for these keys and values.
*/
-static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.22.0";
-
-/**
- * Uniquely identifies the framework API revision offered by a version ({@code os.version}) of the
- * android operating system. More information can be found here.
- */
-static constexpr const char *kAndroidOsApiLevel = "android.os.api_level";
-
-/**
- * Array of brand name and version separated by a space
- *
- * Notes:
-
- This value is intended to be taken from the UA client hints API ({@code
- navigator.userAgentData.brands}).
- */
-static constexpr const char *kBrowserBrands = "browser.brands";
-
-/**
- * Preferred language of the user using the browser
- *
- * Notes:
-
- This value is intended to be taken from the Navigator API {@code
- navigator.language}.
- */
-static constexpr const char *kBrowserLanguage = "browser.language";
-
-/**
- * A boolean that is true if the browser is running on a mobile device
- *
- * Notes:
-
- This value is intended to be taken from the UA client hints API ({@code
- navigator.userAgentData.mobile}). If unavailable, this attribute SHOULD be left unset.
- */
-static constexpr const char *kBrowserMobile = "browser.mobile";
-
-/**
- * The platform on which the browser is running
- *
- * Notes:
-
- This value is intended to be taken from the UA client hints API ({@code
-navigator.userAgentData.platform}). If unavailable, the legacy {@code navigator.platform} API SHOULD
-NOT be used instead and this attribute SHOULD be left unset in order for the values to be
-consistent. The list of possible values is defined in the W3C User-Agent Client Hints
-specification. Note that some (but not all) of these values can overlap with values in the {@code os.type} and {@code os.name} attributes. However, for consistency, the
-values in the {@code browser.platform} attribute should capture the exact value that the user agent
-provides.
- */
-static constexpr const char *kBrowserPlatform = "browser.platform";
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.23.1";
/**
* The cloud account ID the resource is assigned to.
@@ -115,7 +62,7 @@ static constexpr const char *kCloudProvider = "cloud.provider";
*/
@@ -124,7 +71,7 @@ static constexpr const char *kCloudRegion = "cloud.region";
/**
* Cloud provider-specific native identifier of the monitored cloud resource (e.g. an ARN on AWS, a
-fully qualified
+fully qualified
resource ID on Azure, a full resource name
on GCP)
@@ -142,8 +89,8 @@ the resolved function version, as the same runtime instance may be invokable wit
aliases. GCP: The URI of the resource
Azure: The Fully Qualified
-Resource ID of the invoked function, not the function app, having the form
+href="https://docs.microsoft.com/rest/api/resources/resources/get-by-id">Fully Qualified Resource
+ID of the invoked function, not the function app, having the form
{@code
/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/}.
This means that a span attribute MUST be used, as an Azure function app can host multiple functions
@@ -152,6 +99,149 @@ that would usually share a TracerProvider.
*/
static constexpr const char *kCloudResourceId = "cloud.resource_id";
+/**
+ * The command used to run the container (i.e. the command name).
+ *
+ * Notes:
+
- If using embedded credentials or sensitive data, it is recommended to remove them to
+ prevent potential leakage.
+ */
+static constexpr const char *kContainerCommand = "container.command";
+
+/**
+ * All the command arguments (including the command/executable itself) run by the container. [2]
+ */
+static constexpr const char *kContainerCommandArgs = "container.command_args";
+
+/**
+ * The full command run by the container as a single string representing the full command. [2]
+ */
+static constexpr const char *kContainerCommandLine = "container.command_line";
+
+/**
+ * Container ID. Usually a UUID, as for example used to identify Docker
+ * containers. The UUID might be abbreviated.
+ */
+static constexpr const char *kContainerId = "container.id";
+
+/**
+ * Runtime specific image identifier. Usually a hash algorithm followed by a UUID.
+ *
+ * Notes:
+
- Docker defines a sha256 of the image id; {@code container.image.id} corresponds to the
+{@code Image} field from the Docker container inspect API
+endpoint. K8s defines a link to the container registry repository with digest {@code "imageID":
+"registry.azurecr.io
+/namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"}.
+The ID is assinged by the container runtime and can vary in different environments. Consider using
+{@code oci.manifest.digest} if it is important to identify the same image in different
+environments/runtimes.
+ */
+static constexpr const char *kContainerImageId = "container.image.id";
+
+/**
+ * Name of the image the container was built on.
+ */
+static constexpr const char *kContainerImageName = "container.image.name";
+
+/**
+ * Repo digests of the container image as provided by the container runtime.
+ *
+ * Notes:
+
- Docker and CRI
+ report those under the {@code RepoDigests} field.
+ */
+static constexpr const char *kContainerImageRepoDigests = "container.image.repo_digests";
+
+/**
+ * Container image tags. An example can be found in Docker Image
+ * Inspect. Should be only the {@code } section of the full name for example from {@code
+ * registry.example.com/my-org/my-image:}.
+ */
+static constexpr const char *kContainerImageTags = "container.image.tags";
+
+/**
+ * Container name used by container runtime.
+ */
+static constexpr const char *kContainerName = "container.name";
+
+/**
+ * The container runtime managing this container.
+ */
+static constexpr const char *kContainerRuntime = "container.runtime";
+
+/**
+ * The digest of the OCI image manifest. For container images specifically is the digest by which
+the container image is known.
+ *
+ * Notes:
+
+ */
+static constexpr const char *kOciManifestDigest = "oci.manifest.digest";
+
+/**
+ * Uniquely identifies the framework API revision offered by a version ({@code os.version}) of the
+ * android operating system. More information can be found here.
+ */
+static constexpr const char *kAndroidOsApiLevel = "android.os.api_level";
+
+/**
+ * Array of brand name and version separated by a space
+ *
+ * Notes:
+
- This value is intended to be taken from the UA client hints API ({@code
+ navigator.userAgentData.brands}).
+ */
+static constexpr const char *kBrowserBrands = "browser.brands";
+
+/**
+ * Preferred language of the user using the browser
+ *
+ * Notes:
+
- This value is intended to be taken from the Navigator API {@code
+ navigator.language}.
+ */
+static constexpr const char *kBrowserLanguage = "browser.language";
+
+/**
+ * A boolean that is true if the browser is running on a mobile device
+ *
+ * Notes:
+
- This value is intended to be taken from the UA client hints API ({@code
+ navigator.userAgentData.mobile}). If unavailable, this attribute SHOULD be left unset.
+ */
+static constexpr const char *kBrowserMobile = "browser.mobile";
+
+/**
+ * The platform on which the browser is running
+ *
+ * Notes:
+
- This value is intended to be taken from the UA client hints API ({@code
+navigator.userAgentData.platform}). If unavailable, the legacy {@code navigator.platform} API SHOULD
+NOT be used instead and this attribute SHOULD be left unset in order for the values to be
+consistent. The list of possible values is defined in the W3C User-Agent Client Hints
+specification. Note that some (but not all) of these values can overlap with values in the {@code os.type} and {@code os.name} attributes. However, for consistency, the
+values in the {@code browser.platform} attribute should capture the exact value that the user agent
+provides.
+ */
+static constexpr const char *kBrowserPlatform = "browser.platform";
+
/**
* The ARN of an ECS cluster.
@@ -276,83 +366,7 @@ static constexpr const char *kHerokuReleaseCommit = "heroku.release.commit";
static constexpr const char *kHerokuReleaseCreationTimestamp = "heroku.release.creation_timestamp";
/**
- * The command used to run the container (i.e. the command name).
- *
- * Notes:
-
- If using embedded credentials or sensitive data, it is recommended to remove them to
- prevent potential leakage.
- */
-static constexpr const char *kContainerCommand = "container.command";
-
-/**
- * All the command arguments (including the command/executable itself) run by the container. [2]
- */
-static constexpr const char *kContainerCommandArgs = "container.command_args";
-
-/**
- * The full command run by the container as a single string representing the full command. [2]
- */
-static constexpr const char *kContainerCommandLine = "container.command_line";
-
-/**
- * Container ID. Usually a UUID, as for example used to identify Docker
- * containers. The UUID might be abbreviated.
- */
-static constexpr const char *kContainerId = "container.id";
-
-/**
- * Runtime specific image identifier. Usually a hash algorithm followed by a UUID.
- *
- * Notes:
-
- Docker defines a sha256 of the image id; {@code container.image.id} corresponds to the
-{@code Image} field from the Docker container inspect API
-endpoint. K8s defines a link to the container registry repository with digest {@code "imageID":
-"registry.azurecr.io
-/namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"}.
-The ID is assinged by the container runtime and can vary in different environments. Consider using
-{@code oci.manifest.digest} if it is important to identify the same image in different
-environments/runtimes.
- */
-static constexpr const char *kContainerImageId = "container.image.id";
-
-/**
- * Name of the image the container was built on.
- */
-static constexpr const char *kContainerImageName = "container.image.name";
-
-/**
- * Repo digests of the container image as provided by the container runtime.
- *
- * Notes:
-
- Docker and CRI
- report those under the {@code RepoDigests} field.
- */
-static constexpr const char *kContainerImageRepoDigests = "container.image.repo_digests";
-
-/**
- * Container image tags. An example can be found in Docker Image
- * Inspect. Should be only the {@code } section of the full name for example from {@code
- * registry.example.com/my-org/my-image:}.
- */
-static constexpr const char *kContainerImageTags = "container.image.tags";
-
-/**
- * Container name used by container runtime.
- */
-static constexpr const char *kContainerName = "container.name";
-
-/**
- * The container runtime managing this container.
- */
-static constexpr const char *kContainerRuntime = "container.runtime";
-
-/**
- * Name of the deployment
+ * Name of the deployment
* environment (aka deployment tier).
*/
static constexpr const char *kDeploymentEnvironment = "deployment.environment";
@@ -499,6 +513,17 @@ static constexpr const char *kHostImageVersion = "host.image.version";
*/
static constexpr const char *kHostIp = "host.ip";
+/**
+ * Available MAC addresses of the host, excluding loopback interfaces.
+ *
+ * Notes:
+
- MAC Addresses MUST be represented in IEEE RA
+ hexadecimal form: as hyphen-separated octets in uppercase hexadecimal form from most to least
+ significant.
+ */
+static constexpr const char *kHostMac = "host.mac";
+
/**
* Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully
* qualified hostname, or another name specified by the user.
@@ -555,7 +580,7 @@ static constexpr const char *kK8sClusterName = "k8s.cluster.name";
* A pseudo-ID for the cluster, set to the UID of the {@code kube-system} namespace.
*
* Notes:
-
- K8s does not have support for obtaining a cluster ID. If this is ever
+
- K8s doesn't have support for obtaining a cluster ID. If this is ever
added, we will recommend collecting the {@code k8s.cluster.uid} through the
official APIs. In the meantime, we are able to use the {@code uid} of the
{@code kube-system} namespace as a proxy for cluster ID. Read on for the
@@ -672,20 +697,6 @@ static constexpr const char *kK8sCronjobName = "k8s.cronjob.name";
*/
static constexpr const char *kK8sCronjobUid = "k8s.cronjob.uid";
-/**
- * The digest of the OCI image manifest. For container images specifically is the digest by which
-the container image is known.
- *
- *
Notes:
-
- */
-static constexpr const char *kOciManifestDigest = "oci.manifest.digest";
-
/**
* Unique identifier for a particular build or compilation of the operating system.
*/