diff --git a/RELEASING.md b/RELEASING.md
index 8246e8fe44..852332e820 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -2,7 +2,7 @@
## Pre Release
-1: Upgrade to latest [semantic-conventions](docs/semantic-conventions.md)
+1: Upgrade to latest [dependencies](docs/maintaining-dependencies.md)
if required.
2: Make sure all relevant changes for this release are included under
diff --git a/api/include/opentelemetry/trace/semantic_conventions.h b/api/include/opentelemetry/trace/semantic_conventions.h
index a9290bff44..fb26385fbc 100644
--- a/api/include/opentelemetry/trace/semantic_conventions.h
+++ b/api/include/opentelemetry/trace/semantic_conventions.h
@@ -22,7 +22,7 @@ namespace SemanticConventions
/**
* The URL of the OpenTelemetry schema for these keys and values.
*/
-static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.26.0";
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.27.0";
/**
* Uniquely identifies the framework API revision offered by a version ({@code os.version}) of the
@@ -31,6 +31,69 @@ static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.26
*/
static constexpr const char *kAndroidOsApiLevel = "android.os.api_level";
+/**
+ * The provenance filename of the built attestation which directly relates to the build artifact
+ * filename. This filename SHOULD accompany the artifact at publish time. See the SLSA
+ * Relationship specification for more information.
+ */
+static constexpr const char *kArtifactAttestationFilename = "artifact.attestation.filename";
+
+/**
+ * The full hash value (see
+ * glossary), of the built attestation. Some envelopes in the software attestation space also
+ * refer to this as the digest.
+ */
+static constexpr const char *kArtifactAttestationHash = "artifact.attestation.hash";
+
+/**
+ * The id of the build software attestation.
+ */
+static constexpr const char *kArtifactAttestationId = "artifact.attestation.id";
+
+/**
+ * The human readable file name of the artifact, typically generated during build and release
+processes. Often includes the package name and version in the file name.
+ *
+ *
Notes:
+
- This file name can also act as the Package Name in cases where the
+package ecosystem maps accordingly. Additionally, the artifact can be published for others,
+but that is not a guarantee.
+ */
+static constexpr const char *kArtifactFilename = "artifact.filename";
+
+/**
+ * The full hash value (see
+glossary), often found in checksum.txt on a release of the artifact and used to verify package
+integrity.
+ *
+ * Notes:
+
- The specific algorithm used to create the cryptographic hash value is
+not defined. In situations where an artifact has multiple
+cryptographic hashes, it is up to the implementer to choose which
+hash value to set here; this should be the most secure hash algorithm
+that is suitable for the situation and consistent with the
+corresponding attestation. The implementer can then provide the other
+hash values through an additional set of attribute extensions as they
+deem necessary.
+ */
+static constexpr const char *kArtifactHash = "artifact.hash";
+
+/**
+ * The Package URL of the package artifact provides a
+ * standard way to identify and locate the packaged artifact.
+ */
+static constexpr const char *kArtifactPurl = "artifact.purl";
+
+/**
+ * The version of the artifact.
+ */
+static constexpr const char *kArtifactVersion = "artifact.version";
+
/**
* Rate-limiting result, shows whether the lease was acquired or contains a rejection reason
*/
@@ -397,6 +460,12 @@ href="https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.ht
*/
static constexpr const char *kAwsS3UploadId = "aws.s3.upload_id";
+/**
+ * The unique identifier of the service request. It's generated by the Azure service and returned
+ * with the response.
+ */
+static constexpr const char *kAzServiceRequestId = "az.service_request_id";
+
/**
* Array of brand name and version separated by a space
*
@@ -443,6 +512,39 @@ provides.
*/
static constexpr const char *kBrowserPlatform = "browser.platform";
+/**
+ * The human readable name of the pipeline within a CI/CD system.
+ */
+static constexpr const char *kCicdPipelineName = "cicd.pipeline.name";
+
+/**
+ * The unique identifier of a pipeline run within a CI/CD system.
+ */
+static constexpr const char *kCicdPipelineRunId = "cicd.pipeline.run.id";
+
+/**
+ * The human readable name of a task within a pipeline. Task here most closely aligns with a computing process in a pipeline.
+ * Other terms for tasks include commands, steps, and procedures.
+ */
+static constexpr const char *kCicdPipelineTaskName = "cicd.pipeline.task.name";
+
+/**
+ * The unique identifier of a task run within a pipeline.
+ */
+static constexpr const char *kCicdPipelineTaskRunId = "cicd.pipeline.task.run.id";
+
+/**
+ * The URL of the pipeline run providing the
+ * complete address in order to locate and identify the pipeline run.
+ */
+static constexpr const char *kCicdPipelineTaskRunUrlFull = "cicd.pipeline.task.run.url.full";
+
+/**
+ * The type of the task within a pipeline.
+ */
+static constexpr const char *kCicdPipelineTaskType = "cicd.pipeline.task.type";
+
/**
* Client address - domain name if available without reverse DNS lookup; otherwise, IP address or
Unix domain socket name.
@@ -523,7 +625,7 @@ Lambda: The function ARN. Take care
not to use the "invoked ARN" directly but replace any alias suffix with
-the resolved function version, as the same runtime instance may be invokable with multiple different
+the resolved function version, as the same runtime instance may be invocable with multiple different
aliases. GCP: The URI of the resource
Azure: The identify Docker
@@ -688,26 +785,36 @@ static constexpr const char *kContainerName = "container.name";
*/
static constexpr const char *kContainerRuntime = "container.runtime";
+/**
+ * The mode of the CPU
+ */
+static constexpr const char *kCpuMode = "cpu.mode";
+
/**
* The name of the connection pool; unique within the instrumented application. In case the
- * connection pool implementation doesn't provide a name, instrumentation should use a combination
- * of {@code server.address} and {@code server.port} attributes formatted as {@code
- * server.address:server.port}.
+ * connection pool implementation doesn't provide a name, instrumentation SHOULD use a combination
+ * of parameters that would make the name unique, for example, combining attributes {@code
+ * server.address}, {@code server.port}, and {@code db.namespace}, formatted as {@code
+ * server.address:server.port/db.namespace}. Instrumentations that generate connection pool name
+ * following different patterns SHOULD document it.
*/
-static constexpr const char *kDbClientConnectionsPoolName = "db.client.connections.pool.name";
+static constexpr const char *kDbClientConnectionPoolName = "db.client.connection.pool.name";
/**
* The state of a connection in the pool
*/
-static constexpr const char *kDbClientConnectionsState = "db.client.connections.state";
+static constexpr const char *kDbClientConnectionState = "db.client.connection.state";
/**
* The name of a collection (table, container) within the database.
*
* Notes:
-
- If the collection name is parsed from the query, it SHOULD match the value provided in
-the query and may be qualified with the schema and database name. It is RECOMMENDED to capture the
-value as provided by the application without attempting to do any case normalization.
+ - It is RECOMMENDED to capture the value as provided by the application without attempting
+to do any case normalization. If the collection name is parsed from the query text, it SHOULD be the
+first collection name found in the query and it SHOULD match the value provided in the query text
+including any schema and database name prefix. For batch operations, if the individual operations
+are known to have the same collection name then that collection name SHOULD be used, otherwise
+{@code db.collection.name} SHOULD NOT be captured.
*/
static constexpr const char *kDbCollectionName = "db.collection.name";
@@ -725,17 +832,42 @@ provided by the application without attempting to do any case normalization.batch operation.
+ *
+ * Notes:
+
- Operations are only considered batches when they contain two or more operations, and so
+ {@code db.operation.batch.size} SHOULD never be {@code 1}.
+ */
+static constexpr const char *kDbOperationBatchSize = "db.operation.batch.size";
+
/**
* The name of the operation or command being executed.
*
* Notes:
- It is RECOMMENDED to capture the value as provided by the application without attempting
- to do any case normalization.
+to do any case normalization. If the operation name is parsed from the query text, it SHOULD be the
+first operation name found in the query. For batch operations, if the individual operations are
+known to have the same operation name then that operation name SHOULD be used prepended by {@code
+BATCH}, otherwise {@code db.operation.name} SHOULD be {@code BATCH} or some other database system
+specific term if more applicable.
*/
static constexpr const char *kDbOperationName = "db.operation.name";
/**
* The database query being executed.
+ *
+ * Notes:
+
- For sanitization see Sanitization of {@code
+db.query.text}. For batch operations, if the individual operations are known to have the same
+query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD
+be concatenated with separator {@code ;} or some other database system specific separator if more
+applicable. Even though parameterized query text can potentially have sensitive data, by using a
+parameterized query the user is giving a strong signal that any sensitive data will be passed as
+parameter values, and the benefit to observability of capturing the static part of the query text by
+default outweighs the risk.
*/
static constexpr const char *kDbQueryText = "db.query.text";
@@ -817,11 +949,6 @@ static constexpr const char *kDbCosmosdbStatusCode = "db.cosmosdb.status_code";
*/
static constexpr const char *kDbCosmosdbSubStatusCode = "db.cosmosdb.sub_status_code";
-/**
- * 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.
*/
@@ -832,15 +959,30 @@ static constexpr const char *kDbElasticsearchNodeName = "db.elasticsearch.node.n
environment (aka deployment tier).
*
* Notes:
-
- {@code deployment.environment} does not affect the uniqueness constraints defined through
-the {@code service.namespace}, {@code service.name} and {@code service.instance.id} resource
+
- {@code deployment.environment.name} does not affect the uniqueness constraints defined
+through the {@code service.namespace}, {@code service.name} and {@code service.instance.id} resource
attributes. This implies that resources carrying the following attribute combinations MUST be
considered to be identifying the same service:
- {@code service.name=frontend}, {@code
-deployment.environment=production}
- {@code service.name=frontend}, {@code
-deployment.environment=staging}.
+deployment.environment.name=production}
- {@code service.name=frontend}, {@code
+deployment.environment.name=staging}.
*/
-static constexpr const char *kDeploymentEnvironment = "deployment.environment";
+static constexpr const char *kDeploymentEnvironmentName = "deployment.environment.name";
+
+/**
+ * The id of the deployment.
+ */
+static constexpr const char *kDeploymentId = "deployment.id";
+
+/**
+ * The name of the deployment.
+ */
+static constexpr const char *kDeploymentName = "deployment.name";
+
+/**
+ * The status of the deployment.
+ */
+static constexpr const char *kDeploymentStatus = "deployment.status";
/**
* Deprecated use the {@code device.app.lifecycle} event definition including {@code android.state}
@@ -853,6 +995,14 @@ static constexpr const char *kDeploymentEnvironment = "deployment.environment";
*/
static constexpr const char *kAndroidState = "android.state";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kContainerCpuState = "container.cpu.state";
+
/**
* Deprecated, use {@code db.collection.name} instead.
*
@@ -877,6 +1027,14 @@ static constexpr const char *kDbConnectionString = "db.connection_string";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
+/**
+ * Deprecated, use {@code db.namespace} instead.
+ *
+ * @deprecated Deprecated, use `db.namespace` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbElasticsearchClusterName = "db.elasticsearch.cluster.name";
+
/**
* Deprecated, no general replacement at this time. For Elasticsearch, use {@code
* db.elasticsearch.node.name} instead.
@@ -961,21 +1119,85 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbUser = "db.user";
/**
- * Deprecated, use {@code db.client.connections.pool.name} instead.
+ * Deprecated, use {@code db.client.connection.pool.name} instead.
+ *
+ * @deprecated Deprecated, use `db.client.connection.pool.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsPoolName = "db.client.connections.pool.name";
+
+/**
+ * Deprecated, use {@code db.client.connection.state} instead.
+ *
+ * @deprecated Deprecated, use `db.client.connection.state` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsState = "db.client.connections.state";
+
+/**
+ * Deprecated, use {@code db.client.connection.pool.name} instead.
*
- * @deprecated Deprecated, use `db.client.connections.pool.name` instead.
+ * @deprecated Deprecated, use `db.client.connection.pool.name` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kPoolName = "pool.name";
/**
- * Deprecated, use {@code db.client.connections.state} instead.
+ * Deprecated, use {@code db.client.connection.state} instead.
*
- * @deprecated Deprecated, use `db.client.connections.state` instead.
+ * @deprecated Deprecated, use `db.client.connection.state` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kState = "state";
+/**
+ * 'Deprecated, use {@code deployment.environment.name} instead.'
+ *
+ * @deprecated 'Deprecated, use `deployment.environment.name` instead.'.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDeploymentEnvironment = "deployment.environment";
+
+/**
+ * Deprecated, use {@code user.id} instead.
+ *
+ * @deprecated Deprecated, use `user.id` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserId = "enduser.id";
+
+/**
+ * Deprecated, use {@code user.roles} instead.
+ *
+ * @deprecated Deprecated, use `user.roles` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserRole = "enduser.role";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserScope = "enduser.scope";
+
+/**
+ * Deprecated, use {@code gen_ai.usage.output_tokens} instead.
+ *
+ * @deprecated Deprecated, use `gen_ai.usage.output_tokens` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsageCompletionTokens = "gen_ai.usage.completion_tokens";
+
+/**
+ * Deprecated, use {@code gen_ai.usage.input_tokens} instead.
+ *
+ * @deprecated Deprecated, use `gen_ai.usage.input_tokens` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsagePromptTokens = "gen_ai.usage.prompt_tokens";
+
/**
* Deprecated, use {@code client.address} instead.
*
@@ -1107,6 +1329,41 @@ static constexpr const char *kHttpUserAgent = "http.user_agent";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kIosState = "ios.state";
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishAnonymous =
+ "messaging.destination_publish.anonymous";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishName =
+ "messaging.destination_publish.name";
+
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingEventhubsConsumerGroup =
+ "messaging.eventhubs.consumer.group";
+
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
+
/**
* Deprecated, use {@code messaging.destination.partition.id} instead.
*
@@ -1116,6 +1373,14 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessagingKafkaDestinationPartition =
"messaging.kafka.destination.partition";
+/**
+ * Deprecated, use {@code messaging.kafka.offset} instead.
+ *
+ * @deprecated Deprecated, use `messaging.kafka.offset` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+
/**
* Deprecated, use {@code messaging.operation.type} instead.
*
@@ -1124,6 +1389,23 @@ static constexpr const char *kMessagingKafkaDestinationPartition =
OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessagingOperation = "messaging.operation";
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
+
+/**
+ * Deprecated, use {@code messaging.servicebus.destination.subscription_name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.servicebus.destination.subscription_name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingServicebusDestinationSubscriptionName =
+ "messaging.servicebus.destination.subscription_name";
+
/**
* Deprecated, use {@code network.local.address}.
*
@@ -1247,21 +1529,29 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kNetTransport = "net.transport";
/**
- * None
*
- * @deprecated None.
+ *
+ * @deprecated .
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kOtelLibraryName = "otel.library.name";
/**
- * None
*
- * @deprecated None.
+ *
+ * @deprecated .
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kOtelLibraryVersion = "otel.library.version";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kProcessCpuState = "process.cpu.state";
+
/**
* Deprecated, use {@code rpc.message.compressed_size} instead.
*
@@ -1294,6 +1584,14 @@ static constexpr const char *kMessageType = "message.type";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessageUncompressedSize = "message.uncompressed_size";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kSystemCpuState = "system.cpu.state";
+
/**
* Deprecated, use {@code system.process.status} instead.
*
@@ -1302,6 +1600,14 @@ static constexpr const char *kMessageUncompressedSize = "message.uncompressed_si
OPENTELEMETRY_DEPRECATED
static constexpr const char *kSystemProcessesStatus = "system.processes.status";
+/**
+ * Deprecated, use {@code server.address} instead.
+ *
+ * @deprecated Deprecated, use `server.address` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kTlsClientServerName = "tls.client.server_name";
+
/**
* Destination address - domain name if available without reverse DNS lookup; otherwise, IP address
or Unix domain socket name.
@@ -1380,29 +1686,6 @@ static constexpr const char *kDiskIoDirection = "disk.io.direction";
*/
static constexpr const char *kDnsQuestionName = "dns.question.name";
-/**
- * Username or client_id extracted from the access token or Authorization header in the inbound
- * request from outside the system.
- */
-static constexpr const char *kEnduserId = "enduser.id";
-
-/**
- * Actual/assumed role the client is making the request under extracted from token or application
- * security context.
- */
-static constexpr const char *kEnduserRole = "enduser.role";
-
-/**
- * Scopes or granted authorities the client currently possesses extracted from token or application
- * security context. The value would come from the scope associated with an OAuth 2.0 Access Token or an attribute
- * value in a SAML 2.0
- * Assertion.
- */
-static constexpr const char *kEnduserScope = "enduser.scope";
-
/**
* Describes a class of error the operation ended with.
*
@@ -1428,9 +1711,9 @@ static constexpr const char *kErrorType = "error.type";
*
* Notes:
- Event names are subject to the same rules as attribute
- names. Notably, event names are namespaced to avoid collisions and provide a clean separation
- of semantics for events in separate domains like browser, mobile, and kubernetes.
+ href="/docs/general/attribute-naming.md">attribute names. Notably, event names are namespaced
+ to avoid collisions and provide a clean separation of semantics for events in separate domains like
+ browser, mobile, and kubernetes.
*/
static constexpr const char *kEventName = "event.name";
@@ -1665,6 +1948,16 @@ static constexpr const char *kFilePath = "file.path";
*/
static constexpr const char *kFileSize = "file.size";
+/**
+ * Identifies the Google Cloud service for which the official client library is intended.
+ *
+ * Notes:
+
- Intended to be a stable identifier for Google Cloud client libraries that is uniform
+ across implementation languages. The value should be derived from the canonical service domain for
+ the service; for example, 'foo.googleapis.com' should result in a value of 'foo'.
+ */
+static constexpr const char *kGcpClientService = "gcp.client.service";
+
/**
* The name of the Cloud Run execution being run for the
@@ -1697,7 +1990,7 @@ static constexpr const char *kGcpGceInstanceHostname = "gcp.gce.instance.hostnam
static constexpr const char *kGcpGceInstanceName = "gcp.gce.instance.name";
/**
- * The full response received from the LLM.
+ * The full response received from the GenAI model.
*
* Notes:
- It's RECOMMENDED to format completions as JSON string matching Notes:
+
- If one of the predefined values applies, but specific system uses a different name it's
+ RECOMMENDED to document it in the semantic conventions for specific GenAI system and use
+ system-specific name in the instrumentation. If a different name is not documented, instrumentation
+ libraries SHOULD use applicable predefined value.
+ */
+static constexpr const char *kGenAiOperationName = "gen_ai.operation.name";
+
+/**
+ * The full prompt sent to the GenAI model.
*
* Notes:
- It's RECOMMENDED to format prompts as JSON string matching Notes:
-
- The actual GenAI product may differ from the one identified by the client. For example,
- when using OpenAI client libraries to communicate with Mistral, the {@code gen_ai.system} is set to
- {@code openai} based on the instrumentation's best knowledge.
+ - The {@code gen_ai.system} describes a family of GenAI models with specific model
+identified by {@code gen_ai.request.model} and {@code gen_ai.response.model} attributes.
- The
+actual GenAI product may differ from the one identified by the client. For example, when using
+OpenAI client libraries to communicate with Mistral, the {@code gen_ai.system} is set to {@code
+openai} based on the instrumentation's best knowledge.
- For custom model, a custom friendly
+name SHOULD be used. If none of these options apply, the {@code gen_ai.system} SHOULD be set to
+{@code _OTHER}.
*/
static constexpr const char *kGenAiSystem = "gen_ai.system";
/**
- * The number of tokens used in the LLM response (completion).
+ * The type of token being counted.
*/
-static constexpr const char *kGenAiUsageCompletionTokens = "gen_ai.usage.completion_tokens";
+static constexpr const char *kGenAiTokenType = "gen_ai.token.type";
/**
- * The number of tokens used in the LLM prompt.
+ * The number of tokens used in the GenAI input (prompt).
*/
-static constexpr const char *kGenAiUsagePromptTokens = "gen_ai.usage.prompt_tokens";
+static constexpr const char *kGenAiUsageInputTokens = "gen_ai.usage.input_tokens";
+
+/**
+ * The number of tokens used in the GenAI response (completion).
+ */
+static constexpr const char *kGenAiUsageOutputTokens = "gen_ai.usage.output_tokens";
+
+/**
+ * The type of memory.
+ */
+static constexpr const char *kGoMemoryType = "go.memory.type";
/**
* The GraphQL document being executed.
@@ -2176,6 +2514,11 @@ static constexpr const char *kK8sStatefulsetName = "k8s.statefulset.name";
*/
static constexpr const char *kK8sStatefulsetUid = "k8s.statefulset.uid";
+/**
+ * The Linux Slab memory state
+ */
+static constexpr const char *kLinuxMemorySlabState = "linux.memory.slab.state";
+
/**
* The stream associated with the log. See below for a list of well-known values.
*/
@@ -2201,6 +2544,16 @@ static constexpr const char *kLogFilePath = "log.file.path";
*/
static constexpr const char *kLogFilePathResolved = "log.file.path_resolved";
+/**
+ * The complete orignal Log Record.
+ *
+ * Notes:
+
- This value MAY be added when processing a Log Record which was originally transmitted as
+ a string or equivalent data type AND the Body field of the Log Record does not contain the same
+ value. (e.g. a syslog or a log record read from a file.)
+ */
+static constexpr const char *kLogRecordOriginal = "log.record.original";
+
/**
* A unique identifier for the Log Record.
*
@@ -2229,6 +2582,16 @@ static constexpr const char *kMessagingBatchMessageCount = "messaging.batch.mess
*/
static constexpr const char *kMessagingClientId = "messaging.client.id";
+/**
+ * The name of the consumer group with which a consumer is associated.
+ *
+ * Notes:
+
- Semantic conventions for individual messaging systems SHOULD document whether {@code
+ messaging.consumer.group.name} is applicable and what it means in the context of that system.
+
+ */
+static constexpr const char *kMessagingConsumerGroupName = "messaging.consumer.group.name";
+
/**
* A boolean that is true if the message destination is anonymous (could be unnamed or have
* auto-generated name).
@@ -2252,6 +2615,17 @@ static constexpr const char *kMessagingDestinationName = "messaging.destination.
static constexpr const char *kMessagingDestinationPartitionId =
"messaging.destination.partition.id";
+/**
+ * The name of the destination subscription from which a message is consumed.
+ *
+ * Notes:
+
- Semantic conventions for individual messaging systems SHOULD document whether {@code
+ messaging.destination.subscription.name} is applicable and what it means in the context of that
+ system.
+ */
+static constexpr const char *kMessagingDestinationSubscriptionName =
+ "messaging.destination.subscription.name";
+
/**
* Low cardinality representation of the messaging destination name
*
@@ -2269,24 +2643,6 @@ static constexpr const char *kMessagingDestinationTemplate = "messaging.destinat
*/
static constexpr const char *kMessagingDestinationTemporary = "messaging.destination.temporary";
-/**
- * A boolean that is true if the publish message destination is anonymous (could be unnamed or have
- * auto-generated name).
- */
-static constexpr const char *kMessagingDestinationPublishAnonymous =
- "messaging.destination_publish.anonymous";
-
-/**
- * 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 *kMessagingDestinationPublishName =
- "messaging.destination_publish.name";
-
/**
* The size of the message body in bytes.
*
@@ -2339,12 +2695,6 @@ static constexpr const char *kMessagingOperationType = "messaging.operation.type
*/
static constexpr const char *kMessagingSystem = "messaging.system";
-/**
- * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not
- * producers.
- */
-static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
-
/**
* 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
@@ -2358,14 +2708,14 @@ static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.con
static constexpr const char *kMessagingKafkaMessageKey = "messaging.kafka.message.key";
/**
- * The offset of a record in the corresponding Kafka partition.
+ * A boolean that is true if the message is a tombstone.
*/
-static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
/**
- * A boolean that is true if the message is a tombstone.
+ * The offset of a record in the corresponding Kafka partition.
*/
-static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
+static constexpr const char *kMessagingKafkaOffset = "messaging.kafka.offset";
/**
* RabbitMQ message routing key.
@@ -2379,12 +2729,6 @@ static constexpr const char *kMessagingRabbitmqDestinationRoutingKey =
static constexpr const char *kMessagingRabbitmqMessageDeliveryTag =
"messaging.rabbitmq.message.delivery_tag";
-/**
- * Name of the RocketMQ producer/consumer group that is handling the message. The client type is
- * identified by the SpanKind.
- */
-static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
-
/**
* Model of message consumption. This only applies to consumer spans.
*/
@@ -2454,12 +2798,6 @@ static constexpr const char *kMessagingGcpPubsubMessageDeliveryAttempt =
static constexpr const char *kMessagingGcpPubsubMessageOrderingKey =
"messaging.gcp_pubsub.message.ordering_key";
-/**
- * The name of the subscription in the topic messages are received from.
- */
-static constexpr const char *kMessagingServicebusDestinationSubscriptionName =
- "messaging.servicebus.destination.subscription_name";
-
/**
* Describes the settlement
@@ -2480,12 +2818,6 @@ static constexpr const char *kMessagingServicebusMessageDeliveryCount =
static constexpr const char *kMessagingServicebusMessageEnqueuedTime =
"messaging.servicebus.message.enqueued_time";
-/**
- * The name of the consumer group the event consumer is associated with.
- */
-static constexpr const char *kMessagingEventhubsConsumerGroup =
- "messaging.eventhubs.consumer.group";
-
/**
* The UTC epoch seconds at which the message has been accepted and stored in the entity.
*/
@@ -2769,8 +3101,7 @@ static constexpr const char *kProcessRealUserName = "process.real_user.name";
static constexpr const char *kProcessRuntimeDescription = "process.runtime.description";
/**
- * The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of
- * the compiler.
+ * The name of the runtime of this process.
*/
static constexpr const char *kProcessRuntimeName = "process.runtime.name";
@@ -2814,11 +3145,6 @@ static constexpr const char *kProcessUserName = "process.user.name";
*/
static constexpr const char *kProcessVpid = "process.vpid";
-/**
- * The CPU state of the process.
- */
-static constexpr const char *kProcessCpuState = "process.cpu.state";
-
/**
* The error codes of the Connect
* request. Error codes are always string values.
@@ -3038,11 +3364,6 @@ static constexpr const char *kSystemDevice = "system.device";
*/
static constexpr const char *kSystemCpuLogicalNumber = "system.cpu.logical_number";
-/**
- * The state of the CPU
- */
-static constexpr const char *kSystemCpuState = "system.cpu.state";
-
/**
* The memory state
*/
@@ -3134,6 +3455,27 @@ static constexpr const char *kTelemetryDistroName = "telemetry.distro.name";
*/
static constexpr const char *kTelemetryDistroVersion = "telemetry.distro.version";
+/**
+ * The fully qualified human readable name of the test case.
+ */
+static constexpr const char *kTestCaseName = "test.case.name";
+
+/**
+ * The status of the actual test case result from test execution.
+ */
+static constexpr const char *kTestCaseResultStatus = "test.case.result.status";
+
+/**
+ * The human readable name of a test suite.
+ */
+static constexpr const char *kTestSuiteName = "test.suite.name";
+
+/**
+ * The status of the test suite run.
+ */
+static constexpr const char *kTestSuiteRunStatus = "test.suite.run.status";
+
/**
* Current "managed" thread ID (as opposed to OS thread ID).
*/
@@ -3213,12 +3555,6 @@ static constexpr const char *kTlsClientNotAfter = "tls.client.not_after";
*/
static constexpr const char *kTlsClientNotBefore = "tls.client.not_before";
-/**
- * Also called an SNI, this tells the server which hostname to which the client is attempting to
- * connect to.
- */
-static constexpr const char *kTlsClientServerName = "tls.client.server_name";
-
/**
* Distinguished name of subject of the x.509 certificate presented by the client.
*/
@@ -3481,6 +3817,102 @@ static constexpr const char *kUserAgentOriginal = "user_agent.original";
*/
static constexpr const char *kUserAgentVersion = "user_agent.version";
+/**
+ * User email address.
+ */
+static constexpr const char *kUserEmail = "user.email";
+
+/**
+ * User's full name
+ */
+static constexpr const char *kUserFullName = "user.full_name";
+
+/**
+ * Unique user hash to correlate information for a user in anonymized form.
+ *
+ * Notes:
+
- Useful if {@code user.id} or {@code user.name} contain confidential information and
+ cannot be used.
+ */
+static constexpr const char *kUserHash = "user.hash";
+
+/**
+ * Unique identifier of the user.
+ */
+static constexpr const char *kUserId = "user.id";
+
+/**
+ * Short name or login/username of the user.
+ */
+static constexpr const char *kUserName = "user.name";
+
+/**
+ * Array of user roles at the time of the event.
+ */
+static constexpr const char *kUserRoles = "user.roles";
+
+/**
+ * The type of garbage collection.
+ */
+static constexpr const char *kV8jsGcType = "v8js.gc.type";
+
+/**
+ * The name of the space type of heap memory.
+ *
+ * Notes:
+
+ */
+static constexpr const char *kV8jsHeapSpaceName = "v8js.heap.space.name";
+
+/**
+ * The ID of the change (pull request/merge request) if applicable. This is usually a unique (within
+ * repository) identifier generated by the VCS system.
+ */
+static constexpr const char *kVcsRepositoryChangeId = "vcs.repository.change.id";
+
+/**
+ * The human readable title of the change (pull request/merge request). This title is often a brief
+ * summary of the change and may get merged in to a ref as the commit summary.
+ */
+static constexpr const char *kVcsRepositoryChangeTitle = "vcs.repository.change.title";
+
+/**
+ * The name of the reference such as
+ * branch or tag in the repository.
+ */
+static constexpr const char *kVcsRepositoryRefName = "vcs.repository.ref.name";
+
+/**
+ * The revision, literally revised
+version, The revision most often refers to a commit object in Git, or a revision number in SVN.
+ *
+ * Notes:
+
- The revision can be a full hash value (see glossary), of
+the recorded change to a ref within a repository pointing to a commit commit object. It does not necessarily have to be a
+hash; it can simply define a revision number which
+is an integer that is monotonically increasing. In cases where it is identical to the {@code
+ref.name}, it SHOULD still be included. It is up to the implementer to decide which value to set as
+the revision based on the VCS system and situational context.
+ */
+static constexpr const char *kVcsRepositoryRefRevision = "vcs.repository.ref.revision";
+
+/**
+ * The type of the reference in the
+ * repository.
+ */
+static constexpr const char *kVcsRepositoryRefType = "vcs.repository.ref.type";
+
+/**
+ * The URL of the repository providing the complete
+ * address in order to locate and identify the repository.
+ */
+static constexpr const char *kVcsRepositoryUrlFull = "vcs.repository.url.full";
+
/**
* Additional description of the web engine (e.g. detailed version and edition information).
*/
@@ -3537,6 +3969,16 @@ static constexpr const char *kEc2 = "ec2";
static constexpr const char *kFargate = "fargate";
} // namespace AwsEcsLaunchtypeValues
+namespace CicdPipelineTaskTypeValues
+{
+/** build. */
+static constexpr const char *kBuild = "build";
+/** test. */
+static constexpr const char *kTest = "test";
+/** deploy. */
+static constexpr const char *kDeploy = "deploy";
+} // namespace CicdPipelineTaskTypeValues
+
namespace CloudPlatformValues
{
/** Alibaba Cloud Elastic Compute Service. */
@@ -3615,132 +4057,144 @@ static constexpr const char *kIbmCloud = "ibm_cloud";
static constexpr const char *kTencentCloud = "tencent_cloud";
} // namespace CloudProviderValues
-namespace ContainerCpuStateValues
+namespace CpuModeValues
{
-/** When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode
- * (Windows). */
+/** user. */
static constexpr const char *kUser = "user";
-/** When CPU is used by the system (host OS). */
+/** system. */
static constexpr const char *kSystem = "system";
-/** When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel
- * mode (Windows). */
+/** nice. */
+static constexpr const char *kNice = "nice";
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** iowait. */
+static constexpr const char *kIowait = "iowait";
+/** interrupt. */
+static constexpr const char *kInterrupt = "interrupt";
+/** steal. */
+static constexpr const char *kSteal = "steal";
+/** kernel. */
static constexpr const char *kKernel = "kernel";
-} // namespace ContainerCpuStateValues
+} // namespace CpuModeValues
-namespace DbClientConnectionsStateValues
+namespace DbClientConnectionStateValues
{
/** idle. */
static constexpr const char *kIdle = "idle";
/** used. */
static constexpr const char *kUsed = "used";
-} // namespace DbClientConnectionsStateValues
+} // namespace DbClientConnectionStateValues
namespace DbSystemValues
{
/** Some other SQL database. Fallback only. See notes. */
static constexpr const char *kOtherSql = "other_sql";
-/** Microsoft SQL Server. */
-static constexpr const char *kMssql = "mssql";
-/** Microsoft SQL Server Compact. */
-static constexpr const char *kMssqlcompact = "mssqlcompact";
-/** MySQL. */
-static constexpr const char *kMysql = "mysql";
-/** Oracle Database. */
-static constexpr const char *kOracle = "oracle";
-/** IBM Db2. */
-static constexpr const char *kDb2 = "db2";
-/** PostgreSQL. */
-static constexpr const char *kPostgresql = "postgresql";
-/** Amazon Redshift. */
-static constexpr const char *kRedshift = "redshift";
-/** Apache Hive. */
-static constexpr const char *kHive = "hive";
-/** Cloudscape. */
-static constexpr const char *kCloudscape = "cloudscape";
-/** HyperSQL DataBase. */
-static constexpr const char *kHsqldb = "hsqldb";
-/** Progress Database. */
-static constexpr const char *kProgress = "progress";
-/** SAP MaxDB. */
-static constexpr const char *kMaxdb = "maxdb";
-/** SAP HANA. */
-static constexpr const char *kHanadb = "hanadb";
-/** Ingres. */
-static constexpr const char *kIngres = "ingres";
-/** FirstSQL. */
-static constexpr const char *kFirstsql = "firstsql";
-/** EnterpriseDB. */
-static constexpr const char *kEdb = "edb";
-/** InterSystems Caché. */
-static constexpr const char *kCache = "cache";
/** Adabas (Adaptable Database System). */
static constexpr const char *kAdabas = "adabas";
-/** Firebird. */
-static constexpr const char *kFirebird = "firebird";
+/** Deprecated, use `intersystems_cache` instead. */
+static constexpr const char *kCache = "cache";
+/** InterSystems Caché. */
+static constexpr const char *kIntersystemsCache = "intersystems_cache";
+/** Apache Cassandra. */
+static constexpr const char *kCassandra = "cassandra";
+/** ClickHouse. */
+static constexpr const char *kClickhouse = "clickhouse";
+/** Deprecated, use `other_sql` instead. */
+static constexpr const char *kCloudscape = "cloudscape";
+/** CockroachDB. */
+static constexpr const char *kCockroachdb = "cockroachdb";
+/** Deprecated, no replacement at this time. */
+static constexpr const char *kColdfusion = "coldfusion";
+/** Microsoft Azure Cosmos DB. */
+static constexpr const char *kCosmosdb = "cosmosdb";
+/** Couchbase. */
+static constexpr const char *kCouchbase = "couchbase";
+/** CouchDB. */
+static constexpr const char *kCouchdb = "couchdb";
+/** IBM Db2. */
+static constexpr const char *kDb2 = "db2";
/** Apache Derby. */
static constexpr const char *kDerby = "derby";
+/** Amazon DynamoDB. */
+static constexpr const char *kDynamodb = "dynamodb";
+/** EnterpriseDB. */
+static constexpr const char *kEdb = "edb";
+/** Elasticsearch. */
+static constexpr const char *kElasticsearch = "elasticsearch";
/** FileMaker. */
static constexpr const char *kFilemaker = "filemaker";
+/** Firebird. */
+static constexpr const char *kFirebird = "firebird";
+/** Deprecated, use `other_sql` instead. */
+static constexpr const char *kFirstsql = "firstsql";
+/** Apache Geode. */
+static constexpr const char *kGeode = "geode";
+/** H2. */
+static constexpr const char *kH2 = "h2";
+/** SAP HANA. */
+static constexpr const char *kHanadb = "hanadb";
+/** Apache HBase. */
+static constexpr const char *kHbase = "hbase";
+/** Apache Hive. */
+static constexpr const char *kHive = "hive";
+/** HyperSQL DataBase. */
+static constexpr const char *kHsqldb = "hsqldb";
+/** InfluxDB. */
+static constexpr const char *kInfluxdb = "influxdb";
/** Informix. */
static constexpr const char *kInformix = "informix";
+/** Ingres. */
+static constexpr const char *kIngres = "ingres";
/** InstantDB. */
static constexpr const char *kInstantdb = "instantdb";
/** InterBase. */
static constexpr const char *kInterbase = "interbase";
/** MariaDB. */
static constexpr const char *kMariadb = "mariadb";
+/** SAP MaxDB. */
+static constexpr const char *kMaxdb = "maxdb";
+/** Memcached. */
+static constexpr const char *kMemcached = "memcached";
+/** MongoDB. */
+static constexpr const char *kMongodb = "mongodb";
+/** Microsoft SQL Server. */
+static constexpr const char *kMssql = "mssql";
+/** Deprecated, Microsoft SQL Server Compact is discontinued. */
+static constexpr const char *kMssqlcompact = "mssqlcompact";
+/** MySQL. */
+static constexpr const char *kMysql = "mysql";
+/** Neo4j. */
+static constexpr const char *kNeo4j = "neo4j";
/** Netezza. */
static constexpr const char *kNetezza = "netezza";
+/** OpenSearch. */
+static constexpr const char *kOpensearch = "opensearch";
+/** Oracle Database. */
+static constexpr const char *kOracle = "oracle";
/** Pervasive PSQL. */
static constexpr const char *kPervasive = "pervasive";
/** PointBase. */
static constexpr const char *kPointbase = "pointbase";
+/** PostgreSQL. */
+static constexpr const char *kPostgresql = "postgresql";
+/** Progress Database. */
+static constexpr const char *kProgress = "progress";
+/** Redis. */
+static constexpr const char *kRedis = "redis";
+/** Amazon Redshift. */
+static constexpr const char *kRedshift = "redshift";
+/** Cloud Spanner. */
+static constexpr const char *kSpanner = "spanner";
/** SQLite. */
static constexpr const char *kSqlite = "sqlite";
/** Sybase. */
static constexpr const char *kSybase = "sybase";
/** Teradata. */
static constexpr const char *kTeradata = "teradata";
-/** Vertica. */
-static constexpr const char *kVertica = "vertica";
-/** H2. */
-static constexpr const char *kH2 = "h2";
-/** ColdFusion IMQ. */
-static constexpr const char *kColdfusion = "coldfusion";
-/** Apache Cassandra. */
-static constexpr const char *kCassandra = "cassandra";
-/** Apache HBase. */
-static constexpr const char *kHbase = "hbase";
-/** MongoDB. */
-static constexpr const char *kMongodb = "mongodb";
-/** Redis. */
-static constexpr const char *kRedis = "redis";
-/** Couchbase. */
-static constexpr const char *kCouchbase = "couchbase";
-/** CouchDB. */
-static constexpr const char *kCouchdb = "couchdb";
-/** Microsoft Azure Cosmos DB. */
-static constexpr const char *kCosmosdb = "cosmosdb";
-/** Amazon DynamoDB. */
-static constexpr const char *kDynamodb = "dynamodb";
-/** Neo4j. */
-static constexpr const char *kNeo4j = "neo4j";
-/** Apache Geode. */
-static constexpr const char *kGeode = "geode";
-/** Elasticsearch. */
-static constexpr const char *kElasticsearch = "elasticsearch";
-/** Memcached. */
-static constexpr const char *kMemcached = "memcached";
-/** CockroachDB. */
-static constexpr const char *kCockroachdb = "cockroachdb";
-/** OpenSearch. */
-static constexpr const char *kOpensearch = "opensearch";
-/** ClickHouse. */
-static constexpr const char *kClickhouse = "clickhouse";
-/** Cloud Spanner. */
-static constexpr const char *kSpanner = "spanner";
/** Trino. */
static constexpr const char *kTrino = "trino";
+/** Vertica. */
+static constexpr const char *kVertica = "vertica";
} // namespace DbSystemValues
namespace DbCassandraConsistencyLevelValues
@@ -3811,6 +4265,14 @@ static constexpr const char *kQueryPlan = "QueryPlan";
static constexpr const char *kExecuteJavascript = "ExecuteJavaScript";
} // namespace DbCosmosdbOperationTypeValues
+namespace DeploymentStatusValues
+{
+/** failed. */
+static constexpr const char *kFailed = "failed";
+/** succeeded. */
+static constexpr const char *kSucceeded = "succeeded";
+} // namespace DeploymentStatusValues
+
namespace AndroidStateValues
{
/** Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has
@@ -3824,6 +4286,26 @@ static constexpr const char *kBackground = "background";
static constexpr const char *kForeground = "foreground";
} // namespace AndroidStateValues
+namespace ContainerCpuStateValues
+{
+/** When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode
+ * (Windows). */
+static constexpr const char *kUser = "user";
+/** When CPU is used by the system (host OS). */
+static constexpr const char *kSystem = "system";
+/** When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel
+ * mode (Windows). */
+static constexpr const char *kKernel = "kernel";
+} // namespace ContainerCpuStateValues
+
+namespace DbClientConnectionsStateValues
+{
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** used. */
+static constexpr const char *kUsed = "used";
+} // namespace DbClientConnectionsStateValues
+
namespace StateValues
{
/** idle. */
@@ -3888,6 +4370,16 @@ static constexpr const char *kInproc = "inproc";
static constexpr const char *kOther = "other";
} // namespace NetTransportValues
+namespace ProcessCpuStateValues
+{
+/** system. */
+static constexpr const char *kSystem = "system";
+/** user. */
+static constexpr const char *kUser = "user";
+/** wait. */
+static constexpr const char *kWait = "wait";
+} // namespace ProcessCpuStateValues
+
namespace MessageTypeValues
{
/** sent. */
@@ -3896,6 +4388,24 @@ static constexpr const char *kSent = "SENT";
static constexpr const char *kReceived = "RECEIVED";
} // namespace MessageTypeValues
+namespace SystemCpuStateValues
+{
+/** user. */
+static constexpr const char *kUser = "user";
+/** system. */
+static constexpr const char *kSystem = "system";
+/** nice. */
+static constexpr const char *kNice = "nice";
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** iowait. */
+static constexpr const char *kIowait = "iowait";
+/** interrupt. */
+static constexpr const char *kInterrupt = "interrupt";
+/** steal. */
+static constexpr const char *kSteal = "steal";
+} // namespace SystemCpuStateValues
+
namespace SystemProcessesStatusValues
{
/** running. */
@@ -3960,12 +4470,46 @@ static constexpr const char *kTimer = "timer";
static constexpr const char *kOther = "other";
} // namespace FaasTriggerValues
+namespace GenAiOperationNameValues
+{
+/** Chat completion operation such as [OpenAI Chat
+ * API](https://platform.openai.com/docs/api-reference/chat). */
+static constexpr const char *kChat = "chat";
+/** Text completions operation such as [OpenAI Completions API
+ * (Legacy)](https://platform.openai.com/docs/api-reference/completions). */
+static constexpr const char *kTextCompletion = "text_completion";
+} // namespace GenAiOperationNameValues
+
namespace GenAiSystemValues
{
/** OpenAI. */
static constexpr const char *kOpenai = "openai";
+/** Vertex AI. */
+static constexpr const char *kVertexAi = "vertex_ai";
+/** Anthropic. */
+static constexpr const char *kAnthropic = "anthropic";
+/** Cohere. */
+static constexpr const char *kCohere = "cohere";
} // namespace GenAiSystemValues
+namespace GenAiTokenTypeValues
+{
+/** Input tokens (prompt, input, etc.). */
+static constexpr const char *kInput = "input";
+/** Output tokens (completion, response, etc.). */
+static constexpr const char *kCompletion = "output";
+} // namespace GenAiTokenTypeValues
+
+namespace GoMemoryTypeValues
+{
+/** Memory allocated from the heap that is reserved for stack space, whether or not it is currently
+ * in-use. */
+static constexpr const char *kStack = "stack";
+/** Memory used by the Go runtime, excluding other categories of memory usage described in this
+ * enumeration. */
+static constexpr const char *kOther = "other";
+} // namespace GoMemoryTypeValues
+
namespace GraphqlOperationTypeValues
{
/** GraphQL query. */
@@ -4054,6 +4598,14 @@ static constexpr const char *kTimedWaiting = "timed_waiting";
static constexpr const char *kTerminated = "terminated";
} // namespace JvmThreadStateValues
+namespace LinuxMemorySlabStateValues
+{
+/** reclaimable. */
+static constexpr const char *kReclaimable = "reclaimable";
+/** unreclaimable. */
+static constexpr const char *kUnreclaimable = "unreclaimable";
+} // namespace LinuxMemorySlabStateValues
+
namespace LogIostreamValues
{
/** Logs from stdout stream. */
@@ -4074,10 +4626,12 @@ 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 delivered to or processed by a consumer. */
-static constexpr const char *kDeliver = "process";
+/** One or more messages are processed by a consumer. */
+static constexpr const char *kProcess = "process";
/** One or more messages are settled. */
static constexpr const char *kSettle = "settle";
+/** Deprecated. Use `process` instead. */
+static constexpr const char *kDeliver = "deliver";
} // namespace MessagingOperationTypeValues
namespace MessagingSystemValues
@@ -4102,6 +4656,8 @@ static constexpr const char *kKafka = "kafka";
static constexpr const char *kRabbitmq = "rabbitmq";
/** Apache RocketMQ. */
static constexpr const char *kRocketmq = "rocketmq";
+/** Apache Pulsar. */
+static constexpr const char *kPulsar = "pulsar";
} // namespace MessagingSystemValues
namespace MessagingRocketmqConsumptionModelValues
@@ -4214,6 +4770,8 @@ static constexpr const char *kUdp = "udp";
static constexpr const char *kPipe = "pipe";
/** Unix domain socket. */
static constexpr const char *kUnix = "unix";
+/** QUIC. */
+static constexpr const char *kQuic = "quic";
} // namespace NetworkTransportValues
namespace NetworkTypeValues
@@ -4283,16 +4841,6 @@ static constexpr const char *kMajor = "major";
static constexpr const char *kMinor = "minor";
} // namespace ProcessPagingFaultTypeValues
-namespace ProcessCpuStateValues
-{
-/** system. */
-static constexpr const char *kSystem = "system";
-/** user. */
-static constexpr const char *kUser = "user";
-/** wait. */
-static constexpr const char *kWait = "wait";
-} // namespace ProcessCpuStateValues
-
namespace RpcConnectRpcErrorCodeValues
{
/** cancelled. */
@@ -4409,24 +4957,6 @@ static constexpr const char *kLongPolling = "long_polling";
static constexpr const char *kWebSockets = "web_sockets";
} // namespace SignalrTransportValues
-namespace SystemCpuStateValues
-{
-/** user. */
-static constexpr const char *kUser = "user";
-/** system. */
-static constexpr const char *kSystem = "system";
-/** nice. */
-static constexpr const char *kNice = "nice";
-/** idle. */
-static constexpr const char *kIdle = "idle";
-/** iowait. */
-static constexpr const char *kIowait = "iowait";
-/** interrupt. */
-static constexpr const char *kInterrupt = "interrupt";
-/** steal. */
-static constexpr const char *kSteal = "steal";
-} // namespace SystemCpuStateValues
-
namespace SystemMemoryStateValues
{
/** used. */
@@ -4559,6 +5089,30 @@ static constexpr const char *kSwift = "swift";
static constexpr const char *kWebjs = "webjs";
} // namespace TelemetrySdkLanguageValues
+namespace TestCaseResultStatusValues
+{
+/** pass. */
+static constexpr const char *kPass = "pass";
+/** fail. */
+static constexpr const char *kFail = "fail";
+} // namespace TestCaseResultStatusValues
+
+namespace TestSuiteRunStatusValues
+{
+/** success. */
+static constexpr const char *kSuccess = "success";
+/** failure. */
+static constexpr const char *kFailure = "failure";
+/** skipped. */
+static constexpr const char *kSkipped = "skipped";
+/** aborted. */
+static constexpr const char *kAborted = "aborted";
+/** timed_out. */
+static constexpr const char *kTimedOut = "timed_out";
+/** in_progress. */
+static constexpr const char *kInProgress = "in_progress";
+} // namespace TestSuiteRunStatusValues
+
namespace TlsProtocolNameValues
{
/** ssl. */
@@ -4567,6 +5121,40 @@ static constexpr const char *kSsl = "ssl";
static constexpr const char *kTls = "tls";
} // namespace TlsProtocolNameValues
+namespace V8jsGcTypeValues
+{
+/** Major (Mark Sweep Compact). */
+static constexpr const char *kMajor = "major";
+/** Minor (Scavenge). */
+static constexpr const char *kMinor = "minor";
+/** Incremental (Incremental Marking). */
+static constexpr const char *kIncremental = "incremental";
+/** Weak Callbacks (Process Weak Callbacks). */
+static constexpr const char *kWeakcb = "weakcb";
+} // namespace V8jsGcTypeValues
+
+namespace V8jsHeapSpaceNameValues
+{
+/** New memory space. */
+static constexpr const char *kNewSpace = "new_space";
+/** Old memory space. */
+static constexpr const char *kOldSpace = "old_space";
+/** Code memory space. */
+static constexpr const char *kCodeSpace = "code_space";
+/** Map memory space. */
+static constexpr const char *kMapSpace = "map_space";
+/** Large object memory space. */
+static constexpr const char *kLargeObjectSpace = "large_object_space";
+} // namespace V8jsHeapSpaceNameValues
+
+namespace VcsRepositoryRefTypeValues
+{
+/** [branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch). */
+static constexpr const char *kBranch = "branch";
+/** [tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag). */
+static constexpr const char *kTag = "tag";
+} // namespace VcsRepositoryRefTypeValues
+
} // namespace SemanticConventions
} // namespace trace
OPENTELEMETRY_END_NAMESPACE
diff --git a/buildscripts/semantic-convention/generate.sh b/buildscripts/semantic-convention/generate.sh
index 2bcd07e2f9..cf8aa1d70c 100755
--- a/buildscripts/semantic-convention/generate.sh
+++ b/buildscripts/semantic-convention/generate.sh
@@ -19,10 +19,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.26.0
+SEMCONV_VERSION=1.27.0
# repository: https://github.com/open-telemetry/build-tools
-GENERATOR_VERSION=0.24.0
+GENERATOR_VERSION=0.25.0
SPEC_VERSION=v$SEMCONV_VERSION
SCHEMA_URL=https://opentelemetry.io/schemas/$SEMCONV_VERSION
@@ -63,7 +63,7 @@ docker run --rm \
-v ${SCRIPT_DIR}/templates:/templates${USE_MOUNT_OPTION} \
-v ${ROOT_DIR}/api/include/opentelemetry/trace/:/output${USE_MOUNT_OPTION} \
otel/semconvgen:$GENERATOR_VERSION \
- --only span,event,attribute_group,scope \
+ --only span,event,attribute_group\
-f /source code \
--template /templates/SemanticAttributes.h.j2 \
--output /output/semantic_conventions.h \
diff --git a/docs/maintaining-dependencies.md b/docs/maintaining-dependencies.md
index a1969785d8..1c79810029 100644
--- a/docs/maintaining-dependencies.md
+++ b/docs/maintaining-dependencies.md
@@ -16,7 +16,7 @@ and inspect the commit for the last upgrade.
## opentelemetry-proto
-### Comments
+### Comments (opentelemetry-proto)
Unlike other opentelemetry SIGs, opentelemetry-cpp generates code
from opentelemetry-proto as part of the opentelemetry-cpp build.
@@ -30,7 +30,7 @@ so that generated code is never checked in.
This allows more flexibility, should the compiler (protobuf) be
upgraded even when the source code (opentelemetry-proto) is unchanged.
-### Origin
+### Origin (opentelemetry-proto)
The repository for opentelemetry-proto is:
@@ -40,7 +40,7 @@ Check release notes at:
* [release-notes](https://github.com/open-telemetry/opentelemetry-proto/releases)
-### Upgrade
+### Upgrade (opentelemetry-proto)
When upgrading opentelemetry-proto to a newer release,
a few places in the code need adjustment.
@@ -310,7 +310,7 @@ index 7b84c2b7..3161ffb1 100644
bazel_dep(name = "prometheus-cpp", version = "1.2.4", repo_name = "com_github_jupp0r_prometheus_cpp")
```
-### Known issues
+### Known issues (opentelemetry-proto)
For bazel, two different methods to build exists.
@@ -319,3 +319,126 @@ This option does not depend on bazel central.
Secondly, there is also a build using modules, with file `MODULE.bazel`.
This option does depend on bazel central, and CI depends on it.
+
+## semantic-conventions and build-tools
+
+### Comments (semantic-conventions)
+
+Some code in opentelemetry-cpp is generated automatically, namely files:
+
+* api/include/opentelemetry/trace/semantic_conventions.h
+* sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
+
+The semantic conventions C++ declarations are generated using:
+
+* data represented in yaml ("semantic-conventions")
+* a code generator ("build-tools")
+
+This generation is not done as part of the build,
+it is done once by maintainers, and the generated code
+is added (checked in) in the opentelemetry-cpp repository.
+
+### Origin (semantic-conventions)
+
+The repository for semantic-conventions is:
+
+* [repository](https://github.com/open-telemetry/semantic-conventions)
+
+Check release notes at:
+
+* [release-notes](https://github.com/open-telemetry/semantic-conventions/releases)
+
+The repository for build-tools is:
+
+* [repository](https://github.com/open-telemetry/build-tools)
+
+Check release notes at:
+
+* [release-notes](https://github.com/open-telemetry/build-tools/releases)
+
+Semantic conventions and build-tools works together,
+make sure to use the proper version of build-tools
+that is required to use a given version of semantic-conventions.
+
+### Upgrade (semantic-conventions)
+
+When upgrading semantic-conventions to a newer release,
+a few places in the code need adjustment.
+
+In this example, we upgrade from semantic-conventions 1.26.0 to 1.27.0
+
+In this case, semantic-conventions 1.27.0 also
+require a new version of build-tools,
+because the yaml format for the data changed.
+
+In this example, we upgrade from build-tools 0.24.0 to 0.25.0
+
+#### file buildscripts/semantic-convention/generate.sh
+
+Update the line pointing to the semantic-conventions tag.
+
+```text
+SEMCONV_VERSION=1.27.0
+```
+
+Update the line pointing to the build-tools tag.
+
+```text
+GENERATOR_VERSION=0.25.0
+```
+
+Typical change:
+
+```shell
+[malff@malff-desktop opentelemetry-cpp]$ git diff buildscripts/semantic-convention/generate.sh
+diff --git a/buildscripts/semantic-convention/generate.sh b/buildscripts/semantic-convention/generate.sh
+index 2bcd07e2..8ad3292e 100755
+--- a/buildscripts/semantic-convention/generate.sh
++++ b/buildscripts/semantic-convention/generate.sh
+@@ -19,10 +19,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.26.0
++SEMCONV_VERSION=1.27.0
+
+ # repository: https://github.com/open-telemetry/build-tools
+-GENERATOR_VERSION=0.24.0
++GENERATOR_VERSION=0.25.0
+
+ SPEC_VERSION=v$SEMCONV_VERSION
+ SCHEMA_URL=https://opentelemetry.io/schemas/$SEMCONV_VERSION
+```
+
+This change alone does nothing, the next step is to execute the generate.sh
+script.
+
+If generation is successful, the generated code contains the new schema URL:
+
+```shell
+[malff@malff-desktop opentelemetry-cpp]$ find . -name semantic_conventions.h
+./api/include/opentelemetry/trace/semantic_conventions.h
+./sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
+[malff@malff-desktop opentelemetry-cpp]$ grep kSchemaUrl ./api/include/opentelemetry/trace/semantic_conventions.h
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.27.0";
+[malff@malff-desktop opentelemetry-cpp]$ grep kSchemaUrl ./sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.27.0";
+```
+
+Apply clang-format on the generated code, and check-in changes.
+
+### Known issues (semantic-conventions)
+
+Depending on tooling changes,
+the generate.sh script may need adjustments.
+
+Depending on changes in code generation,
+the template used to generate code may need adjustments.
+
+This template is implemented in file
+ `buildscripts/semantic-convention/templates/SemanticAttributes.h.j2`.
+
+Last, in some special case like name collisions for a given symbol,
+the template itself may need to be adjusted for special logic.
+
+See for example how `messaging.client_id` is treated.
diff --git a/docs/semantic-conventions.md b/docs/semantic-conventions.md
deleted file mode 100644
index 01695c3e67..0000000000
--- a/docs/semantic-conventions.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Semantic Conventions
-
-## Tooling
-
-The following files
-
-* [trace/semantic_conventions.h](/api/include/opentelemetry/trace/semantic_conventions.h)
-* [sdk/resource/semantic_conventions.h](/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h)
-
-are generated automatically.
-
-The source data is in YAML format, located in the
-[specification](https://github.com/open-telemetry/opentelemetry-specification/blob/main/semantic_conventions/README.md).
-
-A code [generator](https://github.com/open-telemetry/build-tools/blob/main/semantic-conventions/README.md)
-parses the YAML data from the specs,
-and generate code for various languages using a template engine.
-
-For opentelemetry-cpp, the templates are located in
-[buildscripts](/buildscripts/semantic-convention/templates/SemanticAttributes.h.j2).
-
-A [generate.sh](/buildscripts/semantic-convention/generate.sh) script
-downloads the specs, invokes the generator using Docker,
-and generates code for opentelemetry-cpp.
-
-## Instructions
-
-### Find latest specifications
-
-Check for the latest
-[specification](https://github.com/open-telemetry/opentelemetry-specification/releases)
-release, and note the release tag number.
-
-For example, tag v1.12.0
-
-### Use latest specifications
-
-Set the `SEMCONV_VERSION` number in the
-[generate.sh](/buildscripts/semantic-convention/generate.sh) script.
-
-For example,
-
-```shell
-SEMCONV_VERSION=1.12.0
-```
-
-### Generate code
-
-Run the generate.sh script.
-
-Inspect the generated files,
-to verify they were updated (check the version number in SCHEMA_URL).
-
-For example,
-
-```cpp
-static constexpr const char *SCHEMA_URL = "https://opentelemetry.io/schemas/1.12.0";
-```
-
-### Format code
-
-Apply clang-format.
-
-### Update CHANGELOG
-
-Add a `CHANGELOG` entry for the semantic conventions.
-
-For example,
-
-```md
-* [SEMANTIC CONVENTIONS] Upgrade to version 1.12.0
-```
-
-### Commit
-
-Commit and file a pull request.
diff --git a/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h b/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
index 03996f2621..9ff985be4d 100644
--- a/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
+++ b/sdk/include/opentelemetry/sdk/resource/semantic_conventions.h
@@ -24,7 +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.26.0";
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.27.0";
/**
* Uniquely identifies the framework API revision offered by a version ({@code os.version}) of the
@@ -33,6 +33,69 @@ static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.26
*/
static constexpr const char *kAndroidOsApiLevel = "android.os.api_level";
+/**
+ * The provenance filename of the built attestation which directly relates to the build artifact
+ * filename. This filename SHOULD accompany the artifact at publish time. See the SLSA
+ * Relationship specification for more information.
+ */
+static constexpr const char *kArtifactAttestationFilename = "artifact.attestation.filename";
+
+/**
+ * The full hash value (see
+ * glossary), of the built attestation. Some envelopes in the software attestation space also
+ * refer to this as the digest.
+ */
+static constexpr const char *kArtifactAttestationHash = "artifact.attestation.hash";
+
+/**
+ * The id of the build software attestation.
+ */
+static constexpr const char *kArtifactAttestationId = "artifact.attestation.id";
+
+/**
+ * The human readable file name of the artifact, typically generated during build and release
+processes. Often includes the package name and version in the file name.
+ *
+ * Notes:
+
- This file name can also act as the Package Name in cases where the
+package ecosystem maps accordingly. Additionally, the artifact can be published for others,
+but that is not a guarantee.
+ */
+static constexpr const char *kArtifactFilename = "artifact.filename";
+
+/**
+ * The full hash value (see
+glossary), often found in checksum.txt on a release of the artifact and used to verify package
+integrity.
+ *
+ * Notes:
+
- The specific algorithm used to create the cryptographic hash value is
+not defined. In situations where an artifact has multiple
+cryptographic hashes, it is up to the implementer to choose which
+hash value to set here; this should be the most secure hash algorithm
+that is suitable for the situation and consistent with the
+corresponding attestation. The implementer can then provide the other
+hash values through an additional set of attribute extensions as they
+deem necessary.
+ */
+static constexpr const char *kArtifactHash = "artifact.hash";
+
+/**
+ * The Package URL of the package artifact provides a
+ * standard way to identify and locate the packaged artifact.
+ */
+static constexpr const char *kArtifactPurl = "artifact.purl";
+
+/**
+ * The version of the artifact.
+ */
+static constexpr const char *kArtifactVersion = "artifact.version";
+
/**
* Rate-limiting result, shows whether the lease was acquired or contains a rejection reason
*/
@@ -399,6 +462,12 @@ href="https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.ht
*/
static constexpr const char *kAwsS3UploadId = "aws.s3.upload_id";
+/**
+ * The unique identifier of the service request. It's generated by the Azure service and returned
+ * with the response.
+ */
+static constexpr const char *kAzServiceRequestId = "az.service_request_id";
+
/**
* Array of brand name and version separated by a space
*
@@ -445,6 +514,39 @@ provides.
*/
static constexpr const char *kBrowserPlatform = "browser.platform";
+/**
+ * The human readable name of the pipeline within a CI/CD system.
+ */
+static constexpr const char *kCicdPipelineName = "cicd.pipeline.name";
+
+/**
+ * The unique identifier of a pipeline run within a CI/CD system.
+ */
+static constexpr const char *kCicdPipelineRunId = "cicd.pipeline.run.id";
+
+/**
+ * The human readable name of a task within a pipeline. Task here most closely aligns with a computing process in a pipeline.
+ * Other terms for tasks include commands, steps, and procedures.
+ */
+static constexpr const char *kCicdPipelineTaskName = "cicd.pipeline.task.name";
+
+/**
+ * The unique identifier of a task run within a pipeline.
+ */
+static constexpr const char *kCicdPipelineTaskRunId = "cicd.pipeline.task.run.id";
+
+/**
+ * The URL of the pipeline run providing the
+ * complete address in order to locate and identify the pipeline run.
+ */
+static constexpr const char *kCicdPipelineTaskRunUrlFull = "cicd.pipeline.task.run.url.full";
+
+/**
+ * The type of the task within a pipeline.
+ */
+static constexpr const char *kCicdPipelineTaskType = "cicd.pipeline.task.type";
+
/**
* Client address - domain name if available without reverse DNS lookup; otherwise, IP address or
Unix domain socket name.
@@ -525,7 +627,7 @@ Lambda: The function ARN. Take care
not to use the "invoked ARN" directly but replace any alias suffix with
-the resolved function version, as the same runtime instance may be invokable with multiple different
+the resolved function version, as the same runtime instance may be invocable with multiple different
aliases. - GCP: The URI of the resource
- Azure: The identify Docker
@@ -690,26 +787,36 @@ static constexpr const char *kContainerName = "container.name";
*/
static constexpr const char *kContainerRuntime = "container.runtime";
+/**
+ * The mode of the CPU
+ */
+static constexpr const char *kCpuMode = "cpu.mode";
+
/**
* The name of the connection pool; unique within the instrumented application. In case the
- * connection pool implementation doesn't provide a name, instrumentation should use a combination
- * of {@code server.address} and {@code server.port} attributes formatted as {@code
- * server.address:server.port}.
+ * connection pool implementation doesn't provide a name, instrumentation SHOULD use a combination
+ * of parameters that would make the name unique, for example, combining attributes {@code
+ * server.address}, {@code server.port}, and {@code db.namespace}, formatted as {@code
+ * server.address:server.port/db.namespace}. Instrumentations that generate connection pool name
+ * following different patterns SHOULD document it.
*/
-static constexpr const char *kDbClientConnectionsPoolName = "db.client.connections.pool.name";
+static constexpr const char *kDbClientConnectionPoolName = "db.client.connection.pool.name";
/**
* The state of a connection in the pool
*/
-static constexpr const char *kDbClientConnectionsState = "db.client.connections.state";
+static constexpr const char *kDbClientConnectionState = "db.client.connection.state";
/**
* The name of a collection (table, container) within the database.
*
*
Notes:
-
- If the collection name is parsed from the query, it SHOULD match the value provided in
-the query and may be qualified with the schema and database name. It is RECOMMENDED to capture the
-value as provided by the application without attempting to do any case normalization.
+ - It is RECOMMENDED to capture the value as provided by the application without attempting
+to do any case normalization. If the collection name is parsed from the query text, it SHOULD be the
+first collection name found in the query and it SHOULD match the value provided in the query text
+including any schema and database name prefix. For batch operations, if the individual operations
+are known to have the same collection name then that collection name SHOULD be used, otherwise
+{@code db.collection.name} SHOULD NOT be captured.
*/
static constexpr const char *kDbCollectionName = "db.collection.name";
@@ -727,17 +834,42 @@ provided by the application without attempting to do any case normalization. batch operation.
+ *
+ * Notes:
+
- Operations are only considered batches when they contain two or more operations, and so
+ {@code db.operation.batch.size} SHOULD never be {@code 1}.
+ */
+static constexpr const char *kDbOperationBatchSize = "db.operation.batch.size";
+
/**
* The name of the operation or command being executed.
*
* Notes:
- It is RECOMMENDED to capture the value as provided by the application without attempting
- to do any case normalization.
+to do any case normalization. If the operation name is parsed from the query text, it SHOULD be the
+first operation name found in the query. For batch operations, if the individual operations are
+known to have the same operation name then that operation name SHOULD be used prepended by {@code
+BATCH}, otherwise {@code db.operation.name} SHOULD be {@code BATCH} or some other database system
+specific term if more applicable.
*/
static constexpr const char *kDbOperationName = "db.operation.name";
/**
* The database query being executed.
+ *
+ * Notes:
+
- For sanitization see Sanitization of {@code
+db.query.text}. For batch operations, if the individual operations are known to have the same
+query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD
+be concatenated with separator {@code ;} or some other database system specific separator if more
+applicable. Even though parameterized query text can potentially have sensitive data, by using a
+parameterized query the user is giving a strong signal that any sensitive data will be passed as
+parameter values, and the benefit to observability of capturing the static part of the query text by
+default outweighs the risk.
*/
static constexpr const char *kDbQueryText = "db.query.text";
@@ -819,11 +951,6 @@ static constexpr const char *kDbCosmosdbStatusCode = "db.cosmosdb.status_code";
*/
static constexpr const char *kDbCosmosdbSubStatusCode = "db.cosmosdb.sub_status_code";
-/**
- * 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.
*/
@@ -834,15 +961,30 @@ static constexpr const char *kDbElasticsearchNodeName = "db.elasticsearch.node.n
environment (aka deployment tier).
*
* Notes:
-
- {@code deployment.environment} does not affect the uniqueness constraints defined through
-the {@code service.namespace}, {@code service.name} and {@code service.instance.id} resource
+
- {@code deployment.environment.name} does not affect the uniqueness constraints defined
+through the {@code service.namespace}, {@code service.name} and {@code service.instance.id} resource
attributes. This implies that resources carrying the following attribute combinations MUST be
considered to be identifying the same service:
- {@code service.name=frontend}, {@code
-deployment.environment=production}
- {@code service.name=frontend}, {@code
-deployment.environment=staging}.
+deployment.environment.name=production}
- {@code service.name=frontend}, {@code
+deployment.environment.name=staging}.
*/
-static constexpr const char *kDeploymentEnvironment = "deployment.environment";
+static constexpr const char *kDeploymentEnvironmentName = "deployment.environment.name";
+
+/**
+ * The id of the deployment.
+ */
+static constexpr const char *kDeploymentId = "deployment.id";
+
+/**
+ * The name of the deployment.
+ */
+static constexpr const char *kDeploymentName = "deployment.name";
+
+/**
+ * The status of the deployment.
+ */
+static constexpr const char *kDeploymentStatus = "deployment.status";
/**
* Deprecated use the {@code device.app.lifecycle} event definition including {@code android.state}
@@ -855,6 +997,14 @@ static constexpr const char *kDeploymentEnvironment = "deployment.environment";
*/
static constexpr const char *kAndroidState = "android.state";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kContainerCpuState = "container.cpu.state";
+
/**
* Deprecated, use {@code db.collection.name} instead.
*
@@ -879,6 +1029,14 @@ static constexpr const char *kDbConnectionString = "db.connection_string";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
+/**
+ * Deprecated, use {@code db.namespace} instead.
+ *
+ * @deprecated Deprecated, use `db.namespace` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbElasticsearchClusterName = "db.elasticsearch.cluster.name";
+
/**
* Deprecated, no general replacement at this time. For Elasticsearch, use {@code
* db.elasticsearch.node.name} instead.
@@ -963,21 +1121,85 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbUser = "db.user";
/**
- * Deprecated, use {@code db.client.connections.pool.name} instead.
+ * Deprecated, use {@code db.client.connection.pool.name} instead.
+ *
+ * @deprecated Deprecated, use `db.client.connection.pool.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsPoolName = "db.client.connections.pool.name";
+
+/**
+ * Deprecated, use {@code db.client.connection.state} instead.
+ *
+ * @deprecated Deprecated, use `db.client.connection.state` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsState = "db.client.connections.state";
+
+/**
+ * Deprecated, use {@code db.client.connection.pool.name} instead.
*
- * @deprecated Deprecated, use `db.client.connections.pool.name` instead.
+ * @deprecated Deprecated, use `db.client.connection.pool.name` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kPoolName = "pool.name";
/**
- * Deprecated, use {@code db.client.connections.state} instead.
+ * Deprecated, use {@code db.client.connection.state} instead.
*
- * @deprecated Deprecated, use `db.client.connections.state` instead.
+ * @deprecated Deprecated, use `db.client.connection.state` instead.
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kState = "state";
+/**
+ * 'Deprecated, use {@code deployment.environment.name} instead.'
+ *
+ * @deprecated 'Deprecated, use `deployment.environment.name` instead.'.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDeploymentEnvironment = "deployment.environment";
+
+/**
+ * Deprecated, use {@code user.id} instead.
+ *
+ * @deprecated Deprecated, use `user.id` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserId = "enduser.id";
+
+/**
+ * Deprecated, use {@code user.roles} instead.
+ *
+ * @deprecated Deprecated, use `user.roles` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserRole = "enduser.role";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserScope = "enduser.scope";
+
+/**
+ * Deprecated, use {@code gen_ai.usage.output_tokens} instead.
+ *
+ * @deprecated Deprecated, use `gen_ai.usage.output_tokens` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsageCompletionTokens = "gen_ai.usage.completion_tokens";
+
+/**
+ * Deprecated, use {@code gen_ai.usage.input_tokens} instead.
+ *
+ * @deprecated Deprecated, use `gen_ai.usage.input_tokens` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsagePromptTokens = "gen_ai.usage.prompt_tokens";
+
/**
* Deprecated, use {@code client.address} instead.
*
@@ -1109,6 +1331,41 @@ static constexpr const char *kHttpUserAgent = "http.user_agent";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kIosState = "ios.state";
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishAnonymous =
+ "messaging.destination_publish.anonymous";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishName =
+ "messaging.destination_publish.name";
+
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingEventhubsConsumerGroup =
+ "messaging.eventhubs.consumer.group";
+
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
+
/**
* Deprecated, use {@code messaging.destination.partition.id} instead.
*
@@ -1118,6 +1375,14 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessagingKafkaDestinationPartition =
"messaging.kafka.destination.partition";
+/**
+ * Deprecated, use {@code messaging.kafka.offset} instead.
+ *
+ * @deprecated Deprecated, use `messaging.kafka.offset` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+
/**
* Deprecated, use {@code messaging.operation.type} instead.
*
@@ -1126,6 +1391,23 @@ static constexpr const char *kMessagingKafkaDestinationPartition =
OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessagingOperation = "messaging.operation";
+/**
+ * Deprecated, use {@code messaging.consumer.group.name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.consumer.group.name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
+
+/**
+ * Deprecated, use {@code messaging.servicebus.destination.subscription_name} instead.
+ *
+ * @deprecated Deprecated, use `messaging.servicebus.destination.subscription_name` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingServicebusDestinationSubscriptionName =
+ "messaging.servicebus.destination.subscription_name";
+
/**
* Deprecated, use {@code network.local.address}.
*
@@ -1249,21 +1531,29 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kNetTransport = "net.transport";
/**
- * None
*
- * @deprecated None.
+ *
+ * @deprecated .
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kOtelLibraryName = "otel.library.name";
/**
- * None
*
- * @deprecated None.
+ *
+ * @deprecated .
*/
OPENTELEMETRY_DEPRECATED
static constexpr const char *kOtelLibraryVersion = "otel.library.version";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kProcessCpuState = "process.cpu.state";
+
/**
* Deprecated, use {@code rpc.message.compressed_size} instead.
*
@@ -1296,6 +1586,14 @@ static constexpr const char *kMessageType = "message.type";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kMessageUncompressedSize = "message.uncompressed_size";
+/**
+ * Deprecated, use {@code cpu.mode} instead.
+ *
+ * @deprecated Deprecated, use `cpu.mode` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kSystemCpuState = "system.cpu.state";
+
/**
* Deprecated, use {@code system.process.status} instead.
*
@@ -1304,6 +1602,14 @@ static constexpr const char *kMessageUncompressedSize = "message.uncompressed_si
OPENTELEMETRY_DEPRECATED
static constexpr const char *kSystemProcessesStatus = "system.processes.status";
+/**
+ * Deprecated, use {@code server.address} instead.
+ *
+ * @deprecated Deprecated, use `server.address` instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kTlsClientServerName = "tls.client.server_name";
+
/**
* Destination address - domain name if available without reverse DNS lookup; otherwise, IP address
or Unix domain socket name.
@@ -1382,29 +1688,6 @@ static constexpr const char *kDiskIoDirection = "disk.io.direction";
*/
static constexpr const char *kDnsQuestionName = "dns.question.name";
-/**
- * Username or client_id extracted from the access token or Authorization header in the inbound
- * request from outside the system.
- */
-static constexpr const char *kEnduserId = "enduser.id";
-
-/**
- * Actual/assumed role the client is making the request under extracted from token or application
- * security context.
- */
-static constexpr const char *kEnduserRole = "enduser.role";
-
-/**
- * Scopes or granted authorities the client currently possesses extracted from token or application
- * security context. The value would come from the scope associated with an OAuth 2.0 Access Token or an attribute
- * value in a SAML 2.0
- * Assertion.
- */
-static constexpr const char *kEnduserScope = "enduser.scope";
-
/**
* Describes a class of error the operation ended with.
*
@@ -1430,9 +1713,9 @@ static constexpr const char *kErrorType = "error.type";
*
* Notes:
- Event names are subject to the same rules as attribute
- names. Notably, event names are namespaced to avoid collisions and provide a clean separation
- of semantics for events in separate domains like browser, mobile, and kubernetes.
+ href="/docs/general/attribute-naming.md">attribute names. Notably, event names are namespaced
+ to avoid collisions and provide a clean separation of semantics for events in separate domains like
+ browser, mobile, and kubernetes.
*/
static constexpr const char *kEventName = "event.name";
@@ -1667,6 +1950,16 @@ static constexpr const char *kFilePath = "file.path";
*/
static constexpr const char *kFileSize = "file.size";
+/**
+ * Identifies the Google Cloud service for which the official client library is intended.
+ *
+ * Notes:
+
- Intended to be a stable identifier for Google Cloud client libraries that is uniform
+ across implementation languages. The value should be derived from the canonical service domain for
+ the service; for example, 'foo.googleapis.com' should result in a value of 'foo'.
+ */
+static constexpr const char *kGcpClientService = "gcp.client.service";
+
/**
* The name of the Cloud Run execution being run for the
@@ -1699,7 +1992,7 @@ static constexpr const char *kGcpGceInstanceHostname = "gcp.gce.instance.hostnam
static constexpr const char *kGcpGceInstanceName = "gcp.gce.instance.name";
/**
- * The full response received from the LLM.
+ * The full response received from the GenAI model.
*
* Notes:
- It's RECOMMENDED to format completions as JSON string matching Notes:
+
- If one of the predefined values applies, but specific system uses a different name it's
+ RECOMMENDED to document it in the semantic conventions for specific GenAI system and use
+ system-specific name in the instrumentation. If a different name is not documented, instrumentation
+ libraries SHOULD use applicable predefined value.
+ */
+static constexpr const char *kGenAiOperationName = "gen_ai.operation.name";
+
+/**
+ * The full prompt sent to the GenAI model.
*
* Notes:
- It's RECOMMENDED to format prompts as JSON string matching Notes:
-
- The actual GenAI product may differ from the one identified by the client. For example,
- when using OpenAI client libraries to communicate with Mistral, the {@code gen_ai.system} is set to
- {@code openai} based on the instrumentation's best knowledge.
+ - The {@code gen_ai.system} describes a family of GenAI models with specific model
+identified by {@code gen_ai.request.model} and {@code gen_ai.response.model} attributes.
- The
+actual GenAI product may differ from the one identified by the client. For example, when using
+OpenAI client libraries to communicate with Mistral, the {@code gen_ai.system} is set to {@code
+openai} based on the instrumentation's best knowledge.
- For custom model, a custom friendly
+name SHOULD be used. If none of these options apply, the {@code gen_ai.system} SHOULD be set to
+{@code _OTHER}.
*/
static constexpr const char *kGenAiSystem = "gen_ai.system";
/**
- * The number of tokens used in the LLM response (completion).
+ * The type of token being counted.
*/
-static constexpr const char *kGenAiUsageCompletionTokens = "gen_ai.usage.completion_tokens";
+static constexpr const char *kGenAiTokenType = "gen_ai.token.type";
/**
- * The number of tokens used in the LLM prompt.
+ * The number of tokens used in the GenAI input (prompt).
*/
-static constexpr const char *kGenAiUsagePromptTokens = "gen_ai.usage.prompt_tokens";
+static constexpr const char *kGenAiUsageInputTokens = "gen_ai.usage.input_tokens";
+
+/**
+ * The number of tokens used in the GenAI response (completion).
+ */
+static constexpr const char *kGenAiUsageOutputTokens = "gen_ai.usage.output_tokens";
+
+/**
+ * The type of memory.
+ */
+static constexpr const char *kGoMemoryType = "go.memory.type";
/**
* The GraphQL document being executed.
@@ -2178,6 +2516,11 @@ static constexpr const char *kK8sStatefulsetName = "k8s.statefulset.name";
*/
static constexpr const char *kK8sStatefulsetUid = "k8s.statefulset.uid";
+/**
+ * The Linux Slab memory state
+ */
+static constexpr const char *kLinuxMemorySlabState = "linux.memory.slab.state";
+
/**
* The stream associated with the log. See below for a list of well-known values.
*/
@@ -2203,6 +2546,16 @@ static constexpr const char *kLogFilePath = "log.file.path";
*/
static constexpr const char *kLogFilePathResolved = "log.file.path_resolved";
+/**
+ * The complete orignal Log Record.
+ *
+ * Notes:
+
- This value MAY be added when processing a Log Record which was originally transmitted as
+ a string or equivalent data type AND the Body field of the Log Record does not contain the same
+ value. (e.g. a syslog or a log record read from a file.)
+ */
+static constexpr const char *kLogRecordOriginal = "log.record.original";
+
/**
* A unique identifier for the Log Record.
*
@@ -2231,6 +2584,16 @@ static constexpr const char *kMessagingBatchMessageCount = "messaging.batch.mess
*/
static constexpr const char *kMessagingClientId = "messaging.client.id";
+/**
+ * The name of the consumer group with which a consumer is associated.
+ *
+ * Notes:
+
- Semantic conventions for individual messaging systems SHOULD document whether {@code
+ messaging.consumer.group.name} is applicable and what it means in the context of that system.
+
+ */
+static constexpr const char *kMessagingConsumerGroupName = "messaging.consumer.group.name";
+
/**
* A boolean that is true if the message destination is anonymous (could be unnamed or have
* auto-generated name).
@@ -2254,6 +2617,17 @@ static constexpr const char *kMessagingDestinationName = "messaging.destination.
static constexpr const char *kMessagingDestinationPartitionId =
"messaging.destination.partition.id";
+/**
+ * The name of the destination subscription from which a message is consumed.
+ *
+ * Notes:
+
- Semantic conventions for individual messaging systems SHOULD document whether {@code
+ messaging.destination.subscription.name} is applicable and what it means in the context of that
+ system.
+ */
+static constexpr const char *kMessagingDestinationSubscriptionName =
+ "messaging.destination.subscription.name";
+
/**
* Low cardinality representation of the messaging destination name
*
@@ -2271,24 +2645,6 @@ static constexpr const char *kMessagingDestinationTemplate = "messaging.destinat
*/
static constexpr const char *kMessagingDestinationTemporary = "messaging.destination.temporary";
-/**
- * A boolean that is true if the publish message destination is anonymous (could be unnamed or have
- * auto-generated name).
- */
-static constexpr const char *kMessagingDestinationPublishAnonymous =
- "messaging.destination_publish.anonymous";
-
-/**
- * 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 *kMessagingDestinationPublishName =
- "messaging.destination_publish.name";
-
/**
* The size of the message body in bytes.
*
@@ -2341,12 +2697,6 @@ static constexpr const char *kMessagingOperationType = "messaging.operation.type
*/
static constexpr const char *kMessagingSystem = "messaging.system";
-/**
- * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not
- * producers.
- */
-static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
-
/**
* 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
@@ -2360,14 +2710,14 @@ static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.con
static constexpr const char *kMessagingKafkaMessageKey = "messaging.kafka.message.key";
/**
- * The offset of a record in the corresponding Kafka partition.
+ * A boolean that is true if the message is a tombstone.
*/
-static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
/**
- * A boolean that is true if the message is a tombstone.
+ * The offset of a record in the corresponding Kafka partition.
*/
-static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
+static constexpr const char *kMessagingKafkaOffset = "messaging.kafka.offset";
/**
* RabbitMQ message routing key.
@@ -2381,12 +2731,6 @@ static constexpr const char *kMessagingRabbitmqDestinationRoutingKey =
static constexpr const char *kMessagingRabbitmqMessageDeliveryTag =
"messaging.rabbitmq.message.delivery_tag";
-/**
- * Name of the RocketMQ producer/consumer group that is handling the message. The client type is
- * identified by the SpanKind.
- */
-static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
-
/**
* Model of message consumption. This only applies to consumer spans.
*/
@@ -2456,12 +2800,6 @@ static constexpr const char *kMessagingGcpPubsubMessageDeliveryAttempt =
static constexpr const char *kMessagingGcpPubsubMessageOrderingKey =
"messaging.gcp_pubsub.message.ordering_key";
-/**
- * The name of the subscription in the topic messages are received from.
- */
-static constexpr const char *kMessagingServicebusDestinationSubscriptionName =
- "messaging.servicebus.destination.subscription_name";
-
/**
* Describes the settlement
@@ -2482,12 +2820,6 @@ static constexpr const char *kMessagingServicebusMessageDeliveryCount =
static constexpr const char *kMessagingServicebusMessageEnqueuedTime =
"messaging.servicebus.message.enqueued_time";
-/**
- * The name of the consumer group the event consumer is associated with.
- */
-static constexpr const char *kMessagingEventhubsConsumerGroup =
- "messaging.eventhubs.consumer.group";
-
/**
* The UTC epoch seconds at which the message has been accepted and stored in the entity.
*/
@@ -2771,8 +3103,7 @@ static constexpr const char *kProcessRealUserName = "process.real_user.name";
static constexpr const char *kProcessRuntimeDescription = "process.runtime.description";
/**
- * The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of
- * the compiler.
+ * The name of the runtime of this process.
*/
static constexpr const char *kProcessRuntimeName = "process.runtime.name";
@@ -2816,11 +3147,6 @@ static constexpr const char *kProcessUserName = "process.user.name";
*/
static constexpr const char *kProcessVpid = "process.vpid";
-/**
- * The CPU state of the process.
- */
-static constexpr const char *kProcessCpuState = "process.cpu.state";
-
/**
* The error codes of the Connect
* request. Error codes are always string values.
@@ -3040,11 +3366,6 @@ static constexpr const char *kSystemDevice = "system.device";
*/
static constexpr const char *kSystemCpuLogicalNumber = "system.cpu.logical_number";
-/**
- * The state of the CPU
- */
-static constexpr const char *kSystemCpuState = "system.cpu.state";
-
/**
* The memory state
*/
@@ -3136,6 +3457,27 @@ static constexpr const char *kTelemetryDistroName = "telemetry.distro.name";
*/
static constexpr const char *kTelemetryDistroVersion = "telemetry.distro.version";
+/**
+ * The fully qualified human readable name of the test case.
+ */
+static constexpr const char *kTestCaseName = "test.case.name";
+
+/**
+ * The status of the actual test case result from test execution.
+ */
+static constexpr const char *kTestCaseResultStatus = "test.case.result.status";
+
+/**
+ * The human readable name of a test suite.
+ */
+static constexpr const char *kTestSuiteName = "test.suite.name";
+
+/**
+ * The status of the test suite run.
+ */
+static constexpr const char *kTestSuiteRunStatus = "test.suite.run.status";
+
/**
* Current "managed" thread ID (as opposed to OS thread ID).
*/
@@ -3215,12 +3557,6 @@ static constexpr const char *kTlsClientNotAfter = "tls.client.not_after";
*/
static constexpr const char *kTlsClientNotBefore = "tls.client.not_before";
-/**
- * Also called an SNI, this tells the server which hostname to which the client is attempting to
- * connect to.
- */
-static constexpr const char *kTlsClientServerName = "tls.client.server_name";
-
/**
* Distinguished name of subject of the x.509 certificate presented by the client.
*/
@@ -3483,6 +3819,102 @@ static constexpr const char *kUserAgentOriginal = "user_agent.original";
*/
static constexpr const char *kUserAgentVersion = "user_agent.version";
+/**
+ * User email address.
+ */
+static constexpr const char *kUserEmail = "user.email";
+
+/**
+ * User's full name
+ */
+static constexpr const char *kUserFullName = "user.full_name";
+
+/**
+ * Unique user hash to correlate information for a user in anonymized form.
+ *
+ * Notes:
+
- Useful if {@code user.id} or {@code user.name} contain confidential information and
+ cannot be used.
+ */
+static constexpr const char *kUserHash = "user.hash";
+
+/**
+ * Unique identifier of the user.
+ */
+static constexpr const char *kUserId = "user.id";
+
+/**
+ * Short name or login/username of the user.
+ */
+static constexpr const char *kUserName = "user.name";
+
+/**
+ * Array of user roles at the time of the event.
+ */
+static constexpr const char *kUserRoles = "user.roles";
+
+/**
+ * The type of garbage collection.
+ */
+static constexpr const char *kV8jsGcType = "v8js.gc.type";
+
+/**
+ * The name of the space type of heap memory.
+ *
+ * Notes:
+
+ */
+static constexpr const char *kV8jsHeapSpaceName = "v8js.heap.space.name";
+
+/**
+ * The ID of the change (pull request/merge request) if applicable. This is usually a unique (within
+ * repository) identifier generated by the VCS system.
+ */
+static constexpr const char *kVcsRepositoryChangeId = "vcs.repository.change.id";
+
+/**
+ * The human readable title of the change (pull request/merge request). This title is often a brief
+ * summary of the change and may get merged in to a ref as the commit summary.
+ */
+static constexpr const char *kVcsRepositoryChangeTitle = "vcs.repository.change.title";
+
+/**
+ * The name of the reference such as
+ * branch or tag in the repository.
+ */
+static constexpr const char *kVcsRepositoryRefName = "vcs.repository.ref.name";
+
+/**
+ * The revision, literally revised
+version, The revision most often refers to a commit object in Git, or a revision number in SVN.
+ *
+ * Notes:
+
- The revision can be a full hash value (see glossary), of
+the recorded change to a ref within a repository pointing to a commit commit object. It does not necessarily have to be a
+hash; it can simply define a revision number which
+is an integer that is monotonically increasing. In cases where it is identical to the {@code
+ref.name}, it SHOULD still be included. It is up to the implementer to decide which value to set as
+the revision based on the VCS system and situational context.
+ */
+static constexpr const char *kVcsRepositoryRefRevision = "vcs.repository.ref.revision";
+
+/**
+ * The type of the reference in the
+ * repository.
+ */
+static constexpr const char *kVcsRepositoryRefType = "vcs.repository.ref.type";
+
+/**
+ * The URL of the repository providing the complete
+ * address in order to locate and identify the repository.
+ */
+static constexpr const char *kVcsRepositoryUrlFull = "vcs.repository.url.full";
+
/**
* Additional description of the web engine (e.g. detailed version and edition information).
*/
@@ -3539,6 +3971,16 @@ static constexpr const char *kEc2 = "ec2";
static constexpr const char *kFargate = "fargate";
} // namespace AwsEcsLaunchtypeValues
+namespace CicdPipelineTaskTypeValues
+{
+/** build. */
+static constexpr const char *kBuild = "build";
+/** test. */
+static constexpr const char *kTest = "test";
+/** deploy. */
+static constexpr const char *kDeploy = "deploy";
+} // namespace CicdPipelineTaskTypeValues
+
namespace CloudPlatformValues
{
/** Alibaba Cloud Elastic Compute Service. */
@@ -3617,132 +4059,144 @@ static constexpr const char *kIbmCloud = "ibm_cloud";
static constexpr const char *kTencentCloud = "tencent_cloud";
} // namespace CloudProviderValues
-namespace ContainerCpuStateValues
+namespace CpuModeValues
{
-/** When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode
- * (Windows). */
+/** user. */
static constexpr const char *kUser = "user";
-/** When CPU is used by the system (host OS). */
+/** system. */
static constexpr const char *kSystem = "system";
-/** When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel
- * mode (Windows). */
+/** nice. */
+static constexpr const char *kNice = "nice";
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** iowait. */
+static constexpr const char *kIowait = "iowait";
+/** interrupt. */
+static constexpr const char *kInterrupt = "interrupt";
+/** steal. */
+static constexpr const char *kSteal = "steal";
+/** kernel. */
static constexpr const char *kKernel = "kernel";
-} // namespace ContainerCpuStateValues
+} // namespace CpuModeValues
-namespace DbClientConnectionsStateValues
+namespace DbClientConnectionStateValues
{
/** idle. */
static constexpr const char *kIdle = "idle";
/** used. */
static constexpr const char *kUsed = "used";
-} // namespace DbClientConnectionsStateValues
+} // namespace DbClientConnectionStateValues
namespace DbSystemValues
{
/** Some other SQL database. Fallback only. See notes. */
static constexpr const char *kOtherSql = "other_sql";
-/** Microsoft SQL Server. */
-static constexpr const char *kMssql = "mssql";
-/** Microsoft SQL Server Compact. */
-static constexpr const char *kMssqlcompact = "mssqlcompact";
-/** MySQL. */
-static constexpr const char *kMysql = "mysql";
-/** Oracle Database. */
-static constexpr const char *kOracle = "oracle";
-/** IBM Db2. */
-static constexpr const char *kDb2 = "db2";
-/** PostgreSQL. */
-static constexpr const char *kPostgresql = "postgresql";
-/** Amazon Redshift. */
-static constexpr const char *kRedshift = "redshift";
-/** Apache Hive. */
-static constexpr const char *kHive = "hive";
-/** Cloudscape. */
-static constexpr const char *kCloudscape = "cloudscape";
-/** HyperSQL DataBase. */
-static constexpr const char *kHsqldb = "hsqldb";
-/** Progress Database. */
-static constexpr const char *kProgress = "progress";
-/** SAP MaxDB. */
-static constexpr const char *kMaxdb = "maxdb";
-/** SAP HANA. */
-static constexpr const char *kHanadb = "hanadb";
-/** Ingres. */
-static constexpr const char *kIngres = "ingres";
-/** FirstSQL. */
-static constexpr const char *kFirstsql = "firstsql";
-/** EnterpriseDB. */
-static constexpr const char *kEdb = "edb";
-/** InterSystems Caché. */
-static constexpr const char *kCache = "cache";
/** Adabas (Adaptable Database System). */
static constexpr const char *kAdabas = "adabas";
-/** Firebird. */
-static constexpr const char *kFirebird = "firebird";
+/** Deprecated, use `intersystems_cache` instead. */
+static constexpr const char *kCache = "cache";
+/** InterSystems Caché. */
+static constexpr const char *kIntersystemsCache = "intersystems_cache";
+/** Apache Cassandra. */
+static constexpr const char *kCassandra = "cassandra";
+/** ClickHouse. */
+static constexpr const char *kClickhouse = "clickhouse";
+/** Deprecated, use `other_sql` instead. */
+static constexpr const char *kCloudscape = "cloudscape";
+/** CockroachDB. */
+static constexpr const char *kCockroachdb = "cockroachdb";
+/** Deprecated, no replacement at this time. */
+static constexpr const char *kColdfusion = "coldfusion";
+/** Microsoft Azure Cosmos DB. */
+static constexpr const char *kCosmosdb = "cosmosdb";
+/** Couchbase. */
+static constexpr const char *kCouchbase = "couchbase";
+/** CouchDB. */
+static constexpr const char *kCouchdb = "couchdb";
+/** IBM Db2. */
+static constexpr const char *kDb2 = "db2";
/** Apache Derby. */
static constexpr const char *kDerby = "derby";
+/** Amazon DynamoDB. */
+static constexpr const char *kDynamodb = "dynamodb";
+/** EnterpriseDB. */
+static constexpr const char *kEdb = "edb";
+/** Elasticsearch. */
+static constexpr const char *kElasticsearch = "elasticsearch";
/** FileMaker. */
static constexpr const char *kFilemaker = "filemaker";
+/** Firebird. */
+static constexpr const char *kFirebird = "firebird";
+/** Deprecated, use `other_sql` instead. */
+static constexpr const char *kFirstsql = "firstsql";
+/** Apache Geode. */
+static constexpr const char *kGeode = "geode";
+/** H2. */
+static constexpr const char *kH2 = "h2";
+/** SAP HANA. */
+static constexpr const char *kHanadb = "hanadb";
+/** Apache HBase. */
+static constexpr const char *kHbase = "hbase";
+/** Apache Hive. */
+static constexpr const char *kHive = "hive";
+/** HyperSQL DataBase. */
+static constexpr const char *kHsqldb = "hsqldb";
+/** InfluxDB. */
+static constexpr const char *kInfluxdb = "influxdb";
/** Informix. */
static constexpr const char *kInformix = "informix";
+/** Ingres. */
+static constexpr const char *kIngres = "ingres";
/** InstantDB. */
static constexpr const char *kInstantdb = "instantdb";
/** InterBase. */
static constexpr const char *kInterbase = "interbase";
/** MariaDB. */
static constexpr const char *kMariadb = "mariadb";
+/** SAP MaxDB. */
+static constexpr const char *kMaxdb = "maxdb";
+/** Memcached. */
+static constexpr const char *kMemcached = "memcached";
+/** MongoDB. */
+static constexpr const char *kMongodb = "mongodb";
+/** Microsoft SQL Server. */
+static constexpr const char *kMssql = "mssql";
+/** Deprecated, Microsoft SQL Server Compact is discontinued. */
+static constexpr const char *kMssqlcompact = "mssqlcompact";
+/** MySQL. */
+static constexpr const char *kMysql = "mysql";
+/** Neo4j. */
+static constexpr const char *kNeo4j = "neo4j";
/** Netezza. */
static constexpr const char *kNetezza = "netezza";
+/** OpenSearch. */
+static constexpr const char *kOpensearch = "opensearch";
+/** Oracle Database. */
+static constexpr const char *kOracle = "oracle";
/** Pervasive PSQL. */
static constexpr const char *kPervasive = "pervasive";
/** PointBase. */
static constexpr const char *kPointbase = "pointbase";
+/** PostgreSQL. */
+static constexpr const char *kPostgresql = "postgresql";
+/** Progress Database. */
+static constexpr const char *kProgress = "progress";
+/** Redis. */
+static constexpr const char *kRedis = "redis";
+/** Amazon Redshift. */
+static constexpr const char *kRedshift = "redshift";
+/** Cloud Spanner. */
+static constexpr const char *kSpanner = "spanner";
/** SQLite. */
static constexpr const char *kSqlite = "sqlite";
/** Sybase. */
static constexpr const char *kSybase = "sybase";
/** Teradata. */
static constexpr const char *kTeradata = "teradata";
-/** Vertica. */
-static constexpr const char *kVertica = "vertica";
-/** H2. */
-static constexpr const char *kH2 = "h2";
-/** ColdFusion IMQ. */
-static constexpr const char *kColdfusion = "coldfusion";
-/** Apache Cassandra. */
-static constexpr const char *kCassandra = "cassandra";
-/** Apache HBase. */
-static constexpr const char *kHbase = "hbase";
-/** MongoDB. */
-static constexpr const char *kMongodb = "mongodb";
-/** Redis. */
-static constexpr const char *kRedis = "redis";
-/** Couchbase. */
-static constexpr const char *kCouchbase = "couchbase";
-/** CouchDB. */
-static constexpr const char *kCouchdb = "couchdb";
-/** Microsoft Azure Cosmos DB. */
-static constexpr const char *kCosmosdb = "cosmosdb";
-/** Amazon DynamoDB. */
-static constexpr const char *kDynamodb = "dynamodb";
-/** Neo4j. */
-static constexpr const char *kNeo4j = "neo4j";
-/** Apache Geode. */
-static constexpr const char *kGeode = "geode";
-/** Elasticsearch. */
-static constexpr const char *kElasticsearch = "elasticsearch";
-/** Memcached. */
-static constexpr const char *kMemcached = "memcached";
-/** CockroachDB. */
-static constexpr const char *kCockroachdb = "cockroachdb";
-/** OpenSearch. */
-static constexpr const char *kOpensearch = "opensearch";
-/** ClickHouse. */
-static constexpr const char *kClickhouse = "clickhouse";
-/** Cloud Spanner. */
-static constexpr const char *kSpanner = "spanner";
/** Trino. */
static constexpr const char *kTrino = "trino";
+/** Vertica. */
+static constexpr const char *kVertica = "vertica";
} // namespace DbSystemValues
namespace DbCassandraConsistencyLevelValues
@@ -3813,6 +4267,14 @@ static constexpr const char *kQueryPlan = "QueryPlan";
static constexpr const char *kExecuteJavascript = "ExecuteJavaScript";
} // namespace DbCosmosdbOperationTypeValues
+namespace DeploymentStatusValues
+{
+/** failed. */
+static constexpr const char *kFailed = "failed";
+/** succeeded. */
+static constexpr const char *kSucceeded = "succeeded";
+} // namespace DeploymentStatusValues
+
namespace AndroidStateValues
{
/** Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has
@@ -3826,6 +4288,26 @@ static constexpr const char *kBackground = "background";
static constexpr const char *kForeground = "foreground";
} // namespace AndroidStateValues
+namespace ContainerCpuStateValues
+{
+/** When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode
+ * (Windows). */
+static constexpr const char *kUser = "user";
+/** When CPU is used by the system (host OS). */
+static constexpr const char *kSystem = "system";
+/** When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel
+ * mode (Windows). */
+static constexpr const char *kKernel = "kernel";
+} // namespace ContainerCpuStateValues
+
+namespace DbClientConnectionsStateValues
+{
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** used. */
+static constexpr const char *kUsed = "used";
+} // namespace DbClientConnectionsStateValues
+
namespace StateValues
{
/** idle. */
@@ -3890,6 +4372,16 @@ static constexpr const char *kInproc = "inproc";
static constexpr const char *kOther = "other";
} // namespace NetTransportValues
+namespace ProcessCpuStateValues
+{
+/** system. */
+static constexpr const char *kSystem = "system";
+/** user. */
+static constexpr const char *kUser = "user";
+/** wait. */
+static constexpr const char *kWait = "wait";
+} // namespace ProcessCpuStateValues
+
namespace MessageTypeValues
{
/** sent. */
@@ -3898,6 +4390,24 @@ static constexpr const char *kSent = "SENT";
static constexpr const char *kReceived = "RECEIVED";
} // namespace MessageTypeValues
+namespace SystemCpuStateValues
+{
+/** user. */
+static constexpr const char *kUser = "user";
+/** system. */
+static constexpr const char *kSystem = "system";
+/** nice. */
+static constexpr const char *kNice = "nice";
+/** idle. */
+static constexpr const char *kIdle = "idle";
+/** iowait. */
+static constexpr const char *kIowait = "iowait";
+/** interrupt. */
+static constexpr const char *kInterrupt = "interrupt";
+/** steal. */
+static constexpr const char *kSteal = "steal";
+} // namespace SystemCpuStateValues
+
namespace SystemProcessesStatusValues
{
/** running. */
@@ -3962,12 +4472,46 @@ static constexpr const char *kTimer = "timer";
static constexpr const char *kOther = "other";
} // namespace FaasTriggerValues
+namespace GenAiOperationNameValues
+{
+/** Chat completion operation such as [OpenAI Chat
+ * API](https://platform.openai.com/docs/api-reference/chat). */
+static constexpr const char *kChat = "chat";
+/** Text completions operation such as [OpenAI Completions API
+ * (Legacy)](https://platform.openai.com/docs/api-reference/completions). */
+static constexpr const char *kTextCompletion = "text_completion";
+} // namespace GenAiOperationNameValues
+
namespace GenAiSystemValues
{
/** OpenAI. */
static constexpr const char *kOpenai = "openai";
+/** Vertex AI. */
+static constexpr const char *kVertexAi = "vertex_ai";
+/** Anthropic. */
+static constexpr const char *kAnthropic = "anthropic";
+/** Cohere. */
+static constexpr const char *kCohere = "cohere";
} // namespace GenAiSystemValues
+namespace GenAiTokenTypeValues
+{
+/** Input tokens (prompt, input, etc.). */
+static constexpr const char *kInput = "input";
+/** Output tokens (completion, response, etc.). */
+static constexpr const char *kCompletion = "output";
+} // namespace GenAiTokenTypeValues
+
+namespace GoMemoryTypeValues
+{
+/** Memory allocated from the heap that is reserved for stack space, whether or not it is currently
+ * in-use. */
+static constexpr const char *kStack = "stack";
+/** Memory used by the Go runtime, excluding other categories of memory usage described in this
+ * enumeration. */
+static constexpr const char *kOther = "other";
+} // namespace GoMemoryTypeValues
+
namespace GraphqlOperationTypeValues
{
/** GraphQL query. */
@@ -4056,6 +4600,14 @@ static constexpr const char *kTimedWaiting = "timed_waiting";
static constexpr const char *kTerminated = "terminated";
} // namespace JvmThreadStateValues
+namespace LinuxMemorySlabStateValues
+{
+/** reclaimable. */
+static constexpr const char *kReclaimable = "reclaimable";
+/** unreclaimable. */
+static constexpr const char *kUnreclaimable = "unreclaimable";
+} // namespace LinuxMemorySlabStateValues
+
namespace LogIostreamValues
{
/** Logs from stdout stream. */
@@ -4076,10 +4628,12 @@ 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 delivered to or processed by a consumer. */
-static constexpr const char *kDeliver = "process";
+/** One or more messages are processed by a consumer. */
+static constexpr const char *kProcess = "process";
/** One or more messages are settled. */
static constexpr const char *kSettle = "settle";
+/** Deprecated. Use `process` instead. */
+static constexpr const char *kDeliver = "deliver";
} // namespace MessagingOperationTypeValues
namespace MessagingSystemValues
@@ -4104,6 +4658,8 @@ static constexpr const char *kKafka = "kafka";
static constexpr const char *kRabbitmq = "rabbitmq";
/** Apache RocketMQ. */
static constexpr const char *kRocketmq = "rocketmq";
+/** Apache Pulsar. */
+static constexpr const char *kPulsar = "pulsar";
} // namespace MessagingSystemValues
namespace MessagingRocketmqConsumptionModelValues
@@ -4216,6 +4772,8 @@ static constexpr const char *kUdp = "udp";
static constexpr const char *kPipe = "pipe";
/** Unix domain socket. */
static constexpr const char *kUnix = "unix";
+/** QUIC. */
+static constexpr const char *kQuic = "quic";
} // namespace NetworkTransportValues
namespace NetworkTypeValues
@@ -4285,16 +4843,6 @@ static constexpr const char *kMajor = "major";
static constexpr const char *kMinor = "minor";
} // namespace ProcessPagingFaultTypeValues
-namespace ProcessCpuStateValues
-{
-/** system. */
-static constexpr const char *kSystem = "system";
-/** user. */
-static constexpr const char *kUser = "user";
-/** wait. */
-static constexpr const char *kWait = "wait";
-} // namespace ProcessCpuStateValues
-
namespace RpcConnectRpcErrorCodeValues
{
/** cancelled. */
@@ -4411,24 +4959,6 @@ static constexpr const char *kLongPolling = "long_polling";
static constexpr const char *kWebSockets = "web_sockets";
} // namespace SignalrTransportValues
-namespace SystemCpuStateValues
-{
-/** user. */
-static constexpr const char *kUser = "user";
-/** system. */
-static constexpr const char *kSystem = "system";
-/** nice. */
-static constexpr const char *kNice = "nice";
-/** idle. */
-static constexpr const char *kIdle = "idle";
-/** iowait. */
-static constexpr const char *kIowait = "iowait";
-/** interrupt. */
-static constexpr const char *kInterrupt = "interrupt";
-/** steal. */
-static constexpr const char *kSteal = "steal";
-} // namespace SystemCpuStateValues
-
namespace SystemMemoryStateValues
{
/** used. */
@@ -4561,6 +5091,30 @@ static constexpr const char *kSwift = "swift";
static constexpr const char *kWebjs = "webjs";
} // namespace TelemetrySdkLanguageValues
+namespace TestCaseResultStatusValues
+{
+/** pass. */
+static constexpr const char *kPass = "pass";
+/** fail. */
+static constexpr const char *kFail = "fail";
+} // namespace TestCaseResultStatusValues
+
+namespace TestSuiteRunStatusValues
+{
+/** success. */
+static constexpr const char *kSuccess = "success";
+/** failure. */
+static constexpr const char *kFailure = "failure";
+/** skipped. */
+static constexpr const char *kSkipped = "skipped";
+/** aborted. */
+static constexpr const char *kAborted = "aborted";
+/** timed_out. */
+static constexpr const char *kTimedOut = "timed_out";
+/** in_progress. */
+static constexpr const char *kInProgress = "in_progress";
+} // namespace TestSuiteRunStatusValues
+
namespace TlsProtocolNameValues
{
/** ssl. */
@@ -4569,6 +5123,40 @@ static constexpr const char *kSsl = "ssl";
static constexpr const char *kTls = "tls";
} // namespace TlsProtocolNameValues
+namespace V8jsGcTypeValues
+{
+/** Major (Mark Sweep Compact). */
+static constexpr const char *kMajor = "major";
+/** Minor (Scavenge). */
+static constexpr const char *kMinor = "minor";
+/** Incremental (Incremental Marking). */
+static constexpr const char *kIncremental = "incremental";
+/** Weak Callbacks (Process Weak Callbacks). */
+static constexpr const char *kWeakcb = "weakcb";
+} // namespace V8jsGcTypeValues
+
+namespace V8jsHeapSpaceNameValues
+{
+/** New memory space. */
+static constexpr const char *kNewSpace = "new_space";
+/** Old memory space. */
+static constexpr const char *kOldSpace = "old_space";
+/** Code memory space. */
+static constexpr const char *kCodeSpace = "code_space";
+/** Map memory space. */
+static constexpr const char *kMapSpace = "map_space";
+/** Large object memory space. */
+static constexpr const char *kLargeObjectSpace = "large_object_space";
+} // namespace V8jsHeapSpaceNameValues
+
+namespace VcsRepositoryRefTypeValues
+{
+/** [branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch). */
+static constexpr const char *kBranch = "branch";
+/** [tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag). */
+static constexpr const char *kTag = "tag";
+} // namespace VcsRepositoryRefTypeValues
+
} // namespace SemanticConventions
} // namespace resource
} // namespace sdk