diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d8ca3317f..3e3521797d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,12 +15,18 @@ Increment the: ## [Unreleased] -* [API] Comply with W3C Trace Context [#3115](https://github.com/open-telemetry/opentelemetry-cpp/pull/3115) - * Also adds CI check to ensure continued compliance +* [API] Comply with W3C Trace Context + [#3115](https://github.com/open-telemetry/opentelemetry-cpp/pull/3115) * [API] Jaeger Propagator should not be deprecated [#3086](https://github.com/open-telemetry/opentelemetry-cpp/pull/3086) +* Upgrade to prometheus 1.3.0 + [#3122](https://github.com/open-telemetry/opentelemetry-cpp/pull/3122) + +* [SEMANTIC CONVENTIONS] Migration to weaver + [#3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + Important changes: * [API] Jaeger Propagator should not be deprecated @@ -32,14 +38,19 @@ Important changes: as the Jaeger propagator can be used without the (now removed) Jaeger exporter. -* Upgrade to prometheus 1.3.0 - [#3122](https://github.com/open-telemetry/opentelemetry-cpp/pull/3122) - * [EXPORTER] Change log resources location for ElasticsearchLogRecordExporter [#3119](https://github.com/open-telemetry/opentelemetry-cpp/pull/3131) * Moved from `root/resources` to `root` +* [SEMANTIC CONVENTIONS] Migration to weaver + [#3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + + * `semantic_convention.h` header files are deprecated, + replaced by `semconv/xxx_attributes.h` header files, + for each `xxx` semantic attribute group. + * See file DEPRECATED.md for details. + ## [1.17 2024-10-07] * [CI] Add a clang-tidy build diff --git a/DEPRECATED.md b/DEPRECATED.md index eea861ffe6..ec97f420fe 100644 --- a/DEPRECATED.md +++ b/DEPRECATED.md @@ -59,3 +59,81 @@ N/A ## [Documentation] N/A + +## Semantic conventions + +### Header files "semantic_conventions.h" + +#### Announcement (semantic_conventions.h) + +Deprecation is announced as part of the migration to weaver: + +* `Version:` release following opentelemetry-cpp 1.17.0 +* `Date:` Nov 9, 2024 +* `PR:` [PR 3105](https://github.com/open-telemetry/opentelemetry-cpp/pull/3105) + +#### Motivation (semantic_conventions.h) + +The header files for semantic conventions are generated automatically. +The tooling to generate these files is changing: + +* before, the build-tool repository was used +* now, the weaver repository is used + +Changes in tooling allows to generate code that is better organized, +with dedicated header files per group of semantic conventions, +instead of a single header file for everything. + +#### Scope (semantic_conventions.h) + +The following files: + +* `api/include/opentelemetry/trace/semantic_conventions.h` +* `sdk/include/opentelemetry/sdk/resource/semantic_conventions.h` + +are now deprecated. + +They correspond to semantic conventions v1.27.0, +and will no longer be maintained up to date. + +These files will be removed in the future. + +#### Mitigation (semantic_conventions.h) + +Two things have changed: + +* the header file to use +* the symbol name to use. + +Before, the semantic convention for `url.full` was: + +* declared in file `semantic_conventions.h` +* declared as symbol `SemanticConventions::kUrlFull` + +Now, the `url.full` convention, which is part or the `url` group, is: + +* declared in file `semconv/url_attributes.h` +* declared as symbol `semconv::url::kUrlFull` + +Application code that uses semantic conventions must be adjusted +accordingly. + +In addition, semantic conventions that are not marked as stable +are generated in a different header file, placed under directory +`incubating`, to better separate stable and non stable code. + +For example, file `semconv/incubating/url_attributes.h` +defines `semconv::url::kUrlDomain`, +which is not marked as stable in semconv v1.27.0 + +#### Planned removal (semantic_conventions.h) + +The following files: + +* `api/include/opentelemetry/trace/semantic_conventions.h` +* `sdk/include/opentelemetry/sdk/resource/semantic_conventions.h` + +will be removed. + +The removal date is planned for July 1, 2025. +This allows more than six months for applications to adjust. diff --git a/api/include/opentelemetry/semconv/client_attributes.h b/api/include/opentelemetry/semconv/client_attributes.h new file mode 100644 index 0000000000..ec984cc406 --- /dev/null +++ b/api/include/opentelemetry/semconv/client_attributes.h @@ -0,0 +1,41 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * DO NOT EDIT, this is an Auto-generated file from: + * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2 + */ + +#pragma once + +#include "opentelemetry/common/macros.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace semconv +{ +namespace client +{ + +/** + * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or + * Unix domain socket name.
When observed from the server side, and when communicating through + * an intermediary, @code client.address @endcode SHOULD represent the client address behind any + * intermediaries, for example proxies, if it's available. + */ +static constexpr const char *kClientAddress = "client.address"; + +/** + * Client port number. + *
+ * When observed from the server side, and when communicating through an intermediary, @code + * client.port @endcode SHOULD represent the client port behind any intermediaries, for example + * proxies, if it's available. + */ +static constexpr const char *kClientPort = "client.port"; + +} // namespace client +} // namespace semconv +OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/semconv/error_attributes.h b/api/include/opentelemetry/semconv/error_attributes.h new file mode 100644 index 0000000000..1b711ff112 --- /dev/null +++ b/api/include/opentelemetry/semconv/error_attributes.h @@ -0,0 +1,57 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * DO NOT EDIT, this is an Auto-generated file from: + * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2 + */ + +#pragma once + +#include "opentelemetry/common/macros.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace semconv +{ +namespace error +{ + +/** + * Describes a class of error the operation ended with. + *
+ * The @code error.type @endcode SHOULD be predictable, and SHOULD have low cardinality. + *
+ * When @code error.type @endcode is set to a type (e.g., an exception type), its + * canonical class name identifying the type within the artifact SHOULD be used. + *
+ * Instrumentations SHOULD document the list of errors they report. + *
+ * The cardinality of @code error.type @endcode within one instrumentation library SHOULD be low. + * Telemetry consumers that aggregate data from multiple instrumentation libraries and applications + * should be prepared for @code error.type @endcode to have high cardinality at query time when no + * additional filters are applied. + *
+ * If the operation has completed successfully, instrumentations SHOULD NOT set @code error.type + * @endcode.
If a specific domain defines its own set of error identifiers (such as HTTP or gRPC + * status codes), it's RECOMMENDED to:
An exception is considered to have escaped (or + * left) the scope of a span, if that span is ended while the exception is still logically "in + * flight". This may be actually "in flight" in some languages (e.g. if the exception is passed to a + * Context manager's @code __exit__ @endcode method in Python) but will usually be caught at the + * point of recording the exception in most languages.
It is usually not possible to determine + * at the point where an exception is thrown whether it will escape the scope of a span. However, it + * is trivial to know that an exception will escape, if one checks for an active exception just + * before ending the span, as done in the example + * for recording span exceptions.
It follows that an exception may still escape the scope of
+ * the span even if the @code exception.escaped @endcode attribute was not set or set to false,
+ * since the event might have been recorded at a time where it was not
+ * clear whether the exception will escape.
+ */
+static constexpr const char *kExceptionEscaped = "exception.escaped";
+
+/**
+ * The exception message.
+ */
+static constexpr const char *kExceptionMessage = "exception.message";
+
+/**
+ * A stacktrace as a string in the natural representation for the language runtime. The
+ * representation is to be determined and documented by each language SIG.
+ */
+static constexpr const char *kExceptionStacktrace = "exception.stacktrace";
+
+/**
+ * The type of the exception (its fully-qualified class name, if applicable). The dynamic type of
+ * the exception should be preferred over the static type in languages that support it.
+ */
+static constexpr const char *kExceptionType = "exception.type";
+
+} // namespace exception
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/http_attributes.h b/api/include/opentelemetry/semconv/http_attributes.h
new file mode 100644
index 0000000000..6011674e84
--- /dev/null
+++ b/api/include/opentelemetry/semconv/http_attributes.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace http
+{
+
+/**
+ * HTTP request headers, @code Instrumentations SHOULD require an explicit configuration of
+ * which headers are to be captured. Including all request headers can be a security risk - explicit
+ * configuration helps avoid leaking sensitive information. The @code User-Agent @endcode header is
+ * already captured in the @code user_agent.original @endcode attribute. Users MAY explicitly
+ * configure instrumentations to capture them even though it is not recommended. The attribute value
+ * MUST consist of either multiple header values as an array of strings or a single-item array
+ * containing a possibly comma-concatenated string, depending on the way the HTTP library provides
+ * access to headers.
+ */
+static constexpr const char *kHttpRequestHeader = "http.request.header";
+
+/**
+ * HTTP request method.
+ *
+ * HTTP request method value SHOULD be "known" to the instrumentation.
+ * By default, this convention defines "known" methods as the ones listed in RFC9110 and the PATCH method
+ * defined in RFC5789. If the HTTP
+ * request method is not known to instrumentation, it MUST set the @code http.request.method
+ * @endcode attribute to @code _OTHER @endcode. If the HTTP instrumentation could end up
+ * converting valid HTTP request methods to @code _OTHER @endcode, then it MUST provide a way to
+ * override the list of known HTTP methods. If this override is done via environment variable, then
+ * the environment variable MUST be named OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a
+ * comma-separated list of case-sensitive known HTTP methods (this list MUST be a full override of
+ * the default known method, it is not a list of known methods in addition to the defaults).
+ * HTTP method names are case-sensitive and @code http.request.method @endcode attribute value MUST
+ * match a known HTTP method name exactly. Instrumentations for specific web frameworks that
+ * consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent. Tracing
+ * instrumentations that do so, MUST also set @code http.request.method_original @endcode to the
+ * original value.
+ */
+static constexpr const char *kHttpRequestMethod = "http.request.method";
+
+/**
+ * Original HTTP method sent by the client in the request line.
+ */
+static constexpr const char *kHttpRequestMethodOriginal = "http.request.method_original";
+
+/**
+ * The ordinal number of request resending attempt (for any reason, including redirects).
+ *
+ * The resend count SHOULD be updated each time an HTTP request gets resent by the client,
+ * regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503
+ * Server Unavailable, network issues, or any other).
+ */
+static constexpr const char *kHttpRequestResendCount = "http.request.resend_count";
+
+/**
+ * HTTP response headers, @code Instrumentations SHOULD require an explicit configuration
+ * of which headers are to be captured. Including all response headers can be a security risk -
+ * explicit configuration helps avoid leaking sensitive information. Users MAY explicitly configure
+ * instrumentations to capture them even though it is not recommended. The attribute value MUST
+ * consist of either multiple header values as an array of strings or a single-item array containing
+ * a possibly comma-concatenated string, depending on the way the HTTP library provides access to
+ * headers.
+ */
+static constexpr const char *kHttpResponseHeader = "http.response.header";
+
+/**
+ * HTTP response status code.
+ */
+static constexpr const char *kHttpResponseStatusCode = "http.response.status_code";
+
+/**
+ * The matched route, that is, the path template in the format used by the respective server
+ * framework. MUST NOT be populated when this is not supported by the HTTP server framework as
+ * the route attribute should have low-cardinality and the URI path can NOT substitute it. SHOULD
+ * include the application root if
+ * there is one.
+ */
+static constexpr const char *kHttpRoute = "http.route";
+
+namespace HttpRequestMethodValues
+{
+/**
+ * CONNECT method.
+ */
+static constexpr const char *kConnect = "CONNECT";
+
+/**
+ * DELETE method.
+ */
+static constexpr const char *kDelete = "DELETE";
+
+/**
+ * GET method.
+ */
+static constexpr const char *kGet = "GET";
+
+/**
+ * HEAD method.
+ */
+static constexpr const char *kHead = "HEAD";
+
+/**
+ * OPTIONS method.
+ */
+static constexpr const char *kOptions = "OPTIONS";
+
+/**
+ * PATCH method.
+ */
+static constexpr const char *kPatch = "PATCH";
+
+/**
+ * POST method.
+ */
+static constexpr const char *kPost = "POST";
+
+/**
+ * PUT method.
+ */
+static constexpr const char *kPut = "PUT";
+
+/**
+ * TRACE method.
+ */
+static constexpr const char *kTrace = "TRACE";
+
+/**
+ * Any HTTP method that the instrumentation has no prior knowledge of.
+ */
+static constexpr const char *kOther = "_OTHER";
+
+} // namespace HttpRequestMethodValues
+
+} // namespace http
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/http_metrics.h b/api/include/opentelemetry/semconv/http_metrics.h
new file mode 100644
index 0000000000..f83172e80e
--- /dev/null
+++ b/api/include/opentelemetry/semconv/http_metrics.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace http
+{
+
+/**
+ * Duration of HTTP client requests.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricHttpClientRequestDuration =
+ "metric.http.client.request.duration";
+static constexpr const char *descrMetricHttpClientRequestDuration =
+ "Duration of HTTP client requests.";
+static constexpr const char *unitMetricHttpClientRequestDuration = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricHttpServerRequestDuration =
+ "metric.http.server.request.duration";
+static constexpr const char *descrMetricHttpServerRequestDuration =
+ "Duration of HTTP server requests.";
+static constexpr const char *unitMetricHttpServerRequestDuration = "s";
+
+static inline nostd::unique_ptr 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. 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";
+
+} // namespace artifact
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/aws_attributes.h b/api/include/opentelemetry/semconv/incubating/aws_attributes.h
new file mode 100644
index 0000000000..d0eaa6d08a
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/aws_attributes.h
@@ -0,0 +1,356 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace aws
+{
+
+/**
+ * The JSON-serialized value of each item in the @code AttributeDefinitions @endcode request field.
+ */
+static constexpr const char *kAwsDynamodbAttributeDefinitions =
+ "aws.dynamodb.attribute_definitions";
+
+/**
+ * The value of the @code AttributesToGet @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbAttributesToGet = "aws.dynamodb.attributes_to_get";
+
+/**
+ * The value of the @code ConsistentRead @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbConsistentRead = "aws.dynamodb.consistent_read";
+
+/**
+ * The JSON-serialized value of each item in the @code ConsumedCapacity @endcode response field.
+ */
+static constexpr const char *kAwsDynamodbConsumedCapacity = "aws.dynamodb.consumed_capacity";
+
+/**
+ * The value of the @code Count @endcode response parameter.
+ */
+static constexpr const char *kAwsDynamodbCount = "aws.dynamodb.count";
+
+/**
+ * The value of the @code ExclusiveStartTableName @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbExclusiveStartTable = "aws.dynamodb.exclusive_start_table";
+
+/**
+ * The JSON-serialized value of each item in the @code GlobalSecondaryIndexUpdates @endcode request
+ * field.
+ */
+static constexpr const char *kAwsDynamodbGlobalSecondaryIndexUpdates =
+ "aws.dynamodb.global_secondary_index_updates";
+
+/**
+ * The JSON-serialized value of each item of the @code GlobalSecondaryIndexes @endcode request field
+ */
+static constexpr const char *kAwsDynamodbGlobalSecondaryIndexes =
+ "aws.dynamodb.global_secondary_indexes";
+
+/**
+ * The value of the @code IndexName @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbIndexName = "aws.dynamodb.index_name";
+
+/**
+ * The JSON-serialized value of the @code ItemCollectionMetrics @endcode response field.
+ */
+static constexpr const char *kAwsDynamodbItemCollectionMetrics =
+ "aws.dynamodb.item_collection_metrics";
+
+/**
+ * The value of the @code Limit @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbLimit = "aws.dynamodb.limit";
+
+/**
+ * The JSON-serialized value of each item of the @code LocalSecondaryIndexes @endcode request field.
+ */
+static constexpr const char *kAwsDynamodbLocalSecondaryIndexes =
+ "aws.dynamodb.local_secondary_indexes";
+
+/**
+ * The value of the @code ProjectionExpression @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbProjection = "aws.dynamodb.projection";
+
+/**
+ * The value of the @code ProvisionedThroughput.ReadCapacityUnits @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbProvisionedReadCapacity =
+ "aws.dynamodb.provisioned_read_capacity";
+
+/**
+ * The value of the @code ProvisionedThroughput.WriteCapacityUnits @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbProvisionedWriteCapacity =
+ "aws.dynamodb.provisioned_write_capacity";
+
+/**
+ * The value of the @code ScanIndexForward @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbScanForward = "aws.dynamodb.scan_forward";
+
+/**
+ * The value of the @code ScannedCount @endcode response parameter.
+ */
+static constexpr const char *kAwsDynamodbScannedCount = "aws.dynamodb.scanned_count";
+
+/**
+ * The value of the @code Segment @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbSegment = "aws.dynamodb.segment";
+
+/**
+ * The value of the @code Select @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbSelect = "aws.dynamodb.select";
+
+/**
+ * The number of items in the @code TableNames @endcode response parameter.
+ */
+static constexpr const char *kAwsDynamodbTableCount = "aws.dynamodb.table_count";
+
+/**
+ * The keys in the @code RequestItems @endcode object field.
+ */
+static constexpr const char *kAwsDynamodbTableNames = "aws.dynamodb.table_names";
+
+/**
+ * The value of the @code TotalSegments @endcode request parameter.
+ */
+static constexpr const char *kAwsDynamodbTotalSegments = "aws.dynamodb.total_segments";
+
+/**
+ * The ARN of an ECS cluster.
+ */
+static constexpr const char *kAwsEcsClusterArn = "aws.ecs.cluster.arn";
+
+/**
+ * The Amazon Resource Name (ARN) of an ECS
+ * container instance.
+ */
+static constexpr const char *kAwsEcsContainerArn = "aws.ecs.container.arn";
+
+/**
+ * The launch
+ * type for an ECS task.
+ */
+static constexpr const char *kAwsEcsLaunchtype = "aws.ecs.launchtype";
+
+/**
+ * The ARN of a running ECS
+ * task.
+ */
+static constexpr const char *kAwsEcsTaskArn = "aws.ecs.task.arn";
+
+/**
+ * The family name of the ECS task
+ * definition used to create the ECS task.
+ */
+static constexpr const char *kAwsEcsTaskFamily = "aws.ecs.task.family";
+
+/**
+ * The ID of a running ECS task. The ID MUST be extracted from @code task.arn @endcode.
+ */
+static constexpr const char *kAwsEcsTaskId = "aws.ecs.task.id";
+
+/**
+ * The revision for the task definition used to create the ECS task.
+ */
+static constexpr const char *kAwsEcsTaskRevision = "aws.ecs.task.revision";
+
+/**
+ * The ARN of an EKS cluster.
+ */
+static constexpr const char *kAwsEksClusterArn = "aws.eks.cluster.arn";
+
+/**
+ * The full invoked ARN as provided on the @code Context @endcode passed to the function (@code
+ * Lambda-Runtime-Invoked-Function-Arn @endcode header on the @code /runtime/invocation/next
+ * @endcode applicable). This may be different from @code cloud.resource_id @endcode if an alias
+ * is involved.
+ */
+static constexpr const char *kAwsLambdaInvokedArn = "aws.lambda.invoked_arn";
+
+/**
+ * The Amazon Resource Name(s) (ARN) of the AWS log group(s).
+ *
+ * See the log
+ * group ARN format documentation.
+ */
+static constexpr const char *kAwsLogGroupArns = "aws.log.group.arns";
+
+/**
+ * The name(s) of the AWS log group(s) an application is writing to.
+ *
+ * Multiple log groups must be supported for cases like multi-container applications, where a single
+ * application has sidecar containers, and each write to their own log group.
+ */
+static constexpr const char *kAwsLogGroupNames = "aws.log.group.names";
+
+/**
+ * The ARN(s) of the AWS log stream(s).
+ *
+ * See the log
+ * stream ARN format documentation. One log group can contain several log streams, so these ARNs
+ * necessarily identify both a log group and a log stream.
+ */
+static constexpr const char *kAwsLogStreamArns = "aws.log.stream.arns";
+
+/**
+ * The name(s) of the AWS log stream(s) an application is writing to.
+ */
+static constexpr const char *kAwsLogStreamNames = "aws.log.stream.names";
+
+/**
+ * The AWS request ID as returned in the response headers @code x-amz-request-id @endcode or @code
+ * x-amz-requestid @endcode.
+ */
+static constexpr const char *kAwsRequestId = "aws.request_id";
+
+/**
+ * The S3 bucket name the request refers to. Corresponds to the @code --bucket @endcode parameter of
+ * the S3 API
+ * operations. The @code bucket @endcode attribute is applicable to all S3 operations that
+ * reference a bucket, i.e. that require the bucket name as a mandatory parameter. This applies to
+ * almost all S3 operations except @code list-buckets @endcode.
+ */
+static constexpr const char *kAwsS3Bucket = "aws.s3.bucket";
+
+/**
+ * The source object (in the form @code bucket @endcode/@code key @endcode) for the copy operation.
+ *
+ * The @code copy_source @endcode attribute applies to S3 copy operations and corresponds to the
+ * @code --copy-source @endcode parameter of the copy-object
+ * operation within the S3 API. This applies in particular to the following operations:
+ * The @code delete @endcode attribute is only applicable to the delete-object
+ * operation. The @code delete @endcode attribute corresponds to the @code --delete @endcode
+ * parameter of the delete-objects
+ * operation within the S3 API.
+ */
+static constexpr const char *kAwsS3Delete = "aws.s3.delete";
+
+/**
+ * The S3 object key the request refers to. Corresponds to the @code --key @endcode parameter of the
+ * S3 API
+ * operations. The @code key @endcode attribute is applicable to all object-related S3
+ * operations, i.e. that require the object key as a mandatory parameter. This applies in particular
+ * to the following operations: The @code part_number @endcode attribute is only applicable to
+ * the upload-part
+ * and upload-part-copy
+ * operations. The @code part_number @endcode attribute corresponds to the @code --part-number
+ * @endcode parameter of the upload-part
+ * operation within the S3 API.
+ */
+static constexpr const char *kAwsS3PartNumber = "aws.s3.part_number";
+
+/**
+ * Upload ID that identifies the multipart upload.
+ *
+ * The @code upload_id @endcode attribute applies to S3 multipart-upload operations and corresponds
+ * to the @code --upload-id @endcode parameter of the S3 API multipart
+ * operations. This applies in particular to the following operations:
+ * This value is intended to be taken from the UA client hints API (@code
+ * navigator.userAgentData.brands @endcode).
+ */
+static constexpr const char *kBrowserBrands = "browser.brands";
+
+/**
+ * Preferred language of the user using the browser
+ *
+ * This value is intended to be taken from the Navigator API @code navigator.language @endcode.
+ */
+static constexpr const char *kBrowserLanguage = "browser.language";
+
+/**
+ * A boolean that is true if the browser is running on a mobile device
+ *
+ * This value is intended to be taken from the UA client hints API (@code
+ * navigator.userAgentData.mobile @endcode). If unavailable, this attribute SHOULD be left unset.
+ */
+static constexpr const char *kBrowserMobile = "browser.mobile";
+
+/**
+ * The platform on which the browser is running
+ *
+ * This value is intended to be taken from the UA client hints API (@code
+ * navigator.userAgentData.platform @endcode). If unavailable, the legacy @code navigator.platform
+ * @endcode API SHOULD NOT be used instead and this attribute SHOULD be left unset in order for the
+ * values to be consistent. The list of possible values is defined in the W3C User-Agent Client Hints
+ * specification. Note that some (but not all) of these values can overlap with values in the @code os.type @endcode and @code os.name @endcode attributes. However, for
+ * consistency, the values in the @code browser.platform @endcode attribute should capture the exact
+ * value that the user agent provides.
+ */
+static constexpr const char *kBrowserPlatform = "browser.platform";
+
+} // namespace browser
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/cicd_attributes.h b/api/include/opentelemetry/semconv/incubating/cicd_attributes.h
new file mode 100644
index 0000000000..246563a8e8
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/cicd_attributes.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace cicd
+{
+
+/**
+ * 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";
+
+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 cicd
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/client_attributes.h b/api/include/opentelemetry/semconv/incubating/client_attributes.h
new file mode 100644
index 0000000000..ec984cc406
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/client_attributes.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace client
+{
+
+/**
+ * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or
+ * Unix domain socket name. When observed from the server side, and when communicating through
+ * an intermediary, @code client.address @endcode SHOULD represent the client address behind any
+ * intermediaries, for example proxies, if it's available.
+ */
+static constexpr const char *kClientAddress = "client.address";
+
+/**
+ * Client port number.
+ *
+ * When observed from the server side, and when communicating through an intermediary, @code
+ * client.port @endcode SHOULD represent the client port behind any intermediaries, for example
+ * proxies, if it's available.
+ */
+static constexpr const char *kClientPort = "client.port";
+
+} // namespace client
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/cloud_attributes.h b/api/include/opentelemetry/semconv/incubating/cloud_attributes.h
new file mode 100644
index 0000000000..cd76489eba
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/cloud_attributes.h
@@ -0,0 +1,272 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace cloud
+{
+
+/**
+ * The cloud account ID the resource is assigned to.
+ */
+static constexpr const char *kCloudAccountId = "cloud.account.id";
+
+/**
+ * Cloud regions often have multiple, isolated locations known as zones to increase availability.
+ * Availability zone represents the zone where the resource is running. Availability zones are
+ * called "zones" on Alibaba Cloud and Google Cloud.
+ */
+static constexpr const char *kCloudAvailabilityZone = "cloud.availability_zone";
+
+/**
+ * The cloud platform in use.
+ *
+ * The prefix of the service SHOULD match the one specified in @code cloud.provider @endcode.
+ */
+static constexpr const char *kCloudPlatform = "cloud.platform";
+
+/**
+ * Name of the cloud provider.
+ */
+static constexpr const char *kCloudProvider = "cloud.provider";
+
+/**
+ * The geographical region the resource is running.
+ *
+ * Refer to your provider's docs to see the available regions, for example Alibaba Cloud regions, AWS regions, Azure regions, Google Cloud regions, or Tencent Cloud regions.
+ */
+static constexpr const char *kCloudRegion = "cloud.region";
+
+/**
+ * Cloud provider-specific native identifier of the monitored cloud resource (e.g. an ARN on AWS,
+ * a fully qualified
+ * resource ID on Azure, a full resource
+ * name on GCP) On some cloud providers, it may not be possible to determine the full ID at
+ * startup, so it may be necessary to set @code cloud.resource_id @endcode as a span attribute
+ * instead. The exact value to use for @code cloud.resource_id @endcode depends on the cloud
+ * provider. The following well-known definitions MUST be used if you set this attribute and they
+ * apply:
+ * If using embedded credentials or sensitive data, it is recommended to remove them to prevent
+ * potential leakage.
+ */
+static constexpr const char *kContainerCommand = "container.command";
+
+/**
+ * All the command arguments (including the command/executable itself) run by the container. [2]
+ */
+static constexpr const char *kContainerCommandArgs = "container.command_args";
+
+/**
+ * The full command run by the container as a single string representing the full command. [2]
+ */
+static constexpr const char *kContainerCommandLine = "container.command_line";
+
+/**
+ * Deprecated, use @code cpu.mode @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code cpu.mode @endcode
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kContainerCpuState = "container.cpu.state";
+
+/**
+ * Container ID. Usually a UUID, as for example used to identify Docker
+ * containers. The UUID might be abbreviated.
+ */
+static constexpr const char *kContainerId = "container.id";
+
+/**
+ * Runtime specific image identifier. Usually a hash algorithm followed by a UUID.
+ *
+ * Docker defines a sha256 of the image id; @code container.image.id @endcode corresponds to the
+ * @code Image @endcode field from the Docker container inspect API
+ * endpoint. K8s defines a link to the container registry repository with digest @code "imageID":
+ * "registry.azurecr.io
+ * /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"
+ * @endcode. The ID is assigned by the container runtime and can vary in different environments.
+ * Consider using @code oci.manifest.digest @endcode if it is important to identify the same image
+ * in different environments/runtimes.
+ */
+static constexpr const char *kContainerImageId = "container.image.id";
+
+/**
+ * Name of the image the container was built on.
+ */
+static constexpr const char *kContainerImageName = "container.image.name";
+
+/**
+ * Repo digests of the container image as provided by the container runtime.
+ *
+ * Docker
+ * and CRI
+ * report those under the @code RepoDigests @endcode field.
+ */
+static constexpr const char *kContainerImageRepoDigests = "container.image.repo_digests";
+
+/**
+ * Container image tags. An example can be found in Docker Image
+ * Inspect. Should be only the @code
+ * @deprecated
+ * Replaced by @code container.label @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kContainerLabels = "container.labels";
+
+/**
+ * Container name used by container runtime.
+ */
+static constexpr const char *kContainerName = "container.name";
+
+/**
+ * The container runtime managing this container.
+ */
+static constexpr const char *kContainerRuntime = "container.runtime";
+
+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 container
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/container_metrics.h b/api/include/opentelemetry/semconv/incubating/container_metrics.h
new file mode 100644
index 0000000000..e670fb3788
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/container_metrics.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace container
+{
+
+/**
+ * Total CPU time consumed
+ *
+ * Total CPU time consumed by the specific container on all available CPU cores
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerCpuTime = "metric.container.cpu.time";
+static constexpr const char *descrMetricContainerCpuTime = "Total CPU time consumed";
+static constexpr const char *unitMetricContainerCpuTime = "s";
+
+static inline nostd::unique_ptr
+ * The total number of bytes read/written successfully (aggregated from all disks).
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerDiskIo = "metric.container.disk.io";
+static constexpr const char *descrMetricContainerDiskIo = "Disk bytes for the container.";
+static constexpr const char *unitMetricContainerDiskIo = "By";
+
+static inline nostd::unique_ptr
+ * Memory usage of the container.
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerMemoryUsage = "metric.container.memory.usage";
+static constexpr const char *descrMetricContainerMemoryUsage = "Memory usage of the container.";
+static constexpr const char *unitMetricContainerMemoryUsage = "By";
+
+static inline nostd::unique_ptr
+ * The number of bytes sent/received on all network interfaces by the container.
+ *
+ * counter
+ */
+static constexpr const char *kMetricContainerNetworkIo = "metric.container.network.io";
+static constexpr const char *descrMetricContainerNetworkIo = "Network bytes for the container.";
+static constexpr const char *unitMetricContainerNetworkIo = "By";
+
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.collection.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbCassandraTable = "db.cassandra.table";
+
+/**
+ * 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 parameters that would make the name unique, for example, combining attributes @code
+ * server.address @endcode, @code server.port @endcode, and @code db.namespace @endcode, formatted
+ * as @code server.address:server.port/db.namespace @endcode. Instrumentations that generate
+ * connection pool name following different patterns SHOULD document it.
+ */
+static constexpr const char *kDbClientConnectionPoolName = "db.client.connection.pool.name";
+
+/**
+ * The state of a connection in the pool
+ */
+static constexpr const char *kDbClientConnectionState = "db.client.connection.state";
+
+/**
+ * Deprecated, use @code db.client.connection.pool.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.client.connection.pool.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsPoolName = "db.client.connections.pool.name";
+
+/**
+ * Deprecated, use @code db.client.connection.state @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.client.connection.state @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbClientConnectionsState = "db.client.connections.state";
+
+/**
+ * The name of a collection (table, container) within the database.
+ *
+ * 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 @endcode SHOULD NOT be captured.
+ */
+static constexpr const char *kDbCollectionName = "db.collection.name";
+
+/**
+ * Deprecated, use @code server.address @endcode, @code server.port @endcode attributes instead.
+ *
+ * @deprecated
+ * "Replaced by @code server.address @endcode and @code server.port @endcode."
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbConnectionString = "db.connection_string";
+
+/**
+ * Unique Cosmos client instance id.
+ */
+static constexpr const char *kDbCosmosdbClientId = "db.cosmosdb.client_id";
+
+/**
+ * Cosmos client connection mode.
+ */
+static constexpr const char *kDbCosmosdbConnectionMode = "db.cosmosdb.connection_mode";
+
+/**
+ * Deprecated, use @code db.collection.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.collection.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
+
+/**
+ * CosmosDB Operation Type.
+ */
+static constexpr const char *kDbCosmosdbOperationType = "db.cosmosdb.operation_type";
+
+/**
+ * RU consumed for that operation
+ */
+static constexpr const char *kDbCosmosdbRequestCharge = "db.cosmosdb.request_charge";
+
+/**
+ * Request payload size in bytes
+ */
+static constexpr const char *kDbCosmosdbRequestContentLength = "db.cosmosdb.request_content_length";
+
+/**
+ * Cosmos DB status code.
+ */
+static constexpr const char *kDbCosmosdbStatusCode = "db.cosmosdb.status_code";
+
+/**
+ * Cosmos DB sub status code.
+ */
+static constexpr const char *kDbCosmosdbSubStatusCode = "db.cosmosdb.sub_status_code";
+
+/**
+ * Deprecated, use @code db.namespace @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.namespace @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbElasticsearchClusterName = "db.elasticsearch.cluster.name";
+
+/**
+ * Represents the human-readable identifier of the node/instance to which a request was routed.
+ */
+static constexpr const char *kDbElasticsearchNodeName = "db.elasticsearch.node.name";
+
+/**
+ * A dynamic value in the url path.
+ *
+ * Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in
+ * the format @code db.elasticsearch.path_parts.
+ * @deprecated
+ * Deprecated, no general replacement at this time. For Elasticsearch, use @code
+ * db.elasticsearch.node.name @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbInstanceId = "db.instance.id";
+
+/**
+ * Removed, no replacement at this time.
+ *
+ * @deprecated
+ * Removed as not used.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbJdbcDriverClassname = "db.jdbc.driver_classname";
+
+/**
+ * Deprecated, use @code db.collection.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.collection.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbMongodbCollection = "db.mongodb.collection";
+
+/**
+ * Deprecated, SQL Server instance is now populated as a part of @code db.namespace @endcode
+ * attribute.
+ * @deprecated
+ * Deprecated, no replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbMssqlInstanceName = "db.mssql.instance_name";
+
+/**
+ * Deprecated, use @code db.namespace @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.namespace @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbName = "db.name";
+
+/**
+ * The name of the database, fully qualified within the server address and port.
+ *
+ * If a database system has multiple namespace components, they SHOULD be concatenated (potentially
+ * using database system specific conventions) from most general to most specific namespace
+ * component, and more specific namespaces SHOULD NOT be captured without the more general
+ * namespaces, to ensure that "startswith" queries for the more general namespaces will be valid.
+ * Semantic conventions for individual database systems SHOULD document what @code db.namespace
+ * @endcode means in the context of that system. It is RECOMMENDED to capture the value as provided
+ * by the application without attempting to do any case normalization.
+ */
+static constexpr const char *kDbNamespace = "db.namespace";
+
+/**
+ * Deprecated, use @code db.operation.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.operation.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbOperation = "db.operation";
+
+/**
+ * The number of queries included in a batch operation. Operations are
+ * only considered batches when they contain two or more operations, and so @code
+ * db.operation.batch.size @endcode SHOULD never be @code 1 @endcode.
+ */
+static constexpr const char *kDbOperationBatchSize = "db.operation.batch.size";
+
+/**
+ * The name of the operation or command being executed.
+ *
+ * It is RECOMMENDED to capture the value as provided by the application without attempting 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 @endcode, otherwise @code db.operation.name @endcode SHOULD be @code BATCH @endcode or
+ * some other database system specific term if more applicable.
+ */
+static constexpr const char *kDbOperationName = "db.operation.name";
+
+/**
+ * A query parameter used in @code db.query.text @endcode, with @code
+ * Query parameters should only be captured when @code db.query.text @endcode is parameterized with
+ * placeholders. If a parameter has no name and instead is referenced only by index, then @code
+ *
+ * For sanitization see Sanitization of @code
+ * db.query.text @endcode. 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 ; @endcode 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";
+
+/**
+ * Deprecated, use @code db.namespace @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.namespace @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbRedisDatabaseIndex = "db.redis.database_index";
+
+/**
+ * Deprecated, use @code db.collection.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.collection.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbSqlTable = "db.sql.table";
+
+/**
+ * The database statement being executed.
+ *
+ * @deprecated
+ * Replaced by @code db.query.text @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbStatement = "db.statement";
+
+/**
+ * The database management system (DBMS) product as identified by the client instrumentation.
+ *
+ * The actual DBMS may differ from the one identified by the client. For example, when using
+ * PostgreSQL client libraries to connect to a CockroachDB, the @code db.system @endcode is set to
+ * @code postgresql @endcode based on the instrumentation's best knowledge.
+ */
+static constexpr const char *kDbSystem = "db.system";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * No replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDbUser = "db.user";
+
+namespace DbCassandraConsistencyLevelValues
+{
+/**
+ * none
+ */
+static constexpr const char *kAll = "all";
+
+/**
+ * none
+ */
+static constexpr const char *kEachQuorum = "each_quorum";
+
+/**
+ * none
+ */
+static constexpr const char *kQuorum = "quorum";
+
+/**
+ * none
+ */
+static constexpr const char *kLocalQuorum = "local_quorum";
+
+/**
+ * none
+ */
+static constexpr const char *kOne = "one";
+
+/**
+ * none
+ */
+static constexpr const char *kTwo = "two";
+
+/**
+ * none
+ */
+static constexpr const char *kThree = "three";
+
+/**
+ * none
+ */
+static constexpr const char *kLocalOne = "local_one";
+
+/**
+ * none
+ */
+static constexpr const char *kAny = "any";
+
+/**
+ * none
+ */
+static constexpr const char *kSerial = "serial";
+
+/**
+ * none
+ */
+static constexpr const char *kLocalSerial = "local_serial";
+
+} // namespace DbCassandraConsistencyLevelValues
+
+namespace DbClientConnectionStateValues
+{
+/**
+ * none
+ */
+static constexpr const char *kIdle = "idle";
+
+/**
+ * none
+ */
+static constexpr const char *kUsed = "used";
+
+} // namespace DbClientConnectionStateValues
+
+namespace DbClientConnectionsStateValues
+{
+/**
+ * none
+ */
+static constexpr const char *kIdle = "idle";
+
+/**
+ * none
+ */
+static constexpr const char *kUsed = "used";
+
+} // namespace DbClientConnectionsStateValues
+
+namespace DbCosmosdbConnectionModeValues
+{
+/**
+ * Gateway (HTTP) connections mode
+ */
+static constexpr const char *kGateway = "gateway";
+
+/**
+ * Direct connection.
+ */
+static constexpr const char *kDirect = "direct";
+
+} // namespace DbCosmosdbConnectionModeValues
+
+namespace DbCosmosdbOperationTypeValues
+{
+/**
+ * none
+ */
+static constexpr const char *kInvalid = "Invalid";
+
+/**
+ * none
+ */
+static constexpr const char *kCreate = "Create";
+
+/**
+ * none
+ */
+static constexpr const char *kPatch = "Patch";
+
+/**
+ * none
+ */
+static constexpr const char *kRead = "Read";
+
+/**
+ * none
+ */
+static constexpr const char *kReadFeed = "ReadFeed";
+
+/**
+ * none
+ */
+static constexpr const char *kDelete = "Delete";
+
+/**
+ * none
+ */
+static constexpr const char *kReplace = "Replace";
+
+/**
+ * none
+ */
+static constexpr const char *kExecute = "Execute";
+
+/**
+ * none
+ */
+static constexpr const char *kQuery = "Query";
+
+/**
+ * none
+ */
+static constexpr const char *kHead = "Head";
+
+/**
+ * none
+ */
+static constexpr const char *kHeadFeed = "HeadFeed";
+
+/**
+ * none
+ */
+static constexpr const char *kUpsert = "Upsert";
+
+/**
+ * none
+ */
+static constexpr const char *kBatch = "Batch";
+
+/**
+ * none
+ */
+static constexpr const char *kQueryPlan = "QueryPlan";
+
+/**
+ * none
+ */
+static constexpr const char *kExecuteJavascript = "ExecuteJavaScript";
+
+} // namespace DbCosmosdbOperationTypeValues
+
+namespace DbSystemValues
+{
+/**
+ * Some other SQL database. Fallback only. See notes.
+ */
+static constexpr const char *kOtherSql = "other_sql";
+
+/**
+ * Adabas (Adaptable Database System)
+ */
+static constexpr const char *kAdabas = "adabas";
+
+/**
+ * Deprecated, use @code intersystems_cache @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code intersystems_cache @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+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 @code other_sql @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code other_sql @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kCloudscape = "cloudscape";
+
+/**
+ * CockroachDB
+ */
+static constexpr const char *kCockroachdb = "cockroachdb";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * Removed.
+ */
+OPENTELEMETRY_DEPRECATED
+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 @code other_sql @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code other_sql @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+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.
+ *
+ * @deprecated
+ * Removed, use @code other_sql @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+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";
+
+/**
+ * Trino
+ */
+static constexpr const char *kTrino = "trino";
+
+/**
+ * Vertica
+ */
+static constexpr const char *kVertica = "vertica";
+
+} // namespace DbSystemValues
+
+} // namespace db
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/db_metrics.h b/api/include/opentelemetry/semconv/incubating/db_metrics.h
new file mode 100644
index 0000000000..6ea8e095c7
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/db_metrics.h
@@ -0,0 +1,816 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace db
+{
+
+/**
+ * The number of connections that are currently in state described by the @code state @endcode
+ * attribute updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionCount = "metric.db.client.connection.count";
+static constexpr const char *descrMetricDbClientConnectionCount =
+ "The number of connections that are currently in state described by the `state` attribute";
+static constexpr const char *unitMetricDbClientConnectionCount = "{connection}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionCreateTime =
+ "metric.db.client.connection.create_time";
+static constexpr const char *descrMetricDbClientConnectionCreateTime =
+ "The time it took to create a new connection";
+static constexpr const char *unitMetricDbClientConnectionCreateTime = "s";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionIdleMax =
+ "metric.db.client.connection.idle.max";
+static constexpr const char *descrMetricDbClientConnectionIdleMax =
+ "The maximum number of idle open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionIdleMax = "{connection}";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionIdleMin =
+ "metric.db.client.connection.idle.min";
+static constexpr const char *descrMetricDbClientConnectionIdleMin =
+ "The minimum number of idle open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionIdleMin = "{connection}";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionMax = "metric.db.client.connection.max";
+static constexpr const char *descrMetricDbClientConnectionMax =
+ "The maximum number of open connections allowed";
+static constexpr const char *unitMetricDbClientConnectionMax = "{connection}";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientConnectionPendingRequests =
+ "metric.db.client.connection.pending_requests";
+static constexpr const char *descrMetricDbClientConnectionPendingRequests =
+ "The number of pending requests for an open connection, cumulative for the entire pool";
+static constexpr const char *unitMetricDbClientConnectionPendingRequests = "{request}";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricDbClientConnectionTimeouts =
+ "metric.db.client.connection.timeouts";
+static constexpr const char *descrMetricDbClientConnectionTimeouts =
+ "The number of connection timeouts that have occurred trying to obtain a connection from the "
+ "pool";
+static constexpr const char *unitMetricDbClientConnectionTimeouts = "{timeout}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionUseTime =
+ "metric.db.client.connection.use_time";
+static constexpr const char *descrMetricDbClientConnectionUseTime =
+ "The time between borrowing a connection and returning it to the pool";
+static constexpr const char *unitMetricDbClientConnectionUseTime = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricDbClientConnectionWaitTime =
+ "metric.db.client.connection.wait_time";
+static constexpr const char *descrMetricDbClientConnectionWaitTime =
+ "The time it took to obtain an open connection from the pool";
+static constexpr const char *unitMetricDbClientConnectionWaitTime = "s";
+
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.create_time @endcode. Note: the unit also changed from
+ * @code ms @endcode to @code s @endcode. histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsCreateTimeDeprecated =
+ "metric.db.client.connections.create_time.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsCreateTimeDeprecated =
+ "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsCreateTimeDeprecated = "ms";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.idle.max @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsIdleMaxDeprecated =
+ "metric.db.client.connections.idle.max.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsIdleMaxDeprecated =
+ "Deprecated, use `db.client.connection.idle.max` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsIdleMaxDeprecated = "{connection}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.idle.min @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsIdleMinDeprecated =
+ "metric.db.client.connections.idle.min.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsIdleMinDeprecated =
+ "Deprecated, use `db.client.connection.idle.min` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsIdleMinDeprecated = "{connection}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.max @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsMaxDeprecated =
+ "metric.db.client.connections.max.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsMaxDeprecated =
+ "Deprecated, use `db.client.connection.max` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsMaxDeprecated = "{connection}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.pending_requests @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsPendingRequestsDeprecated =
+ "metric.db.client.connections.pending_requests.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsPendingRequestsDeprecated =
+ "Deprecated, use `db.client.connection.pending_requests` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsPendingRequestsDeprecated = "{request}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.timeouts @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsTimeoutsDeprecated =
+ "metric.db.client.connections.timeouts.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsTimeoutsDeprecated =
+ "Deprecated, use `db.client.connection.timeouts` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsTimeoutsDeprecated = "{timeout}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.count @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsCountDeprecated =
+ "metric.db.client.connections.count.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsCountDeprecated =
+ "Deprecated, use `db.client.connection.count` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsCountDeprecated = "{connection}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.use_time @endcode. Note: the unit also changed from @code
+ * ms @endcode to @code s @endcode. histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsUseTimeDeprecated =
+ "metric.db.client.connections.use_time.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsUseTimeDeprecated =
+ "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsUseTimeDeprecated = "ms";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code db.client.connection.wait_time @endcode. Note: the unit also changed from @code
+ * ms @endcode to @code s @endcode. histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsWaitTimeDeprecated =
+ "metric.db.client.connections.wait_time.deprecated";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricDbClientConnectionsWaitTimeDeprecated =
+ "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricDbClientConnectionsWaitTimeDeprecated = "ms";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * Batch operations SHOULD be recorded as a single operation.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDbClientOperationDuration =
+ "metric.db.client.operation.duration";
+static constexpr const char *descrMetricDbClientOperationDuration =
+ "Duration of database client operations.";
+static constexpr const char *unitMetricDbClientOperationDuration = "s";
+
+static inline nostd::unique_ptr
+ * @deprecated
+ * Deprecated, use @code deployment.environment.name @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDeploymentEnvironment = "deployment.environment";
+
+/**
+ * Name of the deployment
+ * environment (aka deployment tier).
+ * @code deployment.environment.name @endcode does not affect the uniqueness constraints defined
+ * through the @code service.namespace @endcode, @code service.name @endcode and @code
+ * service.instance.id @endcode resource attributes. This implies that resources carrying the
+ * following attribute combinations MUST be considered to be identifying the same service: When observed from the source side, and when communicating
+ * through an intermediary, @code destination.address @endcode SHOULD represent the destination
+ * address behind any intermediaries, for example proxies, if it's available.
+ */
+static constexpr const char *kDestinationAddress = "destination.address";
+
+/**
+ * Destination port number
+ */
+static constexpr const char *kDestinationPort = "destination.port";
+
+} // namespace destination
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/device_attributes.h b/api/include/opentelemetry/semconv/incubating/device_attributes.h
new file mode 100644
index 0000000000..c2c80f5fd2
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/device_attributes.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace device
+{
+
+/**
+ * A unique identifier representing the device
+ *
+ * The device identifier MUST only be defined using the values outlined below. This value is not an
+ * advertising identifier and MUST NOT be used as such. On iOS (Swift or Objective-C), this value
+ * MUST be equal to the vendor
+ * identifier. On Android (Java or Kotlin), this value MUST be equal to the Firebase
+ * Installation ID or a globally unique UUID which is persisted across sessions in your application.
+ * More information can be found here on best practices
+ * and exact implementation details. Caution should be taken when storing personal data or anything
+ * which can identify a user. GDPR and data protection laws may apply, ensure you do your own due
+ * diligence.
+ */
+static constexpr const char *kDeviceId = "device.id";
+
+/**
+ * The name of the device manufacturer
+ *
+ * The Android OS provides this field via Build. iOS apps
+ * SHOULD hardcode the value @code Apple @endcode.
+ */
+static constexpr const char *kDeviceManufacturer = "device.manufacturer";
+
+/**
+ * The model identifier for the device
+ *
+ * It's recommended this value represents a machine-readable version of the model identifier rather
+ * than the market or consumer-friendly name of the device.
+ */
+static constexpr const char *kDeviceModelIdentifier = "device.model.identifier";
+
+/**
+ * The marketing name for the device model
+ *
+ * It's recommended this value represents a human-readable version of the device model rather than a
+ * machine-readable alternative.
+ */
+static constexpr const char *kDeviceModelName = "device.model.name";
+
+} // namespace device
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/disk_attributes.h b/api/include/opentelemetry/semconv/incubating/disk_attributes.h
new file mode 100644
index 0000000000..ff938a9612
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/disk_attributes.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace disk
+{
+
+/**
+ * The disk IO operation direction.
+ */
+static constexpr const char *kDiskIoDirection = "disk.io.direction";
+
+namespace DiskIoDirectionValues
+{
+/**
+ * none
+ */
+static constexpr const char *kRead = "read";
+
+/**
+ * none
+ */
+static constexpr const char *kWrite = "write";
+
+} // namespace DiskIoDirectionValues
+
+} // namespace disk
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/dns_attributes.h b/api/include/opentelemetry/semconv/incubating/dns_attributes.h
new file mode 100644
index 0000000000..b835e2a73a
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/dns_attributes.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace dns
+{
+
+/**
+ * The name being queried.
+ *
+ * If the name field contains non-printable characters (below 32 or above 126), those characters
+ * should be represented as escaped base 10 integers (\DDD). Back slashes and quotes should be
+ * escaped. Tabs, carriage returns, and line feeds should be converted to \t, \r, and \n
+ * respectively.
+ */
+static constexpr const char *kDnsQuestionName = "dns.question.name";
+
+} // namespace dns
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/dns_metrics.h b/api/include/opentelemetry/semconv/incubating/dns_metrics.h
new file mode 100644
index 0000000000..7f3915870b
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/dns_metrics.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace dns
+{
+
+/**
+ * Measures the time taken to perform a DNS lookup.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricDnsLookupDuration = "metric.dns.lookup.duration";
+static constexpr const char *descrMetricDnsLookupDuration =
+ "Measures the time taken to perform a DNS lookup.";
+static constexpr const char *unitMetricDnsLookupDuration = "s";
+
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code user.id @endcode attribute.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserId = "enduser.id";
+
+/**
+ * Deprecated, use @code user.roles @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code user.roles @endcode attribute.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserRole = "enduser.role";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * Removed.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kEnduserScope = "enduser.scope";
+
+} // namespace enduser
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/error_attributes.h b/api/include/opentelemetry/semconv/incubating/error_attributes.h
new file mode 100644
index 0000000000..1b711ff112
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/error_attributes.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace error
+{
+
+/**
+ * Describes a class of error the operation ended with.
+ *
+ * The @code error.type @endcode SHOULD be predictable, and SHOULD have low cardinality.
+ *
+ * When @code error.type @endcode is set to a type (e.g., an exception type), its
+ * canonical class name identifying the type within the artifact SHOULD be used.
+ *
+ * Instrumentations SHOULD document the list of errors they report.
+ *
+ * The cardinality of @code error.type @endcode within one instrumentation library SHOULD be low.
+ * Telemetry consumers that aggregate data from multiple instrumentation libraries and applications
+ * should be prepared for @code error.type @endcode to have high cardinality at query time when no
+ * additional filters are applied.
+ *
+ * If the operation has completed successfully, instrumentations SHOULD NOT set @code error.type
+ * @endcode. If a specific domain defines its own set of error identifiers (such as HTTP or gRPC
+ * status codes), it's RECOMMENDED to:
+ * 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.
+ */
+static constexpr const char *kEventName = "event.name";
+
+} // namespace event
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/exception_attributes.h b/api/include/opentelemetry/semconv/incubating/exception_attributes.h
new file mode 100644
index 0000000000..fdc19ac6d0
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/exception_attributes.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace exception
+{
+
+/**
+ * SHOULD be set to true if the exception event is recorded at a point where it is known that the
+ * exception is escaping the scope of the span. An exception is considered to have escaped (or
+ * left) the scope of a span, if that span is ended while the exception is still logically "in
+ * flight". This may be actually "in flight" in some languages (e.g. if the exception is passed to a
+ * Context manager's @code __exit__ @endcode method in Python) but will usually be caught at the
+ * point of recording the exception in most languages. It is usually not possible to determine
+ * at the point where an exception is thrown whether it will escape the scope of a span. However, it
+ * is trivial to know that an exception will escape, if one checks for an active exception just
+ * before ending the span, as done in the example
+ * for recording span exceptions. It follows that an exception may still escape the scope of
+ * the span even if the @code exception.escaped @endcode attribute was not set or set to false,
+ * since the event might have been recorded at a time where it was not
+ * clear whether the exception will escape.
+ */
+static constexpr const char *kExceptionEscaped = "exception.escaped";
+
+/**
+ * The exception message.
+ */
+static constexpr const char *kExceptionMessage = "exception.message";
+
+/**
+ * A stacktrace as a string in the natural representation for the language runtime. The
+ * representation is to be determined and documented by each language SIG.
+ */
+static constexpr const char *kExceptionStacktrace = "exception.stacktrace";
+
+/**
+ * The type of the exception (its fully-qualified class name, if applicable). The dynamic type of
+ * the exception should be preferred over the static type in languages that support it.
+ */
+static constexpr const char *kExceptionType = "exception.type";
+
+} // namespace exception
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/faas_attributes.h b/api/include/opentelemetry/semconv/incubating/faas_attributes.h
new file mode 100644
index 0000000000..ed9076ec39
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/faas_attributes.h
@@ -0,0 +1,232 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace faas
+{
+
+/**
+ * A boolean that is true if the serverless function is executed for the first time (aka
+ * cold-start).
+ */
+static constexpr const char *kFaasColdstart = "faas.coldstart";
+
+/**
+ * A string containing the schedule period as Cron
+ * Expression.
+ */
+static constexpr const char *kFaasCron = "faas.cron";
+
+/**
+ * The name of the source on which the triggering operation was performed. For example, in Cloud
+ * Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.
+ */
+static constexpr const char *kFaasDocumentCollection = "faas.document.collection";
+
+/**
+ * The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the
+ * name of the file, and in Cosmos DB the table name.
+ */
+static constexpr const char *kFaasDocumentName = "faas.document.name";
+
+/**
+ * Describes the type of the operation that was performed on the data.
+ */
+static constexpr const char *kFaasDocumentOperation = "faas.document.operation";
+
+/**
+ * A string containing the time when the data was accessed in the ISO 8601 format expressed in UTC.
+ */
+static constexpr const char *kFaasDocumentTime = "faas.document.time";
+
+/**
+ * The execution environment ID as a string, that will be potentially reused for other invocations
+ * to the same function/function version.
+ * SHOULD be equal to the @code faas.name @endcode resource attribute of the invoked function.
+ */
+static constexpr const char *kFaasInvokedName = "faas.invoked_name";
+
+/**
+ * The cloud provider of the invoked function.
+ *
+ * SHOULD be equal to the @code cloud.provider @endcode resource attribute of the invoked function.
+ */
+static constexpr const char *kFaasInvokedProvider = "faas.invoked_provider";
+
+/**
+ * The cloud region of the invoked function.
+ *
+ * SHOULD be equal to the @code cloud.region @endcode resource attribute of the invoked function.
+ */
+static constexpr const char *kFaasInvokedRegion = "faas.invoked_region";
+
+/**
+ * The amount of memory available to the serverless function converted to Bytes.
+ *
+ * It's recommended to set this attribute since e.g. too little memory can easily stop a Java AWS
+ * Lambda function from working correctly. On AWS Lambda, the environment variable @code
+ * AWS_LAMBDA_FUNCTION_MEMORY_SIZE @endcode provides this information (which must be multiplied by
+ * 1,048,576).
+ */
+static constexpr const char *kFaasMaxMemory = "faas.max_memory";
+
+/**
+ * The name of the single function that this runtime instance executes.
+ *
+ * This is the name of the function as configured/deployed on the FaaS
+ * platform and is usually different from the name of the callback
+ * function (which may be stored in the
+ * @code code.namespace @endcode/@code
+ * code.function @endcode span attributes). For some cloud providers, the above definition
+ * is ambiguous. The following definition of function name MUST be used for this attribute (and
+ * consequently the span name) for the listed cloud providers/products:
+ * Depending on the cloud provider and platform, use:
+ *
+ *
+ * counter
+ */
+static constexpr const char *kMetricFaasColdstarts = "metric.faas.coldstarts";
+static constexpr const char *descrMetricFaasColdstarts = "Number of invocation cold starts";
+static constexpr const char *unitMetricFaasColdstarts = "{coldstart}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricFaasCpuUsage = "metric.faas.cpu_usage";
+static constexpr const char *descrMetricFaasCpuUsage = "Distribution of CPU usage per invocation";
+static constexpr const char *unitMetricFaasCpuUsage = "s";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricFaasErrors = "metric.faas.errors";
+static constexpr const char *descrMetricFaasErrors = "Number of invocation errors";
+static constexpr const char *unitMetricFaasErrors = "{error}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricFaasInitDuration = "metric.faas.init_duration";
+static constexpr const char *descrMetricFaasInitDuration =
+ "Measures the duration of the function's initialization, such as a cold start";
+static constexpr const char *unitMetricFaasInitDuration = "s";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricFaasInvocations = "metric.faas.invocations";
+static constexpr const char *descrMetricFaasInvocations = "Number of successful invocations";
+static constexpr const char *unitMetricFaasInvocations = "{invocation}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricFaasInvokeDuration = "metric.faas.invoke_duration";
+static constexpr const char *descrMetricFaasInvokeDuration =
+ "Measures the duration of the function's logic execution";
+static constexpr const char *unitMetricFaasInvokeDuration = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricFaasMemUsage = "metric.faas.mem_usage";
+static constexpr const char *descrMetricFaasMemUsage =
+ "Distribution of max memory usage per invocation";
+static constexpr const char *unitMetricFaasMemUsage = "By";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricFaasNetIo = "metric.faas.net_io";
+static constexpr const char *descrMetricFaasNetIo = "Distribution of net I/O usage per invocation";
+static constexpr const char *unitMetricFaasNetIo = "By";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricFaasTimeouts = "metric.faas.timeouts";
+static constexpr const char *descrMetricFaasTimeouts = "Number of invocation timeouts";
+static constexpr const char *unitMetricFaasTimeouts = "{timeout}";
+
+static inline nostd::unique_ptr A semantic identifier, commonly referred to as a variant, provides a means
+ * for referring to a value without including the value itself. This can
+ * provide additional context for understanding the meaning behind a value.
+ * For example, the variant @code red @endcode maybe be used for the value @code #c05543 @endcode.
+ *
+ * A stringified version of the value can be used in situations where a
+ * semantic identifier is unavailable. String representation of the value
+ * should be determined by the implementer.
+ */
+static constexpr const char *kFeatureFlagVariant = "feature_flag.variant";
+
+} // namespace feature_flag
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/file_attributes.h b/api/include/opentelemetry/semconv/incubating/file_attributes.h
new file mode 100644
index 0000000000..eb65a811ec
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/file_attributes.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace file
+{
+
+/**
+ * Directory where the file is located. It should include the drive letter, when appropriate.
+ */
+static constexpr const char *kFileDirectory = "file.directory";
+
+/**
+ * File extension, excluding the leading dot.
+ *
+ * When the file name has multiple extensions (example.tar.gz), only the last one should be captured
+ * ("gz", not "tar.gz").
+ */
+static constexpr const char *kFileExtension = "file.extension";
+
+/**
+ * Name of the file including the extension, without the directory.
+ */
+static constexpr const char *kFileName = "file.name";
+
+/**
+ * Full path to the file, including the file name. It should include the drive letter, when
+ * appropriate.
+ */
+static constexpr const char *kFilePath = "file.path";
+
+/**
+ * File size in bytes.
+ */
+static constexpr const char *kFileSize = "file.size";
+
+} // namespace file
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/gcp_attributes.h b/api/include/opentelemetry/semconv/incubating/gcp_attributes.h
new file mode 100644
index 0000000000..53518251bb
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/gcp_attributes.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace gcp
+{
+
+/**
+ * Identifies the Google Cloud service for which the official client library is intended.
+ *
+ * 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
+ * Job, as set by the @code
+ * CLOUD_RUN_EXECUTION @endcode environment variable.
+ */
+static constexpr const char *kGcpCloudRunJobExecution = "gcp.cloud_run.job.execution";
+
+/**
+ * The index for a task within an execution as provided by the @code
+ * CLOUD_RUN_TASK_INDEX @endcode environment variable.
+ */
+static constexpr const char *kGcpCloudRunJobTaskIndex = "gcp.cloud_run.job.task_index";
+
+/**
+ * The hostname of a GCE instance. This is the full value of the default or custom hostname.
+ */
+static constexpr const char *kGcpGceInstanceHostname = "gcp.gce.instance.hostname";
+
+/**
+ * The instance name of a GCE instance. This is the value provided by @code host.name @endcode, the
+ * visible name of the instance in the Cloud Console UI, and the prefix for the default hostname of
+ * the instance as defined by the default
+ * internal DNS name.
+ */
+static constexpr const char *kGcpGceInstanceName = "gcp.gce.instance.name";
+
+} // namespace gcp
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h b/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h
new file mode 100644
index 0000000000..03f2eebc2c
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h
@@ -0,0 +1,206 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace gen_ai
+{
+
+/**
+ * The full response received from the GenAI model.
+ *
+ * It's RECOMMENDED to format completions as JSON string matching OpenAI messages format
+ */
+static constexpr const char *kGenAiCompletion = "gen_ai.completion";
+
+/**
+ * The name of the operation being performed.
+ *
+ * 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.
+ *
+ * It's RECOMMENDED to format prompts as JSON string matching OpenAI messages format
+ */
+static constexpr const char *kGenAiPrompt = "gen_ai.prompt";
+
+/**
+ * The frequency penalty setting for the GenAI request.
+ */
+static constexpr const char *kGenAiRequestFrequencyPenalty = "gen_ai.request.frequency_penalty";
+
+/**
+ * The maximum number of tokens the model generates for a request.
+ */
+static constexpr const char *kGenAiRequestMaxTokens = "gen_ai.request.max_tokens";
+
+/**
+ * The name of the GenAI model a request is being made to.
+ */
+static constexpr const char *kGenAiRequestModel = "gen_ai.request.model";
+
+/**
+ * The presence penalty setting for the GenAI request.
+ */
+static constexpr const char *kGenAiRequestPresencePenalty = "gen_ai.request.presence_penalty";
+
+/**
+ * List of sequences that the model will use to stop generating further tokens.
+ */
+static constexpr const char *kGenAiRequestStopSequences = "gen_ai.request.stop_sequences";
+
+/**
+ * The temperature setting for the GenAI request.
+ */
+static constexpr const char *kGenAiRequestTemperature = "gen_ai.request.temperature";
+
+/**
+ * The top_k sampling setting for the GenAI request.
+ */
+static constexpr const char *kGenAiRequestTopK = "gen_ai.request.top_k";
+
+/**
+ * The top_p sampling setting for the GenAI request.
+ */
+static constexpr const char *kGenAiRequestTopP = "gen_ai.request.top_p";
+
+/**
+ * Array of reasons the model stopped generating tokens, corresponding to each generation received.
+ */
+static constexpr const char *kGenAiResponseFinishReasons = "gen_ai.response.finish_reasons";
+
+/**
+ * The unique identifier for the completion.
+ */
+static constexpr const char *kGenAiResponseId = "gen_ai.response.id";
+
+/**
+ * The name of the model that generated the response.
+ */
+static constexpr const char *kGenAiResponseModel = "gen_ai.response.model";
+
+/**
+ * The Generative AI product as identified by the client or server instrumentation.
+ *
+ * The @code gen_ai.system @endcode describes a family of GenAI models with specific model
+ * identified by @code gen_ai.request.model @endcode and @code gen_ai.response.model @endcode
+ * 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
+ * @endcode is set to @code openai @endcode 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 @endcode SHOULD be set to @code _OTHER @endcode.
+ */
+static constexpr const char *kGenAiSystem = "gen_ai.system";
+
+/**
+ * The type of token being counted.
+ */
+static constexpr const char *kGenAiTokenType = "gen_ai.token.type";
+
+/**
+ * Deprecated, use @code gen_ai.usage.output_tokens @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code gen_ai.usage.output_tokens @endcode attribute.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsageCompletionTokens = "gen_ai.usage.completion_tokens";
+
+/**
+ * The number of tokens used in the GenAI input (prompt).
+ */
+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";
+
+/**
+ * Deprecated, use @code gen_ai.usage.input_tokens @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code gen_ai.usage.input_tokens @endcode attribute.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kGenAiUsagePromptTokens = "gen_ai.usage.prompt_tokens";
+
+namespace GenAiOperationNameValues
+{
+/**
+ * Chat completion operation such as OpenAI Chat API
+ */
+static constexpr const char *kChat = "chat";
+
+/**
+ * Text completions operation such as OpenAI Completions API
+ * (Legacy)
+ */
+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 gen_ai
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/gen_ai_metrics.h b/api/include/opentelemetry/semconv/incubating/gen_ai_metrics.h
new file mode 100644
index 0000000000..6a9064c3e7
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/gen_ai_metrics.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace gen_ai
+{
+
+/**
+ * GenAI operation duration
+ *
+ * histogram
+ */
+static constexpr const char *kMetricGenAiClientOperationDuration =
+ "metric.gen_ai.client.operation.duration";
+static constexpr const char *descrMetricGenAiClientOperationDuration = "GenAI operation duration";
+static constexpr const char *unitMetricGenAiClientOperationDuration = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricGenAiClientTokenUsage = "metric.gen_ai.client.token.usage";
+static constexpr const char *descrMetricGenAiClientTokenUsage =
+ "Measures number of input and output tokens used";
+static constexpr const char *unitMetricGenAiClientTokenUsage = "{token}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerRequestDuration =
+ "metric.gen_ai.server.request.duration";
+static constexpr const char *descrMetricGenAiServerRequestDuration =
+ "Generative AI server request duration such as time-to-last byte or last output token";
+static constexpr const char *unitMetricGenAiServerRequestDuration = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerTimePerOutputToken =
+ "metric.gen_ai.server.time_per_output_token";
+static constexpr const char *descrMetricGenAiServerTimePerOutputToken =
+ "Time per output token generated after the first token for successful responses";
+static constexpr const char *unitMetricGenAiServerTimePerOutputToken = "s";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricGenAiServerTimeToFirstToken =
+ "metric.gen_ai.server.time_to_first_token";
+static constexpr const char *descrMetricGenAiServerTimeToFirstToken =
+ "Time to generate first token for successful responses";
+static constexpr const char *unitMetricGenAiServerTimeToFirstToken = "s";
+
+static inline nostd::unique_ptr
+ * The value may be sanitized to exclude sensitive information.
+ */
+static constexpr const char *kGraphqlDocument = "graphql.document";
+
+/**
+ * The name of the operation being executed.
+ */
+static constexpr const char *kGraphqlOperationName = "graphql.operation.name";
+
+/**
+ * The type of the operation being executed.
+ */
+static constexpr const char *kGraphqlOperationType = "graphql.operation.type";
+
+namespace GraphqlOperationTypeValues
+{
+/**
+ * GraphQL query
+ */
+static constexpr const char *kQuery = "query";
+
+/**
+ * GraphQL mutation
+ */
+static constexpr const char *kMutation = "mutation";
+
+/**
+ * GraphQL subscription
+ */
+static constexpr const char *kSubscription = "subscription";
+
+} // namespace GraphqlOperationTypeValues
+
+} // namespace graphql
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/heroku_attributes.h b/api/include/opentelemetry/semconv/incubating/heroku_attributes.h
new file mode 100644
index 0000000000..a16bd33161
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/heroku_attributes.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace heroku
+{
+
+/**
+ * Unique identifier for the application
+ */
+static constexpr const char *kHerokuAppId = "heroku.app.id";
+
+/**
+ * Commit hash for the current release
+ */
+static constexpr const char *kHerokuReleaseCommit = "heroku.release.commit";
+
+/**
+ * Time and date the release was created
+ */
+static constexpr const char *kHerokuReleaseCreationTimestamp = "heroku.release.creation_timestamp";
+
+} // namespace heroku
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/host_attributes.h b/api/include/opentelemetry/semconv/incubating/host_attributes.h
new file mode 100644
index 0000000000..e608bd5d46
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/host_attributes.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace host
+{
+
+/**
+ * The CPU architecture the host system is running on.
+ */
+static constexpr const char *kHostArch = "host.arch";
+
+/**
+ * The amount of level 2 memory cache available to the processor (in Bytes).
+ */
+static constexpr const char *kHostCpuCacheL2Size = "host.cpu.cache.l2.size";
+
+/**
+ * Family or generation of the CPU.
+ */
+static constexpr const char *kHostCpuFamily = "host.cpu.family";
+
+/**
+ * Model identifier. It provides more granular information about the CPU, distinguishing it from
+ * other CPUs within the same family.
+ */
+static constexpr const char *kHostCpuModelId = "host.cpu.model.id";
+
+/**
+ * Model designation of the processor.
+ */
+static constexpr const char *kHostCpuModelName = "host.cpu.model.name";
+
+/**
+ * Stepping or core revisions.
+ */
+static constexpr const char *kHostCpuStepping = "host.cpu.stepping";
+
+/**
+ * Processor manufacturer identifier. A maximum 12-character string.
+ *
+ * CPUID command returns the vendor ID string in EBX, EDX
+ * and ECX registers. Writing these to memory in this order results in a 12-character string.
+ */
+static constexpr const char *kHostCpuVendorId = "host.cpu.vendor.id";
+
+/**
+ * Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For
+ * non-containerized systems, this should be the @code machine-id @endcode. See the table below for
+ * the sources to use to determine the @code machine-id @endcode based on operating system.
+ */
+static constexpr const char *kHostId = "host.id";
+
+/**
+ * VM image ID or host OS image ID. For Cloud, this value is from the provider.
+ */
+static constexpr const char *kHostImageId = "host.image.id";
+
+/**
+ * Name of the VM image or OS install the host was instantiated from.
+ */
+static constexpr const char *kHostImageName = "host.image.name";
+
+/**
+ * The version string of the VM image or host OS as defined in Version Attributes.
+ */
+static constexpr const char *kHostImageVersion = "host.image.version";
+
+/**
+ * Available IP addresses of the host, excluding loopback interfaces.
+ *
+ * IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 addresses MUST be specified in the
+ * RFC 5952 format.
+ */
+static constexpr const char *kHostIp = "host.ip";
+
+/**
+ * Available MAC addresses of the host, excluding loopback interfaces.
+ *
+ * MAC Addresses MUST be represented in IEEE RA
+ * hexadecimal form: as hyphen-separated octets in uppercase hexadecimal form from most to least
+ * significant.
+ */
+static constexpr const char *kHostMac = "host.mac";
+
+/**
+ * Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully
+ * qualified hostname, or another name specified by the user.
+ */
+static constexpr const char *kHostName = "host.name";
+
+/**
+ * Type of host. For Cloud, this must be the machine type.
+ */
+static constexpr const char *kHostType = "host.type";
+
+namespace HostArchValues
+{
+/**
+ * AMD64
+ */
+static constexpr const char *kAmd64 = "amd64";
+
+/**
+ * ARM32
+ */
+static constexpr const char *kArm32 = "arm32";
+
+/**
+ * ARM64
+ */
+static constexpr const char *kArm64 = "arm64";
+
+/**
+ * Itanium
+ */
+static constexpr const char *kIa64 = "ia64";
+
+/**
+ * 32-bit PowerPC
+ */
+static constexpr const char *kPpc32 = "ppc32";
+
+/**
+ * 64-bit PowerPC
+ */
+static constexpr const char *kPpc64 = "ppc64";
+
+/**
+ * IBM z/Architecture
+ */
+static constexpr const char *kS390x = "s390x";
+
+/**
+ * 32-bit x86
+ */
+static constexpr const char *kX86 = "x86";
+
+} // namespace HostArchValues
+
+} // namespace host
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/http_attributes.h b/api/include/opentelemetry/semconv/incubating/http_attributes.h
new file mode 100644
index 0000000000..3e06e4e925
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/http_attributes.h
@@ -0,0 +1,365 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace http
+{
+
+/**
+ * Deprecated, use @code client.address @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code client.address @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpClientIp = "http.client_ip";
+
+/**
+ * State of the HTTP connection in the HTTP connection pool.
+ */
+static constexpr const char *kHttpConnectionState = "http.connection.state";
+
+/**
+ * Deprecated, use @code network.protocol.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code network.protocol.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpFlavor = "http.flavor";
+
+/**
+ * Deprecated, use one of @code server.address @endcode, @code client.address @endcode or @code
+ * http.request.header.host @endcode instead, depending on the usage.
+ * @deprecated
+ * Replaced by one of @code server.address @endcode, @code client.address @endcode or @code
+ * http.request.header.host @endcode, depending on the usage.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpHost = "http.host";
+
+/**
+ * Deprecated, use @code http.request.method @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code http.request.method @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpMethod = "http.method";
+
+/**
+ * The size of the request payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size.
+ */
+static constexpr const char *kHttpRequestBodySize = "http.request.body.size";
+
+/**
+ * HTTP request headers, @code Instrumentations SHOULD require an explicit configuration of
+ * which headers are to be captured. Including all request headers can be a security risk - explicit
+ * configuration helps avoid leaking sensitive information. The @code User-Agent @endcode header is
+ * already captured in the @code user_agent.original @endcode attribute. Users MAY explicitly
+ * configure instrumentations to capture them even though it is not recommended. The attribute value
+ * MUST consist of either multiple header values as an array of strings or a single-item array
+ * containing a possibly comma-concatenated string, depending on the way the HTTP library provides
+ * access to headers.
+ */
+static constexpr const char *kHttpRequestHeader = "http.request.header";
+
+/**
+ * HTTP request method.
+ *
+ * HTTP request method value SHOULD be "known" to the instrumentation.
+ * By default, this convention defines "known" methods as the ones listed in RFC9110 and the PATCH method
+ * defined in RFC5789. If the HTTP
+ * request method is not known to instrumentation, it MUST set the @code http.request.method
+ * @endcode attribute to @code _OTHER @endcode. If the HTTP instrumentation could end up
+ * converting valid HTTP request methods to @code _OTHER @endcode, then it MUST provide a way to
+ * override the list of known HTTP methods. If this override is done via environment variable, then
+ * the environment variable MUST be named OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a
+ * comma-separated list of case-sensitive known HTTP methods (this list MUST be a full override of
+ * the default known method, it is not a list of known methods in addition to the defaults).
+ * HTTP method names are case-sensitive and @code http.request.method @endcode attribute value MUST
+ * match a known HTTP method name exactly. Instrumentations for specific web frameworks that
+ * consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent. Tracing
+ * instrumentations that do so, MUST also set @code http.request.method_original @endcode to the
+ * original value.
+ */
+static constexpr const char *kHttpRequestMethod = "http.request.method";
+
+/**
+ * Original HTTP method sent by the client in the request line.
+ */
+static constexpr const char *kHttpRequestMethodOriginal = "http.request.method_original";
+
+/**
+ * The ordinal number of request resending attempt (for any reason, including redirects).
+ *
+ * The resend count SHOULD be updated each time an HTTP request gets resent by the client,
+ * regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503
+ * Server Unavailable, network issues, or any other).
+ */
+static constexpr const char *kHttpRequestResendCount = "http.request.resend_count";
+
+/**
+ * The total size of the request in bytes. This should be the total number of bytes sent over the
+ * wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request
+ * body if any.
+ */
+static constexpr const char *kHttpRequestSize = "http.request.size";
+
+/**
+ * Deprecated, use @code http.request.header.content-length @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code http.request.header.content-length @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpRequestContentLength = "http.request_content_length";
+
+/**
+ * Deprecated, use @code http.request.body.size @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code http.request.body.size @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpRequestContentLengthUncompressed =
+ "http.request_content_length_uncompressed";
+
+/**
+ * The size of the response payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size.
+ */
+static constexpr const char *kHttpResponseBodySize = "http.response.body.size";
+
+/**
+ * HTTP response headers, @code Instrumentations SHOULD require an explicit configuration
+ * of which headers are to be captured. Including all response headers can be a security risk -
+ * explicit configuration helps avoid leaking sensitive information. Users MAY explicitly configure
+ * instrumentations to capture them even though it is not recommended. The attribute value MUST
+ * consist of either multiple header values as an array of strings or a single-item array containing
+ * a possibly comma-concatenated string, depending on the way the HTTP library provides access to
+ * headers.
+ */
+static constexpr const char *kHttpResponseHeader = "http.response.header";
+
+/**
+ * The total size of the response in bytes. This should be the total number of bytes sent over the
+ * wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and response
+ * body and trailers if any.
+ */
+static constexpr const char *kHttpResponseSize = "http.response.size";
+
+/**
+ * HTTP response status code.
+ */
+static constexpr const char *kHttpResponseStatusCode = "http.response.status_code";
+
+/**
+ * Deprecated, use @code http.response.header.content-length @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code http.response.header.content-length @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpResponseContentLength = "http.response_content_length";
+
+/**
+ * Deprecated, use @code http.response.body.size @endcode instead.
+ *
+ * @deprecated
+ * Replace by @code http.response.body.size @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpResponseContentLengthUncompressed =
+ "http.response_content_length_uncompressed";
+
+/**
+ * The matched route, that is, the path template in the format used by the respective server
+ * framework. MUST NOT be populated when this is not supported by the HTTP server framework as
+ * the route attribute should have low-cardinality and the URI path can NOT substitute it. SHOULD
+ * include the application root if
+ * there is one.
+ */
+static constexpr const char *kHttpRoute = "http.route";
+
+/**
+ * Deprecated, use @code url.scheme @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code url.scheme @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpScheme = "http.scheme";
+
+/**
+ * Deprecated, use @code server.address @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code server.address @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpServerName = "http.server_name";
+
+/**
+ * Deprecated, use @code http.response.status_code @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code http.response.status_code @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpStatusCode = "http.status_code";
+
+/**
+ * Deprecated, use @code url.path @endcode and @code url.query @endcode instead.
+ *
+ * @deprecated
+ * Split to @code url.path @endcode and `url.query.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpTarget = "http.target";
+
+/**
+ * Deprecated, use @code url.full @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code url.full @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpUrl = "http.url";
+
+/**
+ * Deprecated, use @code user_agent.original @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code user_agent.original @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kHttpUserAgent = "http.user_agent";
+
+namespace HttpConnectionStateValues
+{
+/**
+ * active state.
+ */
+static constexpr const char *kActive = "active";
+
+/**
+ * idle state.
+ */
+static constexpr const char *kIdle = "idle";
+
+} // namespace HttpConnectionStateValues
+
+namespace HttpFlavorValues
+{
+/**
+ * HTTP/1.0
+ */
+static constexpr const char *kHttp10 = "1.0";
+
+/**
+ * HTTP/1.1
+ */
+static constexpr const char *kHttp11 = "1.1";
+
+/**
+ * HTTP/2
+ */
+static constexpr const char *kHttp20 = "2.0";
+
+/**
+ * HTTP/3
+ */
+static constexpr const char *kHttp30 = "3.0";
+
+/**
+ * SPDY protocol.
+ */
+static constexpr const char *kSpdy = "SPDY";
+
+/**
+ * QUIC protocol.
+ */
+static constexpr const char *kQuic = "QUIC";
+
+} // namespace HttpFlavorValues
+
+namespace HttpRequestMethodValues
+{
+/**
+ * CONNECT method.
+ */
+static constexpr const char *kConnect = "CONNECT";
+
+/**
+ * DELETE method.
+ */
+static constexpr const char *kDelete = "DELETE";
+
+/**
+ * GET method.
+ */
+static constexpr const char *kGet = "GET";
+
+/**
+ * HEAD method.
+ */
+static constexpr const char *kHead = "HEAD";
+
+/**
+ * OPTIONS method.
+ */
+static constexpr const char *kOptions = "OPTIONS";
+
+/**
+ * PATCH method.
+ */
+static constexpr const char *kPatch = "PATCH";
+
+/**
+ * POST method.
+ */
+static constexpr const char *kPost = "POST";
+
+/**
+ * PUT method.
+ */
+static constexpr const char *kPut = "PUT";
+
+/**
+ * TRACE method.
+ */
+static constexpr const char *kTrace = "TRACE";
+
+/**
+ * Any HTTP method that the instrumentation has no prior knowledge of.
+ */
+static constexpr const char *kOther = "_OTHER";
+
+} // namespace HttpRequestMethodValues
+
+} // namespace http
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/http_metrics.h b/api/include/opentelemetry/semconv/incubating/http_metrics.h
new file mode 100644
index 0000000000..9142b6c44f
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/http_metrics.h
@@ -0,0 +1,353 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace http
+{
+
+/**
+ * Number of active HTTP requests.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricHttpClientActiveRequests = "metric.http.client.active_requests";
+static constexpr const char *descrMetricHttpClientActiveRequests =
+ "Number of active HTTP requests.";
+static constexpr const char *unitMetricHttpClientActiveRequests = "{request}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricHttpClientConnectionDuration =
+ "metric.http.client.connection.duration";
+static constexpr const char *descrMetricHttpClientConnectionDuration =
+ "The duration of the successfully established outbound HTTP connections.";
+static constexpr const char *unitMetricHttpClientConnectionDuration = "s";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricHttpClientOpenConnections =
+ "metric.http.client.open_connections";
+static constexpr const char *descrMetricHttpClientOpenConnections =
+ "Number of outbound HTTP connections that are currently active or idle on the client.";
+static constexpr const char *unitMetricHttpClientOpenConnections = "{connection}";
+
+static inline nostd::unique_ptr
+ * The size of the request payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size. histogram
+ */
+static constexpr const char *kMetricHttpClientRequestBodySize =
+ "metric.http.client.request.body.size";
+static constexpr const char *descrMetricHttpClientRequestBodySize =
+ "Size of HTTP client request bodies.";
+static constexpr const char *unitMetricHttpClientRequestBodySize = "By";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricHttpClientRequestDuration =
+ "metric.http.client.request.duration";
+static constexpr const char *descrMetricHttpClientRequestDuration =
+ "Duration of HTTP client requests.";
+static constexpr const char *unitMetricHttpClientRequestDuration = "s";
+
+static inline nostd::unique_ptr
+ * The size of the response payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size. histogram
+ */
+static constexpr const char *kMetricHttpClientResponseBodySize =
+ "metric.http.client.response.body.size";
+static constexpr const char *descrMetricHttpClientResponseBodySize =
+ "Size of HTTP client response bodies.";
+static constexpr const char *unitMetricHttpClientResponseBodySize = "By";
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricHttpServerActiveRequests = "metric.http.server.active_requests";
+static constexpr const char *descrMetricHttpServerActiveRequests =
+ "Number of active HTTP server requests.";
+static constexpr const char *unitMetricHttpServerActiveRequests = "{request}";
+
+static inline nostd::unique_ptr
+ * The size of the request payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size. histogram
+ */
+static constexpr const char *kMetricHttpServerRequestBodySize =
+ "metric.http.server.request.body.size";
+static constexpr const char *descrMetricHttpServerRequestBodySize =
+ "Size of HTTP server request bodies.";
+static constexpr const char *unitMetricHttpServerRequestBodySize = "By";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricHttpServerRequestDuration =
+ "metric.http.server.request.duration";
+static constexpr const char *descrMetricHttpServerRequestDuration =
+ "Duration of HTTP server requests.";
+static constexpr const char *unitMetricHttpServerRequestDuration = "s";
+
+static inline nostd::unique_ptr
+ * The size of the response payload body in bytes. This is the number of bytes transferred excluding
+ * headers and is often, but not always, present as the Content-Length
+ * header. For requests using transport encoding, this should be the compressed size. histogram
+ */
+static constexpr const char *kMetricHttpServerResponseBodySize =
+ "metric.http.server.response.body.size";
+static constexpr const char *descrMetricHttpServerResponseBodySize =
+ "Size of HTTP server response bodies.";
+static constexpr const char *unitMetricHttpServerResponseBodySize = "By";
+
+static inline nostd::unique_ptr
+ * K8s doesn't have support for obtaining a cluster ID. If this is ever
+ * added, we will recommend collecting the @code k8s.cluster.uid @endcode through the
+ * official APIs. In the meantime, we are able to use the @code uid @endcode of the
+ * @code kube-system @endcode namespace as a proxy for cluster ID. Read on for the
+ * rationale.
+ *
+ * Every object created in a K8s cluster is assigned a distinct UID. The
+ * @code kube-system @endcode namespace is used by Kubernetes itself and will exist
+ * for the lifetime of the cluster. Using the @code uid @endcode of the @code kube-system @endcode
+ * namespace is a reasonable proxy for the K8s ClusterID as it will only
+ * change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are
+ * UUIDs as standardized by
+ * ISO/IEC 9834-8 and ITU-T
+ * X.667. Which states:
+ * Therefore, UIDs between clusters should be extremely unlikely to
+ * conflict.
+ */
+static constexpr const char *kK8sClusterUid = "k8s.cluster.uid";
+
+/**
+ * The name of the Container from Pod specification, must be unique within a Pod. Container runtime
+ * usually uses different globally unique name (@code container.name @endcode).
+ */
+static constexpr const char *kK8sContainerName = "k8s.container.name";
+
+/**
+ * Number of times the container was restarted. This attribute can be used to identify a particular
+ * container (running or stopped) within a container spec.
+ */
+static constexpr const char *kK8sContainerRestartCount = "k8s.container.restart_count";
+
+/**
+ * Last terminated reason of the Container.
+ */
+static constexpr const char *kK8sContainerStatusLastTerminatedReason =
+ "k8s.container.status.last_terminated_reason";
+
+/**
+ * The name of the CronJob.
+ */
+static constexpr const char *kK8sCronjobName = "k8s.cronjob.name";
+
+/**
+ * The UID of the CronJob.
+ */
+static constexpr const char *kK8sCronjobUid = "k8s.cronjob.uid";
+
+/**
+ * The name of the DaemonSet.
+ */
+static constexpr const char *kK8sDaemonsetName = "k8s.daemonset.name";
+
+/**
+ * The UID of the DaemonSet.
+ */
+static constexpr const char *kK8sDaemonsetUid = "k8s.daemonset.uid";
+
+/**
+ * The name of the Deployment.
+ */
+static constexpr const char *kK8sDeploymentName = "k8s.deployment.name";
+
+/**
+ * The UID of the Deployment.
+ */
+static constexpr const char *kK8sDeploymentUid = "k8s.deployment.uid";
+
+/**
+ * The name of the Job.
+ */
+static constexpr const char *kK8sJobName = "k8s.job.name";
+
+/**
+ * The UID of the Job.
+ */
+static constexpr const char *kK8sJobUid = "k8s.job.uid";
+
+/**
+ * The name of the namespace that the pod is running in.
+ */
+static constexpr const char *kK8sNamespaceName = "k8s.namespace.name";
+
+/**
+ * The name of the Node.
+ */
+static constexpr const char *kK8sNodeName = "k8s.node.name";
+
+/**
+ * The UID of the Node.
+ */
+static constexpr const char *kK8sNodeUid = "k8s.node.uid";
+
+/**
+ * The annotation key-value pairs placed on the Pod, the @code
+ * @deprecated
+ * Replaced by @code k8s.pod.label @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kK8sPodLabels = "k8s.pod.labels";
+
+/**
+ * The name of the Pod.
+ */
+static constexpr const char *kK8sPodName = "k8s.pod.name";
+
+/**
+ * The UID of the Pod.
+ */
+static constexpr const char *kK8sPodUid = "k8s.pod.uid";
+
+/**
+ * The name of the ReplicaSet.
+ */
+static constexpr const char *kK8sReplicasetName = "k8s.replicaset.name";
+
+/**
+ * The UID of the ReplicaSet.
+ */
+static constexpr const char *kK8sReplicasetUid = "k8s.replicaset.uid";
+
+/**
+ * The name of the StatefulSet.
+ */
+static constexpr const char *kK8sStatefulsetName = "k8s.statefulset.name";
+
+/**
+ * The UID of the StatefulSet.
+ */
+static constexpr const char *kK8sStatefulsetUid = "k8s.statefulset.uid";
+
+} // namespace k8s
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/linux_attributes.h b/api/include/opentelemetry/semconv/incubating/linux_attributes.h
new file mode 100644
index 0000000000..024e2b60e6
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/linux_attributes.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace linux
+{
+
+/**
+ * The Linux Slab memory state
+ */
+static constexpr const char *kLinuxMemorySlabState = "linux.memory.slab.state";
+
+namespace LinuxMemorySlabStateValues
+{
+/**
+ * none
+ */
+static constexpr const char *kReclaimable = "reclaimable";
+
+/**
+ * none
+ */
+static constexpr const char *kUnreclaimable = "unreclaimable";
+
+} // namespace LinuxMemorySlabStateValues
+
+} // namespace linux
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/log_attributes.h b/api/include/opentelemetry/semconv/incubating/log_attributes.h
new file mode 100644
index 0000000000..6bda8a4d31
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/log_attributes.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace log
+{
+
+/**
+ * The basename of the file.
+ */
+static constexpr const char *kLogFileName = "log.file.name";
+
+/**
+ * The basename of the file, with symlinks resolved.
+ */
+static constexpr const char *kLogFileNameResolved = "log.file.name_resolved";
+
+/**
+ * The full path to the file.
+ */
+static constexpr const char *kLogFilePath = "log.file.path";
+
+/**
+ * The full path to the file, with symlinks resolved.
+ */
+static constexpr const char *kLogFilePathResolved = "log.file.path_resolved";
+
+/**
+ * The stream associated with the log. See below for a list of well-known values.
+ */
+static constexpr const char *kLogIostream = "log.iostream";
+
+/**
+ * The complete orignal Log Record.
+ *
+ * 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.
+ *
+ * If an id is provided, other log records with the same id will be considered duplicates and can be
+ * removed safely. This means, that two distinguishable log records MUST have different values. The
+ * id MAY be an Universally Unique Lexicographically Sortable
+ * Identifier (ULID), but other identifiers (e.g. UUID) may be used as needed.
+ */
+static constexpr const char *kLogRecordUid = "log.record.uid";
+
+namespace LogIostreamValues
+{
+/**
+ * Logs from stdout stream
+ */
+static constexpr const char *kStdout = "stdout";
+
+/**
+ * Events from stderr stream
+ */
+static constexpr const char *kStderr = "stderr";
+
+} // namespace LogIostreamValues
+
+} // namespace log
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/message_attributes.h b/api/include/opentelemetry/semconv/incubating/message_attributes.h
new file mode 100644
index 0000000000..508a1e58f6
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/message_attributes.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace message
+{
+
+/**
+ * Deprecated, use @code rpc.message.compressed_size @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code rpc.message.compressed_size @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessageCompressedSize = "message.compressed_size";
+
+/**
+ * Deprecated, use @code rpc.message.id @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code rpc.message.id @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessageId = "message.id";
+
+/**
+ * Deprecated, use @code rpc.message.type @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code rpc.message.type @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessageType = "message.type";
+
+/**
+ * Deprecated, use @code rpc.message.uncompressed_size @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code rpc.message.uncompressed_size @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessageUncompressedSize = "message.uncompressed_size";
+
+namespace MessageTypeValues
+{
+/**
+ * none
+ */
+static constexpr const char *kSent = "SENT";
+
+/**
+ * none
+ */
+static constexpr const char *kReceived = "RECEIVED";
+
+} // namespace MessageTypeValues
+
+} // namespace message
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/messaging_attributes.h b/api/include/opentelemetry/semconv/incubating/messaging_attributes.h
new file mode 100644
index 0000000000..c5f07fe241
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/messaging_attributes.h
@@ -0,0 +1,534 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace messaging
+{
+
+/**
+ * The number of messages sent, received, or processed in the scope of the batching operation.
+ *
+ * Instrumentations SHOULD NOT set @code messaging.batch.message_count @endcode on spans that
+ * operate with a single message. When a messaging client library supports both batch and
+ * single-message API for the same operation, instrumentations SHOULD use @code
+ * messaging.batch.message_count @endcode for batching APIs and SHOULD NOT use it for single-message
+ * APIs.
+ */
+static constexpr const char *kMessagingBatchMessageCount = "messaging.batch.message_count";
+
+/**
+ * A unique identifier for the client that consumes or produces a message.
+ */
+static constexpr const char *kMessagingClientId = "messaging.client.id";
+
+#if 0
+// Excluded attribute:
+/**
+ * Deprecated, use @code messaging.client.id @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.id @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingClientId
+ = "messaging.client_id";
+#endif
+
+/**
+ * The name of the consumer group with which a consumer is associated.
+ *
+ * Semantic conventions for individual messaging systems SHOULD document whether @code
+ * messaging.consumer.group.name @endcode 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).
+ */
+static constexpr const char *kMessagingDestinationAnonymous = "messaging.destination.anonymous";
+
+/**
+ * The message destination name
+ *
+ * Destination name SHOULD uniquely identify a specific queue, topic or other entity within the
+ * broker. If the broker doesn't have such notion, the destination name SHOULD uniquely identify the
+ * broker.
+ */
+static constexpr const char *kMessagingDestinationName = "messaging.destination.name";
+
+/**
+ * The identifier of the partition messages are sent to or received from, unique within the @code
+ * messaging.destination.name @endcode.
+ */
+static constexpr const char *kMessagingDestinationPartitionId =
+ "messaging.destination.partition.id";
+
+/**
+ * The name of the destination subscription from which a message is consumed.
+ *
+ * Semantic conventions for individual messaging systems SHOULD document whether @code
+ * messaging.destination.subscription.name @endcode 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
+ *
+ * Destination names could be constructed from templates. An example would be a destination name
+ * involving a user name or product id. Although the destination name in this case is of high
+ * cardinality, the underlying template is of low cardinality and can be effectively used for
+ * grouping and aggregation.
+ */
+static constexpr const char *kMessagingDestinationTemplate = "messaging.destination.template";
+
+/**
+ * A boolean that is true if the message destination is temporary and might not exist anymore after
+ * messages are processed.
+ */
+static constexpr const char *kMessagingDestinationTemporary = "messaging.destination.temporary";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * No replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishAnonymous =
+ "messaging.destination_publish.anonymous";
+
+/**
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * No replacement at this time.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingDestinationPublishName =
+ "messaging.destination_publish.name";
+
+/**
+ * Deprecated, use @code messaging.consumer.group.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.consumer.group.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+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.
+ */
+static constexpr const char *kMessagingEventhubsMessageEnqueuedTime =
+ "messaging.eventhubs.message.enqueued_time";
+
+/**
+ * The ack deadline in seconds set for the modify ack deadline request.
+ */
+static constexpr const char *kMessagingGcpPubsubMessageAckDeadline =
+ "messaging.gcp_pubsub.message.ack_deadline";
+
+/**
+ * The ack id for a given message.
+ */
+static constexpr const char *kMessagingGcpPubsubMessageAckId =
+ "messaging.gcp_pubsub.message.ack_id";
+
+/**
+ * The delivery attempt for a given message.
+ */
+static constexpr const char *kMessagingGcpPubsubMessageDeliveryAttempt =
+ "messaging.gcp_pubsub.message.delivery_attempt";
+
+/**
+ * The ordering key for a given message. If the attribute is not present, the message does not have
+ * an ordering key.
+ */
+static constexpr const char *kMessagingGcpPubsubMessageOrderingKey =
+ "messaging.gcp_pubsub.message.ordering_key";
+
+/**
+ * Deprecated, use @code messaging.consumer.group.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.consumer.group.name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaConsumerGroup = "messaging.kafka.consumer.group";
+
+/**
+ * Deprecated, use @code messaging.destination.partition.id @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.destination.partition.id @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaDestinationPartition =
+ "messaging.kafka.destination.partition";
+
+/**
+ * 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 @endcode in that they're not unique.
+ * If the key is @code null @endcode, the attribute MUST NOT be set. If the key type is not
+ * string, it's string representation has to be supplied for the attribute. If the key has no
+ * unambiguous, canonical string form, don't include its value.
+ */
+static constexpr const char *kMessagingKafkaMessageKey = "messaging.kafka.message.key";
+
+/**
+ * Deprecated, use @code messaging.kafka.offset @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.kafka.offset @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingKafkaMessageOffset = "messaging.kafka.message.offset";
+
+/**
+ * A boolean that is true if the message is a tombstone.
+ */
+static constexpr const char *kMessagingKafkaMessageTombstone = "messaging.kafka.message.tombstone";
+
+/**
+ * The offset of a record in the corresponding Kafka partition.
+ */
+static constexpr const char *kMessagingKafkaOffset = "messaging.kafka.offset";
+
+/**
+ * The size of the message body in bytes.
+ *
+ * This can refer to both the compressed or uncompressed body size. If both sizes are known, the
+ * uncompressed body size should be used.
+ */
+static constexpr const char *kMessagingMessageBodySize = "messaging.message.body.size";
+
+/**
+ * The conversation ID identifying the conversation to which the message belongs, represented as a
+ * string. Sometimes called "Correlation ID".
+ */
+static constexpr const char *kMessagingMessageConversationId = "messaging.message.conversation_id";
+
+/**
+ * The size of the message body and metadata in bytes.
+ *
+ * This can refer to both the compressed or uncompressed size. If both sizes are known, the
+ * uncompressed size should be used.
+ */
+static constexpr const char *kMessagingMessageEnvelopeSize = "messaging.message.envelope.size";
+
+/**
+ * A value used by the messaging system as an identifier for the message, represented as a string.
+ */
+static constexpr const char *kMessagingMessageId = "messaging.message.id";
+
+/**
+ * Deprecated, use @code messaging.operation.type @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.operation.type @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingOperation = "messaging.operation";
+
+/**
+ * The system-specific name of the messaging operation.
+ */
+static constexpr const char *kMessagingOperationName = "messaging.operation.name";
+
+/**
+ * A string identifying the type of the messaging operation.
+ *
+ * If a custom value is used, it MUST be of low cardinality.
+ */
+static constexpr const char *kMessagingOperationType = "messaging.operation.type";
+
+/**
+ * RabbitMQ message routing key.
+ */
+static constexpr const char *kMessagingRabbitmqDestinationRoutingKey =
+ "messaging.rabbitmq.destination.routing_key";
+
+/**
+ * RabbitMQ message delivery tag
+ */
+static constexpr const char *kMessagingRabbitmqMessageDeliveryTag =
+ "messaging.rabbitmq.message.delivery_tag";
+
+/**
+ * Deprecated, use @code messaging.consumer.group.name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.consumer.group.name @endcode on the consumer spans. No replacement
+ * for producer spans.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingRocketmqClientGroup = "messaging.rocketmq.client_group";
+
+/**
+ * Model of message consumption. This only applies to consumer spans.
+ */
+static constexpr const char *kMessagingRocketmqConsumptionModel =
+ "messaging.rocketmq.consumption_model";
+
+/**
+ * The delay time level for delay message, which determines the message delay time.
+ */
+static constexpr const char *kMessagingRocketmqMessageDelayTimeLevel =
+ "messaging.rocketmq.message.delay_time_level";
+
+/**
+ * The timestamp in milliseconds that the delay message is expected to be delivered to consumer.
+ */
+static constexpr const char *kMessagingRocketmqMessageDeliveryTimestamp =
+ "messaging.rocketmq.message.delivery_timestamp";
+
+/**
+ * It is essential for FIFO message. Messages that belong to the same message group are always
+ * processed one by one within the same consumer group.
+ */
+static constexpr const char *kMessagingRocketmqMessageGroup = "messaging.rocketmq.message.group";
+
+/**
+ * Key(s) of message, another way to mark message besides message id.
+ */
+static constexpr const char *kMessagingRocketmqMessageKeys = "messaging.rocketmq.message.keys";
+
+/**
+ * The secondary classifier of message besides topic.
+ */
+static constexpr const char *kMessagingRocketmqMessageTag = "messaging.rocketmq.message.tag";
+
+/**
+ * Type of message.
+ */
+static constexpr const char *kMessagingRocketmqMessageType = "messaging.rocketmq.message.type";
+
+/**
+ * Namespace of RocketMQ resources, resources in different namespaces are individual.
+ */
+static constexpr const char *kMessagingRocketmqNamespace = "messaging.rocketmq.namespace";
+
+/**
+ * Deprecated, use @code messaging.servicebus.destination.subscription_name @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.servicebus.destination.subscription_name @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMessagingServicebusDestinationSubscriptionName =
+ "messaging.servicebus.destination.subscription_name";
+
+/**
+ * Describes the settlement
+ * type.
+ */
+static constexpr const char *kMessagingServicebusDispositionStatus =
+ "messaging.servicebus.disposition_status";
+
+/**
+ * Number of deliveries that have been attempted for this message.
+ */
+static constexpr const char *kMessagingServicebusMessageDeliveryCount =
+ "messaging.servicebus.message.delivery_count";
+
+/**
+ * The UTC epoch seconds at which the message has been accepted and stored in the entity.
+ */
+static constexpr const char *kMessagingServicebusMessageEnqueuedTime =
+ "messaging.servicebus.message.enqueued_time";
+
+/**
+ * The messaging system as identified by the client instrumentation.
+ *
+ * The actual messaging system may differ from the one known by the client. For example, when using
+ * Kafka client libraries to communicate with Azure Event Hubs, the @code messaging.system @endcode
+ * is set to @code kafka @endcode based on the instrumentation's best knowledge.
+ */
+static constexpr const char *kMessagingSystem = "messaging.system";
+
+namespace MessagingOperationTypeValues
+{
+/**
+ * One or more messages are provided for publishing to an intermediary. If a single message is
+ * published, the context of the "Publish" span can be used as the creation context and no "Create"
+ * span needs to be created.
+ */
+static constexpr const char *kPublish = "publish";
+
+/**
+ * A message is created. "Create" spans always refer to a single message and are used to provide a
+ * unique creation context for messages in batch publishing scenarios.
+ */
+static constexpr const char *kCreate = "create";
+
+/**
+ * One or more messages are requested by a consumer. This operation refers to pull-based scenarios,
+ * where consumers explicitly call methods of messaging SDKs to receive messages.
+ */
+static constexpr const char *kReceive = "receive";
+
+/**
+ * One or more messages are processed by a consumer.
+ */
+static constexpr const char *kProcess = "process";
+
+/**
+ * One or more messages are settled.
+ */
+static constexpr const char *kSettle = "settle";
+
+/**
+ * Deprecated. Use @code process @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code process @endcode.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kDeliver = "deliver";
+
+} // namespace MessagingOperationTypeValues
+
+namespace MessagingRocketmqConsumptionModelValues
+{
+/**
+ * Clustering consumption model
+ */
+static constexpr const char *kClustering = "clustering";
+
+/**
+ * Broadcasting consumption model
+ */
+static constexpr const char *kBroadcasting = "broadcasting";
+
+} // namespace MessagingRocketmqConsumptionModelValues
+
+namespace MessagingRocketmqMessageTypeValues
+{
+/**
+ * Normal message
+ */
+static constexpr const char *kNormal = "normal";
+
+/**
+ * FIFO message
+ */
+static constexpr const char *kFifo = "fifo";
+
+/**
+ * Delay message
+ */
+static constexpr const char *kDelay = "delay";
+
+/**
+ * Transaction message
+ */
+static constexpr const char *kTransaction = "transaction";
+
+} // namespace MessagingRocketmqMessageTypeValues
+
+namespace MessagingServicebusDispositionStatusValues
+{
+/**
+ * Message is completed
+ */
+static constexpr const char *kComplete = "complete";
+
+/**
+ * Message is abandoned
+ */
+static constexpr const char *kAbandon = "abandon";
+
+/**
+ * Message is sent to dead letter queue
+ */
+static constexpr const char *kDeadLetter = "dead_letter";
+
+/**
+ * Message is deferred
+ */
+static constexpr const char *kDefer = "defer";
+
+} // namespace MessagingServicebusDispositionStatusValues
+
+namespace MessagingSystemValues
+{
+/**
+ * Apache ActiveMQ
+ */
+static constexpr const char *kActivemq = "activemq";
+
+/**
+ * Amazon Simple Queue Service (SQS)
+ */
+static constexpr const char *kAwsSqs = "aws_sqs";
+
+/**
+ * Azure Event Grid
+ */
+static constexpr const char *kEventgrid = "eventgrid";
+
+/**
+ * Azure Event Hubs
+ */
+static constexpr const char *kEventhubs = "eventhubs";
+
+/**
+ * Azure Service Bus
+ */
+static constexpr const char *kServicebus = "servicebus";
+
+/**
+ * Google Cloud Pub/Sub
+ */
+static constexpr const char *kGcpPubsub = "gcp_pubsub";
+
+/**
+ * Java Message Service
+ */
+static constexpr const char *kJms = "jms";
+
+/**
+ * Apache Kafka
+ */
+static constexpr const char *kKafka = "kafka";
+
+/**
+ * RabbitMQ
+ */
+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 messaging
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/messaging_metrics.h b/api/include/opentelemetry/semconv/incubating/messaging_metrics.h
new file mode 100644
index 0000000000..5da042da2d
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/messaging_metrics.h
@@ -0,0 +1,396 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace messaging
+{
+
+/**
+ * Number of messages that were delivered to the application.
+ *
+ * Records the number of messages pulled from the broker or number of messages dispatched to the
+ * application in push-based scenarios. The metric SHOULD be reported once per message delivery. For
+ * example, if receiving and processing operations are both instrumented for a single message
+ * delivery, this counter is incremented when the message is received and not reported when it is
+ * processed. counter
+ */
+static constexpr const char *kMetricMessagingClientConsumedMessages =
+ "metric.messaging.client.consumed.messages";
+static constexpr const char *descrMetricMessagingClientConsumedMessages =
+ "Number of messages that were delivered to the application.";
+static constexpr const char *unitMetricMessagingClientConsumedMessages = "{message}";
+
+static inline nostd::unique_ptr
+ * This metric SHOULD NOT be used to report processing duration - processing duration is reported in
+ * @code messaging.process.duration @endcode metric. histogram
+ */
+static constexpr const char *kMetricMessagingClientOperationDuration =
+ "metric.messaging.client.operation.duration";
+static constexpr const char *descrMetricMessagingClientOperationDuration =
+ "Duration of messaging operation initiated by a producer or consumer client.";
+static constexpr const char *unitMetricMessagingClientOperationDuration = "s";
+
+static inline nostd::unique_ptr
+ * This metric MUST NOT count messages that were created haven't yet been attempted to be published.
+ *
+ * counter
+ */
+static constexpr const char *kMetricMessagingClientPublishedMessages =
+ "metric.messaging.client.published.messages";
+static constexpr const char *descrMetricMessagingClientPublishedMessages =
+ "Number of messages producer attempted to publish to the broker.";
+static constexpr const char *unitMetricMessagingClientPublishedMessages = "{message}";
+
+static inline nostd::unique_ptr
+ * This metric MUST be reported for operations with @code messaging.operation.type @endcode that
+ * matches @code process @endcode. histogram
+ */
+static constexpr const char *kMetricMessagingProcessDuration = "metric.messaging.process.duration";
+static constexpr const char *descrMetricMessagingProcessDuration =
+ "Duration of processing operation.";
+static constexpr const char *unitMetricMessagingProcessDuration = "s";
+
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code messaging.client.consumed.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingProcessMessages = "metric.messaging.process.messages";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricMessagingProcessMessages =
+ "Deprecated. Use `messaging.client.consumed.messages` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricMessagingProcessMessages = "{message}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code messaging.client.operation.duration @endcode.
+ *
+ * histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingPublishDuration = "metric.messaging.publish.duration";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricMessagingPublishDuration =
+ "Deprecated. Use `messaging.client.operation.duration` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricMessagingPublishDuration = "s";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code messaging.client.produced.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingPublishMessages = "metric.messaging.publish.messages";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricMessagingPublishMessages =
+ "Deprecated. Use `messaging.client.produced.messages` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricMessagingPublishMessages = "{message}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code messaging.client.operation.duration @endcode.
+ *
+ * histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingReceiveDuration = "metric.messaging.receive.duration";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricMessagingReceiveDuration =
+ "Deprecated. Use `messaging.client.operation.duration` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricMessagingReceiveDuration = "s";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ * @deprecated
+ * Replaced by @code messaging.client.consumed.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingReceiveMessages = "metric.messaging.receive.messages";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *descrMetricMessagingReceiveMessages =
+ "Deprecated. Use `messaging.client.consumed.messages` instead.";
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *unitMetricMessagingReceiveMessages = "{message}";
+
+OPENTELEMETRY_DEPRECATED
+static inline nostd::unique_ptr
+ *
+ */
+static constexpr const char *kAwsS3CopySource = "aws.s3.copy_source";
+
+/**
+ * The delete request container that specifies the objects to be deleted.
+ *
+ */
+static constexpr const char *kAwsS3Key = "aws.s3.key";
+
+/**
+ * The part number of the part being uploaded in a multipart-upload operation. This is a positive
+ * integer between 1 and 10,000.
+ */
+static constexpr const char *kAwsS3UploadId = "aws.s3.upload_id";
+
+namespace AwsEcsLaunchtypeValues
+{
+/**
+ * none
+ */
+static constexpr const char *kEc2 = "ec2";
+
+/**
+ * none
+ */
+static constexpr const char *kFargate = "fargate";
+
+} // namespace AwsEcsLaunchtypeValues
+
+} // namespace aws
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/az_attributes.h b/api/include/opentelemetry/semconv/incubating/az_attributes.h
new file mode 100644
index 0000000000..5e12c82f7b
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/az_attributes.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace az
+{
+
+/**
+ * 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";
+
+} // namespace az
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/browser_attributes.h b/api/include/opentelemetry/semconv/incubating/browser_attributes.h
new file mode 100644
index 0000000000..5ddb61eae5
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/browser_attributes.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace browser
+{
+
+/**
+ * Array of brand name and version separated by a space
+ *
+ */
+static constexpr const char *kCloudResourceId = "cloud.resource_id";
+
+namespace CloudPlatformValues
+{
+/**
+ * Alibaba Cloud Elastic Compute Service
+ */
+static constexpr const char *kAlibabaCloudEcs = "alibaba_cloud_ecs";
+
+/**
+ * Alibaba Cloud Function Compute
+ */
+static constexpr const char *kAlibabaCloudFc = "alibaba_cloud_fc";
+
+/**
+ * Red Hat OpenShift on Alibaba Cloud
+ */
+static constexpr const char *kAlibabaCloudOpenshift = "alibaba_cloud_openshift";
+
+/**
+ * AWS Elastic Compute Cloud
+ */
+static constexpr const char *kAwsEc2 = "aws_ec2";
+
+/**
+ * AWS Elastic Container Service
+ */
+static constexpr const char *kAwsEcs = "aws_ecs";
+
+/**
+ * AWS Elastic Kubernetes Service
+ */
+static constexpr const char *kAwsEks = "aws_eks";
+
+/**
+ * AWS Lambda
+ */
+static constexpr const char *kAwsLambda = "aws_lambda";
+
+/**
+ * AWS Elastic Beanstalk
+ */
+static constexpr const char *kAwsElasticBeanstalk = "aws_elastic_beanstalk";
+
+/**
+ * AWS App Runner
+ */
+static constexpr const char *kAwsAppRunner = "aws_app_runner";
+
+/**
+ * Red Hat OpenShift on AWS (ROSA)
+ */
+static constexpr const char *kAwsOpenshift = "aws_openshift";
+
+/**
+ * Azure Virtual Machines
+ */
+static constexpr const char *kAzureVm = "azure_vm";
+
+/**
+ * Azure Container Apps
+ */
+static constexpr const char *kAzureContainerApps = "azure_container_apps";
+
+/**
+ * Azure Container Instances
+ */
+static constexpr const char *kAzureContainerInstances = "azure_container_instances";
+
+/**
+ * Azure Kubernetes Service
+ */
+static constexpr const char *kAzureAks = "azure_aks";
+
+/**
+ * Azure Functions
+ */
+static constexpr const char *kAzureFunctions = "azure_functions";
+
+/**
+ * Azure App Service
+ */
+static constexpr const char *kAzureAppService = "azure_app_service";
+
+/**
+ * Azure Red Hat OpenShift
+ */
+static constexpr const char *kAzureOpenshift = "azure_openshift";
+
+/**
+ * Google Bare Metal Solution (BMS)
+ */
+static constexpr const char *kGcpBareMetalSolution = "gcp_bare_metal_solution";
+
+/**
+ * Google Cloud Compute Engine (GCE)
+ */
+static constexpr const char *kGcpComputeEngine = "gcp_compute_engine";
+
+/**
+ * Google Cloud Run
+ */
+static constexpr const char *kGcpCloudRun = "gcp_cloud_run";
+
+/**
+ * Google Cloud Kubernetes Engine (GKE)
+ */
+static constexpr const char *kGcpKubernetesEngine = "gcp_kubernetes_engine";
+
+/**
+ * Google Cloud Functions (GCF)
+ */
+static constexpr const char *kGcpCloudFunctions = "gcp_cloud_functions";
+
+/**
+ * Google Cloud App Engine (GAE)
+ */
+static constexpr const char *kGcpAppEngine = "gcp_app_engine";
+
+/**
+ * Red Hat OpenShift on Google Cloud
+ */
+static constexpr const char *kGcpOpenshift = "gcp_openshift";
+
+/**
+ * Red Hat OpenShift on IBM Cloud
+ */
+static constexpr const char *kIbmCloudOpenshift = "ibm_cloud_openshift";
+
+/**
+ * Tencent Cloud Cloud Virtual Machine (CVM)
+ */
+static constexpr const char *kTencentCloudCvm = "tencent_cloud_cvm";
+
+/**
+ * Tencent Cloud Elastic Kubernetes Service (EKS)
+ */
+static constexpr const char *kTencentCloudEks = "tencent_cloud_eks";
+
+/**
+ * Tencent Cloud Serverless Cloud Function (SCF)
+ */
+static constexpr const char *kTencentCloudScf = "tencent_cloud_scf";
+
+} // namespace CloudPlatformValues
+
+namespace CloudProviderValues
+{
+/**
+ * Alibaba Cloud
+ */
+static constexpr const char *kAlibabaCloud = "alibaba_cloud";
+
+/**
+ * Amazon Web Services
+ */
+static constexpr const char *kAws = "aws";
+
+/**
+ * Microsoft Azure
+ */
+static constexpr const char *kAzure = "azure";
+
+/**
+ * Google Cloud Platform
+ */
+static constexpr const char *kGcp = "gcp";
+
+/**
+ * Heroku Platform as a Service
+ */
+static constexpr const char *kHeroku = "heroku";
+
+/**
+ * IBM Cloud
+ */
+static constexpr const char *kIbmCloud = "ibm_cloud";
+
+/**
+ * Tencent Cloud
+ */
+static constexpr const char *kTencentCloud = "tencent_cloud";
+
+} // namespace CloudProviderValues
+
+} // namespace cloud
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/cloudevents_attributes.h b/api/include/opentelemetry/semconv/incubating/cloudevents_attributes.h
new file mode 100644
index 0000000000..363feed157
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/cloudevents_attributes.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace cloudevents
+{
+
+/**
+ * The event_id
+ * uniquely identifies the event.
+ */
+static constexpr const char *kCloudeventsEventId = "cloudevents.event_id";
+
+/**
+ * The source
+ * identifies the context in which an event happened.
+ */
+static constexpr const char *kCloudeventsEventSource = "cloudevents.event_source";
+
+/**
+ * The version of
+ * the CloudEvents specification which the event uses.
+ */
+static constexpr const char *kCloudeventsEventSpecVersion = "cloudevents.event_spec_version";
+
+/**
+ * The subject of
+ * the event in the context of the event producer (identified by source).
+ */
+static constexpr const char *kCloudeventsEventSubject = "cloudevents.event_subject";
+
+/**
+ * The event_type
+ * contains a value describing the type of event related to the originating occurrence.
+ */
+static constexpr const char *kCloudeventsEventType = "cloudevents.event_type";
+
+} // namespace cloudevents
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/code_attributes.h b/api/include/opentelemetry/semconv/incubating/code_attributes.h
new file mode 100644
index 0000000000..f2715e87b6
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/code_attributes.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace code
+{
+
+/**
+ * The column number in @code code.filepath @endcode best representing the operation. It SHOULD
+ * point within the code unit named in @code code.function @endcode.
+ */
+static constexpr const char *kCodeColumn = "code.column";
+
+/**
+ * The source code file name that identifies the code unit as uniquely as possible (preferably an
+ * absolute file path).
+ */
+static constexpr const char *kCodeFilepath = "code.filepath";
+
+/**
+ * The method or function name, or equivalent (usually rightmost part of the code unit's name).
+ */
+static constexpr const char *kCodeFunction = "code.function";
+
+/**
+ * The line number in @code code.filepath @endcode best representing the operation. It SHOULD point
+ * within the code unit named in @code code.function @endcode.
+ */
+static constexpr const char *kCodeLineno = "code.lineno";
+
+/**
+ * The "namespace" within which @code code.function @endcode is defined. Usually the qualified class
+ * or module name, such that @code code.namespace @endcode + some separator + @code code.function
+ * @endcode form a unique identifier for the code unit.
+ */
+static constexpr const char *kCodeNamespace = "code.namespace";
+
+/**
+ * A stacktrace as a string in the natural representation for the language runtime. The
+ * representation is to be determined and documented by each language SIG.
+ */
+static constexpr const char *kCodeStacktrace = "code.stacktrace";
+
+} // namespace code
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/container_attributes.h b/api/include/opentelemetry/semconv/incubating/container_attributes.h
new file mode 100644
index 0000000000..5bd1118c3b
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/container_attributes.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace container
+{
+
+/**
+ * The command used to run the container (i.e. the command name).
+ *
+ *
+ */
+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";
+
+namespace DeploymentStatusValues
+{
+/**
+ * failed
+ */
+static constexpr const char *kFailed = "failed";
+
+/**
+ * succeeded
+ */
+static constexpr const char *kSucceeded = "succeeded";
+
+} // namespace DeploymentStatusValues
+
+} // namespace deployment
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/destination_attributes.h b/api/include/opentelemetry/semconv/incubating/destination_attributes.h
new file mode 100644
index 0000000000..5069fc03b7
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/destination_attributes.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace destination
+{
+
+/**
+ * Destination address - domain name if available without reverse DNS lookup; otherwise, IP address
+ * or Unix domain socket name.
+ */
+static constexpr const char *kErrorType = "error.type";
+
+namespace ErrorTypeValues
+{
+/**
+ * A fallback error value to be used when the instrumentation doesn't define a custom value.
+ */
+static constexpr const char *kOther = "_OTHER";
+
+} // namespace ErrorTypeValues
+
+} // namespace error
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/event_attributes.h b/api/include/opentelemetry/semconv/incubating/event_attributes.h
new file mode 100644
index 0000000000..c2faa437cf
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/event_attributes.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_attributes-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace event
+{
+
+/**
+ * Identifies the class / type of event.
+ *
+ */
+static constexpr const char *kFaasInstance = "faas.instance";
+
+/**
+ * The invocation ID of the current function invocation.
+ */
+static constexpr const char *kFaasInvocationId = "faas.invocation_id";
+
+/**
+ * The name of the invoked function.
+ *
+ *
+ */
+static constexpr const char *kFaasName = "faas.name";
+
+/**
+ * A string containing the function invocation time in the ISO 8601 format expressed in UTC.
+ */
+static constexpr const char *kFaasTime = "faas.time";
+
+/**
+ * Type of the trigger which caused this function invocation.
+ */
+static constexpr const char *kFaasTrigger = "faas.trigger";
+
+/**
+ * The immutable version of the function being executed.
+ *
+ *
+ */
+static constexpr const char *kFaasVersion = "faas.version";
+
+namespace FaasDocumentOperationValues
+{
+/**
+ * When a new object is created.
+ */
+static constexpr const char *kInsert = "insert";
+
+/**
+ * When an object is modified.
+ */
+static constexpr const char *kEdit = "edit";
+
+/**
+ * When an object is deleted.
+ */
+static constexpr const char *kDelete = "delete";
+
+} // namespace FaasDocumentOperationValues
+
+namespace FaasInvokedProviderValues
+{
+/**
+ * Alibaba Cloud
+ */
+static constexpr const char *kAlibabaCloud = "alibaba_cloud";
+
+/**
+ * Amazon Web Services
+ */
+static constexpr const char *kAws = "aws";
+
+/**
+ * Microsoft Azure
+ */
+static constexpr const char *kAzure = "azure";
+
+/**
+ * Google Cloud Platform
+ */
+static constexpr const char *kGcp = "gcp";
+
+/**
+ * Tencent Cloud
+ */
+static constexpr const char *kTencentCloud = "tencent_cloud";
+
+} // namespace FaasInvokedProviderValues
+
+namespace FaasTriggerValues
+{
+/**
+ * A response to some data source operation such as a database or filesystem read/write
+ */
+static constexpr const char *kDatasource = "datasource";
+
+/**
+ * To provide an answer to an inbound HTTP request
+ */
+static constexpr const char *kHttp = "http";
+
+/**
+ * A function is set to be executed when messages are sent to a messaging system
+ */
+static constexpr const char *kPubsub = "pubsub";
+
+/**
+ * A function is scheduled to be executed regularly
+ */
+static constexpr const char *kTimer = "timer";
+
+/**
+ * If none of the others apply
+ */
+static constexpr const char *kOther = "other";
+
+} // namespace FaasTriggerValues
+
+} // namespace faas
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/faas_metrics.h b/api/include/opentelemetry/semconv/incubating/faas_metrics.h
new file mode 100644
index 0000000000..73dc2989a6
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/faas_metrics.h
@@ -0,0 +1,287 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * DO NOT EDIT, this is an Auto-generated file from:
+ * buildscripts/semantic-convention/templates/registry/semantic_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/metrics/meter.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace faas
+{
+
+/**
+ * Number of invocation cold starts
+ * If generated according to one of the mechanisms defined
+ * in Rec. ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be different from all other
+ * UUIDs generated before 3603 A.D., or is extremely likely to be different (depending on the
+ * mechanism chosen).
+ *
+ *