diff --git a/api/include/opentelemetry/semconv/incubating/cicd_attributes.h b/api/include/opentelemetry/semconv/incubating/cicd_attributes.h index 246563a8e8..622de977ce 100644 --- a/api/include/opentelemetry/semconv/incubating/cicd_attributes.h +++ b/api/include/opentelemetry/semconv/incubating/cicd_attributes.h @@ -31,8 +31,8 @@ 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. + * href="https://wikipedia.org/wiki/Pipeline_(computing)">computing process in a pipeline. Other + * terms for tasks include commands, steps, and procedures. */ static constexpr const char *kCicdPipelineTaskName = "cicd.pipeline.task.name"; @@ -42,8 +42,8 @@ static constexpr const char *kCicdPipelineTaskName = "cicd.pipeline.task.name"; 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. + * 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"; diff --git a/api/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h b/api/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h index 0eda006baa..a0740e5b38 100644 --- a/api/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h +++ b/api/include/opentelemetry/semconv/incubating/cloudfoundry_attributes.h @@ -32,10 +32,13 @@ static constexpr const char *kCloudfoundryAppId = "cloudfoundry.app.id"; * The index of the application instance. 0 when just one instance is active. *
* CloudFoundry defines the @code instance_id @endcode in the Loggegator v2 envelope. It - * is used for logs and metrics emitted by CloudFoundry. It is supposed to contain the application - * instance index for applications deployed on the runtime.
Application instrumentation should - * use the value from environment variable @code CF_INSTANCE_INDEX @endcode. + * href="https://github.com/cloudfoundry/loggregator-api#v2-envelope">Loggregator v2 envelope. + * It is used for logs and metrics emitted by CloudFoundry. It is + * supposed to contain the application instance index for applications + * deployed on the runtime. + *
+ * Application instrumentation should use the value from environment + * variable @code CF_INSTANCE_INDEX @endcode. */ static constexpr const char *kCloudfoundryAppInstanceId = "cloudfoundry.app.instance.id"; diff --git a/api/include/opentelemetry/semconv/incubating/container_metrics.h b/api/include/opentelemetry/semconv/incubating/container_metrics.h index 8fa2541b32..ef3d9fa71d 100644 --- a/api/include/opentelemetry/semconv/incubating/container_metrics.h +++ b/api/include/opentelemetry/semconv/incubating/container_metrics.h @@ -219,6 +219,48 @@ CreateAsyncDoubleMetricContainerNetworkIo(metrics::Meter *meter) kMetricContainerNetworkIo, descrMetricContainerNetworkIo, unitMetricContainerNetworkIo); } +/** + * The time the container has been running + *
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds + * as a floating point number with the highest precision available. The actual accuracy would depend + * on the instrumentation and operating system.
gauge
+ */
+static constexpr const char *kMetricContainerUptime = "metric.container.uptime";
+static constexpr const char *descrMetricContainerUptime = "The time the container has been running";
+static constexpr const char *unitMetricContainerUptime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr
* 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. This attribute has stability level
- * RELEASE CANDIDATE.
+ * any case normalization. The collection name SHOULD NOT be extracted from @code db.query.text
+ * @endcode, unless the query format is known to only ever have a single collection name present.
+ *
+ * For batch operations, if the individual operations are known to have the same collection name
+ * then that collection name SHOULD be used.
+ *
+ * This attribute has stability level RELEASE CANDIDATE.
*/
static constexpr const char *kDbCollectionName = "db.collection.name";
@@ -126,6 +127,12 @@ static constexpr const char *kDbCosmosdbClientId = "db.cosmosdb.client_id";
*/
static constexpr const char *kDbCosmosdbConnectionMode = "db.cosmosdb.connection_mode";
+/**
+ * Account or request consistency level.
+ */
+static constexpr const char *kDbCosmosdbConsistencyLevel = "db.cosmosdb.consistency_level";
+
/**
* Deprecated, use @code db.collection.name @endcode instead.
*
@@ -136,17 +143,30 @@ OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbCosmosdbContainer = "db.cosmosdb.container";
/**
- * Cosmos DB Operation Type.
+ * Deprecated, no replacement at this time.
+ *
+ * @deprecated
+ * No replacement at this time.
*/
+OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbCosmosdbOperationType = "db.cosmosdb.operation_type";
/**
- * RU consumed for that operation
+ * List of regions contacted during operation in the order that they were contacted. If there is
+ * more than one region listed, it indicates that the operation was performed on multiple regions
+ * i.e. cross-regional call. Region name matches the format of @code displayName @endcode in Azure
+ * Location API
+ */
+static constexpr const char *kDbCosmosdbRegionsContacted = "db.cosmosdb.regions_contacted";
+
+/**
+ * Request units consumed for the operation.
*/
static constexpr const char *kDbCosmosdbRequestCharge = "db.cosmosdb.request_charge";
/**
- * Request payload size in bytes
+ * Request payload size in bytes.
*/
static constexpr const char *kDbCosmosdbRequestContentLength = "db.cosmosdb.request_content_length";
@@ -270,25 +290,53 @@ 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. This attribute has stability level
- * RELEASE CANDIDATE.
+ * It is RECOMMENDED to capture the value as provided by the application
+ * without attempting to do any case normalization.
+ *
+ * The operation name SHOULD NOT be extracted from @code db.query.text @endcode,
+ * unless the query format is known to only ever have a single operation name present.
+ *
+ * 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.
+ *
+ * This attribute has stability level RELEASE CANDIDATE.
*/
static constexpr const char *kDbOperationName = "db.operation.name";
+/**
+ * A database operation parameter, with @code If a parameter has no
+ * name and instead is referenced only by index, then @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
- *
+ * @code db.query.summary @endcode provides static summary of the query text. It describes a class
+ * of database queries and is useful as a grouping key, especially when analyzing telemetry for
+ * database calls involving complex queries. Summary may be available to the instrumentation through
+ * instrumentation hooks or other means. If it is not available, instrumentations that support query
+ * parsing SHOULD generate a summary following Generating
+ * query summary section. This attribute has stability level RELEASE CANDIDATE.
+ */
+static constexpr const char *kDbQuerySummary = "db.query.summary";
+
/**
* The database query being executed.
*
@@ -314,6 +362,11 @@ static constexpr const char *kDbQueryText = "db.query.text";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kDbRedisDatabaseIndex = "db.redis.database_index";
+/**
+ * Number of rows returned by the operation.
+ */
+static constexpr const char *kDbResponseReturnedRows = "db.response.returned_rows";
+
/**
* Database response status code.
*
@@ -452,7 +505,7 @@ static constexpr const char *kUsed = "used";
namespace DbCosmosdbConnectionModeValues
{
/**
- * Gateway (HTTP) connections mode
+ * Gateway (HTTP) connection.
*/
static constexpr const char *kGateway = "gateway";
@@ -463,6 +516,35 @@ static constexpr const char *kDirect = "direct";
} // namespace DbCosmosdbConnectionModeValues
+namespace DbCosmosdbConsistencyLevelValues
+{
+/**
+ * none
+ */
+static constexpr const char *kStrong = "Strong";
+
+/**
+ * none
+ */
+static constexpr const char *kBoundedStaleness = "BoundedStaleness";
+
+/**
+ * none
+ */
+static constexpr const char *kSession = "Session";
+
+/**
+ * none
+ */
+static constexpr const char *kEventual = "Eventual";
+
+/**
+ * none
+ */
+static constexpr const char *kConsistentPrefix = "ConsistentPrefix";
+
+} // namespace DbCosmosdbConsistencyLevelValues
+
namespace DbCosmosdbOperationTypeValues
{
/**
diff --git a/api/include/opentelemetry/semconv/incubating/db_metrics.h b/api/include/opentelemetry/semconv/incubating/db_metrics.h
index d3dd52190e..9543a70baa 100644
--- a/api/include/opentelemetry/semconv/incubating/db_metrics.h
+++ b/api/include/opentelemetry/semconv/incubating/db_metrics.h
@@ -365,31 +365,31 @@ CreateSyncDoubleMetricDbClientConnectionWaitTime(metrics::Meter *meter)
* @code ms @endcode to @code s @endcode. histogram
*/
OPENTELEMETRY_DEPRECATED
-static constexpr const char *kMetricDbClientConnectionsCreateTimeDeprecated =
- "metric.db.client.connections.create_time.deprecated";
+static constexpr const char *kMetricDbClientConnectionsCreateTime =
+ "metric.db.client.connections.create_time";
OPENTELEMETRY_DEPRECATED
-static constexpr const char *descrMetricDbClientConnectionsCreateTimeDeprecated =
+static constexpr const char *descrMetricDbClientConnectionsCreateTime =
"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";
+static constexpr const char *unitMetricDbClientConnectionsCreateTime = "ms";
OPENTELEMETRY_DEPRECATED
static inline nostd::unique_ptr histogram
*/
OPENTELEMETRY_DEPRECATED
-static constexpr const char *kMetricDbClientConnectionsUseTimeDeprecated =
- "metric.db.client.connections.use_time.deprecated";
+static constexpr const char *kMetricDbClientConnectionsUseTime =
+ "metric.db.client.connections.use_time";
OPENTELEMETRY_DEPRECATED
-static constexpr const char *descrMetricDbClientConnectionsUseTimeDeprecated =
+static constexpr const char *descrMetricDbClientConnectionsUseTime =
"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";
+static constexpr const char *unitMetricDbClientConnectionsUseTime = "ms";
OPENTELEMETRY_DEPRECATED
static inline nostd::unique_ptr histogram
*/
OPENTELEMETRY_DEPRECATED
-static constexpr const char *kMetricDbClientConnectionsWaitTimeDeprecated =
- "metric.db.client.connections.wait_time.deprecated";
+static constexpr const char *kMetricDbClientConnectionsWaitTime =
+ "metric.db.client.connections.wait_time";
OPENTELEMETRY_DEPRECATED
-static constexpr const char *descrMetricDbClientConnectionsWaitTimeDeprecated =
+static constexpr const char *descrMetricDbClientConnectionsWaitTime =
"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";
+static constexpr const char *unitMetricDbClientConnectionsWaitTime = "ms";
OPENTELEMETRY_DEPRECATED
static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricDbClientCosmosdbActiveInstanceCount =
+ "metric.db.client.cosmosdb.active_instance.count";
+static constexpr const char *descrMetricDbClientCosmosdbActiveInstanceCount =
+ "Number of active client instances";
+static constexpr const char *unitMetricDbClientCosmosdbActiveInstanceCount = "{instance}";
+
+static inline nostd::unique_ptr histogram
+ */
+static constexpr const char *kMetricDbClientCosmosdbOperationRequestCharge =
+ "metric.db.client.cosmosdb.operation.request_charge";
+static constexpr const char *descrMetricDbClientCosmosdbOperationRequestCharge =
+ "[Request charge](https://learn.microsoft.com/azure/cosmos-db/request-units) consumed by the "
+ "operation";
+static constexpr const char *unitMetricDbClientCosmosdbOperationRequestCharge = "{request_unit}";
+
+static inline nostd::unique_ptr
+ * histogram
+ */
+static constexpr const char *kMetricDbClientResponseReturnedRows =
+ "metric.db.client.response.returned_rows";
+static constexpr const char *descrMetricDbClientResponseReturnedRows =
+ "The actual number of records returned by the database operation.";
+static constexpr const char *unitMetricDbClientResponseReturnedRows = "{row}";
+
+static inline nostd::unique_ptr A semantic identifier, commonly referred to as a variant, provides a means
+ * The identifier of the flag
+ * set to which the feature flag belongs.
+ */
+static constexpr const char *kFeatureFlagSetId = "feature_flag.set.id";
+
+/**
+ * A semantic identifier for an evaluated flag value.
+ *
+ * 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";
+/**
+ * The version of the ruleset used during the evaluation. This may be any stable value which
+ * uniquely identifies the ruleset.
+ */
+static constexpr const char *kFeatureFlagVersion = "feature_flag.version";
+
+namespace FeatureFlagEvaluationReasonValues
+{
+/**
+ * The resolved value is static (no dynamic evaluation).
+ */
+static constexpr const char *kStatic = "static";
+
+/**
+ * The resolved value fell back to a pre-configured value (no dynamic evaluation occurred or dynamic
+ * evaluation yielded no result).
+ */
+static constexpr const char *kDefault = "default";
+
+/**
+ * The resolved value was the result of a dynamic evaluation, such as a rule or specific
+ * user-targeting.
+ */
+static constexpr const char *kTargetingMatch = "targeting_match";
+
+/**
+ * The resolved value was the result of pseudorandom assignment.
+ */
+static constexpr const char *kSplit = "split";
+
+/**
+ * The resolved value was retrieved from cache.
+ */
+static constexpr const char *kCached = "cached";
+
+/**
+ * The resolved value was the result of the flag being disabled in the management system.
+ */
+static constexpr const char *kDisabled = "disabled";
+
+/**
+ * The reason for the resolved value could not be determined.
+ */
+static constexpr const char *kUnknown = "unknown";
+
+/**
+ * The resolved value is non-authoritative or possibly out of date
+ */
+static constexpr const char *kStale = "stale";
+
+/**
+ * The resolved value was the result of an error.
+ */
+static constexpr const char *kError = "error";
+
+} // namespace FeatureFlagEvaluationReasonValues
+
} // namespace feature_flag
} // 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
index ce4a939d07..b56e98f178 100644
--- a/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h
+++ b/api/include/opentelemetry/semconv/incubating/gen_ai_attributes.h
@@ -40,7 +40,7 @@ static constexpr const char *kGenAiOpenaiRequestResponseFormat =
static constexpr const char *kGenAiOpenaiRequestSeed = "gen_ai.openai.request.seed";
/**
- * The service tier requested. May be a specific tier, detault, or auto.
+ * The service tier requested. May be a specific tier, default, or auto.
*/
static constexpr const char *kGenAiOpenaiRequestServiceTier = "gen_ai.openai.request.service_tier";
@@ -50,6 +50,12 @@ static constexpr const char *kGenAiOpenaiRequestServiceTier = "gen_ai.openai.req
static constexpr const char *kGenAiOpenaiResponseServiceTier =
"gen_ai.openai.response.service_tier";
+/**
+ * A fingerprint to track any eventual change in the Generative AI environment.
+ */
+static constexpr const char *kGenAiOpenaiResponseSystemFingerprint =
+ "gen_ai.openai.response.system_fingerprint";
+
/**
* The name of the operation being performed.
*
@@ -69,6 +75,14 @@ static constexpr const char *kGenAiOperationName = "gen_ai.operation.name";
OPENTELEMETRY_DEPRECATED
static constexpr const char *kGenAiPrompt = "gen_ai.prompt";
+/**
+ * The encoding formats requested in an embeddings operation, if specified.
+ *
+ * In some GenAI systems the encoding formats are called embedding types. Also, some GenAI systems
+ * only accept a single format per request.
+ */
+static constexpr const char *kGenAiRequestEncodingFormats = "gen_ai.request.encoding_formats";
+
/**
* The frequency penalty setting for the GenAI request.
*/
@@ -218,6 +232,13 @@ static constexpr const char *kChat = "chat";
*/
static constexpr const char *kTextCompletion = "text_completion";
+/**
+ * Embeddings operation such as OpenAI Create embeddings
+ * API
+ */
+static constexpr const char *kEmbeddings = "embeddings";
+
} // namespace GenAiOperationNameValues
namespace GenAiSystemValues
@@ -242,6 +263,21 @@ static constexpr const char *kAnthropic = "anthropic";
*/
static constexpr const char *kCohere = "cohere";
+/**
+ * Azure AI Inference
+ */
+static constexpr const char *kAzAiInference = "az.ai.inference";
+
+/**
+ * IBM Watsonx AI
+ */
+static constexpr const char *kIbmWatsonxAi = "ibm.watsonx.ai";
+
+/**
+ * AWS Bedrock
+ */
+static constexpr const char *kAwsBedrock = "aws.bedrock";
+
} // namespace GenAiSystemValues
namespace GenAiTokenTypeValues
diff --git a/api/include/opentelemetry/semconv/incubating/geo_attributes.h b/api/include/opentelemetry/semconv/incubating/geo_attributes.h
new file mode 100644
index 0000000000..b50240e228
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/geo_attributes.h
@@ -0,0 +1,102 @@
+/*
+ * 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 geo
+{
+
+/**
+ * Two-letter code representing continent’s name.
+ */
+static constexpr const char *kGeoContinentCode = "geo.continent.code";
+
+/**
+ * Two-letter ISO Country Code (ISO 3166-1
+ * alpha2).
+ */
+static constexpr const char *kGeoCountryIsoCode = "geo.country.iso_code";
+
+/**
+ * Locality name. Represents the name of a city, town, village, or similar populated place.
+ */
+static constexpr const char *kGeoLocalityName = "geo.locality.name";
+
+/**
+ * Latitude of the geo location in WGS84.
+ */
+static constexpr const char *kGeoLocationLat = "geo.location.lat";
+
+/**
+ * Longitude of the geo location in WGS84.
+ */
+static constexpr const char *kGeoLocationLon = "geo.location.lon";
+
+/**
+ * Postal code associated with the location. Values appropriate for this field may also be known as
+ * a postcode or ZIP code and will vary widely from country to country.
+ */
+static constexpr const char *kGeoPostalCode = "geo.postal_code";
+
+/**
+ * Region ISO code (ISO 3166-2).
+ */
+static constexpr const char *kGeoRegionIsoCode = "geo.region.iso_code";
+
+namespace GeoContinentCodeValues
+{
+/**
+ * Africa
+ */
+static constexpr const char *kAf = "AF";
+
+/**
+ * Antarctica
+ */
+static constexpr const char *kAn = "AN";
+
+/**
+ * Asia
+ */
+static constexpr const char *kAs = "AS";
+
+/**
+ * Europe
+ */
+static constexpr const char *kEu = "EU";
+
+/**
+ * North America
+ */
+static constexpr const char *kNa = "NA";
+
+/**
+ * Oceania
+ */
+static constexpr const char *kOc = "OC";
+
+/**
+ * South America
+ */
+static constexpr const char *kSa = "SA";
+
+} // namespace GeoContinentCodeValues
+
+} // namespace geo
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/k8s_metrics.h b/api/include/opentelemetry/semconv/incubating/k8s_metrics.h
index 2753ba4be1..2495f0bc70 100644
--- a/api/include/opentelemetry/semconv/incubating/k8s_metrics.h
+++ b/api/include/opentelemetry/semconv/incubating/k8s_metrics.h
@@ -144,6 +144,122 @@ CreateAsyncDoubleMetricK8sNodeMemoryUsage(metrics::Meter *meter)
kMetricK8sNodeMemoryUsage, descrMetricK8sNodeMemoryUsage, unitMetricK8sNodeMemoryUsage);
}
+/**
+ * Node network errors
+ *
+ * counter
+ */
+static constexpr const char *kMetricK8sNodeNetworkErrors = "metric.k8s.node.network.errors";
+static constexpr const char *descrMetricK8sNodeNetworkErrors = "Node network errors";
+static constexpr const char *unitMetricK8sNodeNetworkErrors = "{error}";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricK8sNodeNetworkIo = "metric.k8s.node.network.io";
+static constexpr const char *descrMetricK8sNodeNetworkIo = "Network bytes for the Node";
+static constexpr const char *unitMetricK8sNodeNetworkIo = "By";
+
+static inline nostd::unique_ptr
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds
+ * as a floating point number with the highest precision available. The actual accuracy would depend
+ * on the instrumentation and operating system. gauge
+ */
+static constexpr const char *kMetricK8sNodeUptime = "metric.k8s.node.uptime";
+static constexpr const char *descrMetricK8sNodeUptime = "The time the Node has been running";
+static constexpr const char *unitMetricK8sNodeUptime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr
@@ -268,6 +384,122 @@ CreateAsyncDoubleMetricK8sPodMemoryUsage(metrics::Meter *meter)
unitMetricK8sPodMemoryUsage);
}
+/**
+ * Pod network errors
+ *
+ * counter
+ */
+static constexpr const char *kMetricK8sPodNetworkErrors = "metric.k8s.pod.network.errors";
+static constexpr const char *descrMetricK8sPodNetworkErrors = "Pod network errors";
+static constexpr const char *unitMetricK8sPodNetworkErrors = "{error}";
+
+static inline nostd::unique_ptr
+ * counter
+ */
+static constexpr const char *kMetricK8sPodNetworkIo = "metric.k8s.pod.network.io";
+static constexpr const char *descrMetricK8sPodNetworkIo = "Network bytes for the Pod";
+static constexpr const char *unitMetricK8sPodNetworkIo = "By";
+
+static inline nostd::unique_ptr
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds
+ * as a floating point number with the highest precision available. The actual accuracy would depend
+ * on the instrumentation and operating system. gauge
+ */
+static constexpr const char *kMetricK8sPodUptime = "metric.k8s.pod.uptime";
+static constexpr const char *descrMetricK8sPodUptime = "The time the Pod has been running";
+static constexpr const char *unitMetricK8sPodUptime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr The value SHOULD be normalized to lowercase.
*/
static constexpr const char *kNetworkProtocolName = "network.protocol.name";
@@ -92,7 +97,7 @@ static constexpr const char *kNetworkProtocolName = "network.protocol.name";
static constexpr const char *kNetworkProtocolVersion = "network.protocol.version";
/**
- * OSI transport layer or OSI transport layer or inter-process communication
* method. The value SHOULD be normalized to lowercase. Consider always setting the
* transport when setting a port number, since a port number is ambiguous without knowing the
@@ -102,7 +107,7 @@ static constexpr const char *kNetworkProtocolVersion = "network.protocol.version
static constexpr const char *kNetworkTransport = "network.transport";
/**
- * OSI network layer or non-OSI equivalent.
+ * OSI network layer or non-OSI equivalent.
*
* The value SHOULD be normalized to lowercase.
*/
diff --git a/api/include/opentelemetry/semconv/incubating/process_attributes.h b/api/include/opentelemetry/semconv/incubating/process_attributes.h
index de81b12c38..f211c3e41a 100644
--- a/api/include/opentelemetry/semconv/incubating/process_attributes.h
+++ b/api/include/opentelemetry/semconv/incubating/process_attributes.h
@@ -82,6 +82,16 @@ static constexpr const char *kProcessExecutableBuildIdGo = "process.executable.b
* Profiling specific build ID for executables. See the OTel specification for Profiles for more
* information.
*/
+static constexpr const char *kProcessExecutableBuildIdHtlhash =
+ "process.executable.build_id.htlhash";
+
+/**
+ * "Deprecated, use @code process.executable.build_id.htlhash @endcode instead."
+ *
+ * @deprecated
+ * Replaced by @code process.executable.build_id.htlhash @endcode
+ */
+OPENTELEMETRY_DEPRECATED
static constexpr const char *kProcessExecutableBuildIdProfiling =
"process.executable.build_id.profiling";
@@ -119,6 +129,16 @@ static constexpr const char *kProcessGroupLeaderPid = "process.group_leader.pid"
*/
static constexpr const char *kProcessInteractive = "process.interactive";
+/**
+ * The control group associated with the process.
+ *
+ * Control groups (cgroups) are a kernel feature used to organize and manage process resources. This
+ * attribute provides the path(s) to the cgroup(s) associated with the process, which should match
+ * the contents of the /proc/
- * Instrumentations SHOULD use counter with type @code double @endcode and measure uptime with at
- * least millisecond precision counter
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds
+ * as a floating point number with the highest precision available. The actual accuracy would depend
+ * on the instrumentation and operating system. gauge
*/
static constexpr const char *kMetricProcessUptime = "metric.process.uptime";
static constexpr const char *descrMetricProcessUptime = "The time the process has been running.";
static constexpr const char *unitMetricProcessUptime = "s";
-static inline nostd::unique_ptr UUIDs are typically recommended, as only an
* opaque value for the purposes of identifying a service instance is needed. Similar to what can be
* seen in the man page for the @code /etc/machine-id
- * @endcode file, the underlying data, such as pod name and namespace should be treated as
- * confidential, being the user's choice to expose it or not via another resource attribute. For
- * applications running behind an application server (like unicorn), we do not recommend using one
- * identifier for all processes participating in the application. Instead, it's recommended each
- * division (e.g. a worker thread in unicorn) to have its own instance.id. It's not recommended
- * for a Collector to set @code service.instance.id @endcode if it can't unambiguously determine the
- * service instance that is generating that telemetry. For instance, creating an UUID based on @code
- * pod.name @endcode will likely be wrong, as the Collector might not know from which container
- * within that pod the telemetry originated. However, Collectors can set the @code
- * service.instance.id @endcode if they can unambiguously determine the service instance for that
- * telemetry. This is typically the case for scraping receivers, as they know the target address and
- * port.
+ * href="https://www.freedesktop.org/software/systemd/man/latest/machine-id.html">@code
+ * /etc/machine-id @endcode file, the underlying data, such as pod name and namespace should be
+ * treated as confidential, being the user's choice to expose it or not via another resource
+ * attribute. For applications running behind an application server (like unicorn), we do not
+ * recommend using one identifier for all processes participating in the application. Instead, it's
+ * recommended each division (e.g. a worker thread in unicorn) to have its own instance.id. It's
+ * not recommended for a Collector to set @code service.instance.id @endcode if it can't
+ * unambiguously determine the service instance that is generating that telemetry. For instance,
+ * creating an UUID based on @code pod.name @endcode will likely be wrong, as the Collector might
+ * not know from which container within that pod the telemetry originated. However, Collectors can
+ * set the @code service.instance.id @endcode if they can unambiguously determine the service
+ * instance for that telemetry. This is typically the case for scraping receivers, as they know the
+ * target address and port.
*/
static constexpr const char *kServiceInstanceId = "service.instance.id";
diff --git a/api/include/opentelemetry/semconv/incubating/system_metrics.h b/api/include/opentelemetry/semconv/incubating/system_metrics.h
index a23a8ae4d0..37ea70a213 100644
--- a/api/include/opentelemetry/semconv/incubating/system_metrics.h
+++ b/api/include/opentelemetry/semconv/incubating/system_metrics.h
@@ -1279,6 +1279,48 @@ CreateAsyncDoubleMetricSystemProcessCreated(metrics::Meter *meter)
kMetricSystemProcessCreated, descrMetricSystemProcessCreated, unitMetricSystemProcessCreated);
}
+/**
+ * The time the system has been running
+ *
+ * Instrumentations SHOULD use a gauge with type @code double @endcode and measure uptime in seconds
+ * as a floating point number with the highest precision available. The actual accuracy would depend
+ * on the instrumentation and operating system. gauge
+ */
+static constexpr const char *kMetricSystemUptime = "metric.system.uptime";
+static constexpr const char *descrMetricSystemUptime = "The time the system has been running";
+static constexpr const char *unitMetricSystemUptime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr For network calls, URL usually has
* @code scheme://host[:port][path][?query][#fragment] @endcode format, where the fragment is not
- * transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.
+ * transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.
* @code url.full @endcode MUST NOT contain credentials passed via URL in form of @code
* https://username:password@www.example.com/ @endcode. In such case username and password SHOULD be
* redacted and attribute's value SHOULD be @code https://REDACTED:REDACTED@www.example.com/
- * @endcode.
+ * @endcode.
* @code url.full @endcode SHOULD capture the absolute URL when it is available (or can be
- * reconstructed). Sensitive content provided in @code url.full @endcode SHOULD be scrubbed when
- * instrumentations can identify it.
+ * reconstructed). Sensitive content provided in @code url.full @endcode SHOULD be scrubbed when
+ * instrumentations can identify it.
+ *
+ * Query string values for the following keys SHOULD be redacted by default and replaced by the
+ * value @code REDACTED @endcode:
+ *
+ *
+ * When a query string value is redacted, the query string key SHOULD still be preserved, e.g.
+ * @code https://www.example.com/path?color=blue&sig=REDACTED @endcode.
*/
static constexpr const char *kUrlFull = "url.full";
@@ -88,7 +107,23 @@ static constexpr const char *kUrlPort = "url.port";
* The URI query component
*
* Sensitive content provided in @code url.query @endcode SHOULD be scrubbed when instrumentations
- * can identify it.
+ * can identify it.
+ *
+ * Query string values for the following keys SHOULD be redacted by default and replaced by the
+ * value @code REDACTED @endcode:
+ * When a query string value is redacted, the query string key SHOULD still be preserved, e.g.
+ * @code q=OpenTelemetry&sig=REDACTED @endcode.
*/
static constexpr const char *kUrlQuery = "url.query";
diff --git a/api/include/opentelemetry/semconv/incubating/user_agent_attributes.h b/api/include/opentelemetry/semconv/incubating/user_agent_attributes.h
index 738bb6de15..1ebffd13ec 100644
--- a/api/include/opentelemetry/semconv/incubating/user_agent_attributes.h
+++ b/api/include/opentelemetry/semconv/incubating/user_agent_attributes.h
@@ -35,6 +35,18 @@ static constexpr const char *kUserAgentName = "user_agent.name";
*/
static constexpr const char *kUserAgentOriginal = "user_agent.original";
+/**
+ * Specifies the category of synthetic traffic, such as tests or bots.
+ *
+ * This attribute MAY be derived from the contents of the @code user_agent.original @endcode
+ * attribute. Components that populate the attribute are responsible for determining what they
+ * consider to be synthetic bot or test traffic. This attribute can either be set for
+ * self-identification purposes, or on telemetry detected to be generated as a result of a synthetic
+ * request. This attribute is useful for distinguishing between genuine client traffic and synthetic
+ * traffic generated by bots or tests.
+ */
+static constexpr const char *kUserAgentSyntheticType = "user_agent.synthetic.type";
+
/**
* Version of the user-agent extracted from original. Usually refers to the browser's version
*
@@ -46,6 +58,20 @@ static constexpr const char *kUserAgentOriginal = "user_agent.original";
*/
static constexpr const char *kUserAgentVersion = "user_agent.version";
+namespace UserAgentSyntheticTypeValues
+{
+/**
+ * Bot source.
+ */
+static constexpr const char *kBot = "bot";
+
+/**
+ * Synthetic test source.
+ */
+static constexpr const char *kTest = "test";
+
+} // namespace UserAgentSyntheticTypeValues
+
} // namespace user_agent
} // namespace semconv
OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/vcs_attributes.h b/api/include/opentelemetry/semconv/incubating/vcs_attributes.h
index cc38902e88..b5f05d38da 100644
--- a/api/include/opentelemetry/semconv/incubating/vcs_attributes.h
+++ b/api/include/opentelemetry/semconv/incubating/vcs_attributes.h
@@ -20,22 +20,32 @@ namespace vcs
{
/**
- * The ID of the change (pull request/merge request) if applicable. This is usually a unique (within
- * repository) identifier generated by the VCS system.
+ * The ID of the change (pull request/merge request/changelist) if applicable. This is usually a
+ * unique (within repository) identifier generated by the VCS system.
*/
-static constexpr const char *kVcsRepositoryChangeId = "vcs.repository.change.id";
+static constexpr const char *kVcsChangeId = "vcs.change.id";
/**
- * The human readable title of the change (pull request/merge request). This title is often a brief
- * summary of the change and may get merged in to a ref as the commit summary.
+ * The state of the change (pull request/merge request/changelist).
*/
-static constexpr const char *kVcsRepositoryChangeTitle = "vcs.repository.change.title";
+static constexpr const char *kVcsChangeState = "vcs.change.state";
+
+/**
+ * The human readable title of the change (pull request/merge request/changelist). This title is
+ * often a brief summary of the change and may get merged in to a ref as the commit summary.
+ */
+static constexpr const char *kVcsChangeTitle = "vcs.change.title";
+
+/**
+ * The type of line change being measured on a branch or change.
+ */
+static constexpr const char *kVcsLineChangeType = "vcs.line_change.type";
/**
* The name of the reference such as
* branch or tag in the repository.
*/
-static constexpr const char *kVcsRepositoryRefName = "vcs.repository.ref.name";
+static constexpr const char *kVcsRefBaseName = "vcs.ref.base.name";
/**
* The revision, literally revised
@@ -47,24 +57,198 @@ static constexpr const char *kVcsRepositoryRefName = "vcs.repository.ref.name";
* not necessarily have to be a hash; it can simply define a
* revision number
* which is an integer that is monotonically increasing. In cases where
- * it is identical to the @code ref.name @endcode, it SHOULD still be included. It is
+ * it is identical to the @code ref.base.name @endcode, it SHOULD still be included. It is
* up to the implementer to decide which value to set as the revision
* based on the VCS system and situational context.
*/
-static constexpr const char *kVcsRepositoryRefRevision = "vcs.repository.ref.revision";
+static constexpr const char *kVcsRefBaseRevision = "vcs.ref.base.revision";
+
+/**
+ * The type of the reference in the
+ * repository.
+ */
+static constexpr const char *kVcsRefBaseType = "vcs.ref.base.type";
+
+/**
+ * The name of the reference such as
+ * branch or tag in the repository.
+ */
+static constexpr const char *kVcsRefHeadName = "vcs.ref.head.name";
+
+/**
+ * The revision, literally revised
+ * version, The revision most often refers to a commit object in Git, or a revision number in
+ * SVN. The revision can be a full hash value (see glossary),
+ * of the recorded change to a ref within a repository pointing to a
+ * commit commit object. It does
+ * not necessarily have to be a hash; it can simply define a
+ * revision number
+ * which is an integer that is monotonically increasing. In cases where
+ * it is identical to the @code ref.head.name @endcode, it SHOULD still be included. It is
+ * up to the implementer to decide which value to set as the revision
+ * based on the VCS system and situational context.
+ */
+static constexpr const char *kVcsRefHeadRevision = "vcs.ref.head.revision";
/**
* The type of the reference in the
* repository.
*/
+static constexpr const char *kVcsRefHeadType = "vcs.ref.head.type";
+
+/**
+ * The type of the reference in the
+ * repository.
+ */
+static constexpr const char *kVcsRefType = "vcs.ref.type";
+
+/**
+ * Deprecated, use @code vcs.change.id @endcode instead.
+ *
+ * @deprecated
+ * Deprecated, use @code vcs.change.id @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kVcsRepositoryChangeId = "vcs.repository.change.id";
+
+/**
+ * Deprecated, use @code vcs.change.title @endcode instead.
+ *
+ * @deprecated
+ * Deprecated, use @code vcs.change.title @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kVcsRepositoryChangeTitle = "vcs.repository.change.title";
+
+/**
+ * Deprecated, use @code vcs.ref.head.name @endcode instead.
+ *
+ * @deprecated
+ * Deprecated, use @code vcs.ref.head.name @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kVcsRepositoryRefName = "vcs.repository.ref.name";
+
+/**
+ * Deprecated, use @code vcs.ref.head.revision @endcode instead.
+ *
+ * @deprecated
+ * Deprecated, use @code vcs.ref.head.revision @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kVcsRepositoryRefRevision = "vcs.repository.ref.revision";
+
+/**
+ * Deprecated, use @code vcs.ref.head.type @endcode instead.
+ *
+ * @deprecated
+ * Deprecated, use @code vcs.ref.head.type @endcode instead.
+ */
+OPENTELEMETRY_DEPRECATED
static constexpr const char *kVcsRepositoryRefType = "vcs.repository.ref.type";
/**
- * The URL of the repository providing the complete
+ * The URL of the repository providing the complete
* address in order to locate and identify the repository.
*/
static constexpr const char *kVcsRepositoryUrlFull = "vcs.repository.url.full";
+/**
+ * The type of revision comparison.
+ */
+static constexpr const char *kVcsRevisionDeltaDirection = "vcs.revision_delta.direction";
+
+namespace VcsChangeStateValues
+{
+/**
+ * Open means the change is currently active and under review. It hasn't been merged into the target
+ * branch yet, and it's still possible to make changes or add comments.
+ */
+static constexpr const char *kOpen = "open";
+
+/**
+ * WIP (work-in-progress, draft) means the change is still in progress and not yet ready for a full
+ * review. It might still undergo significant changes.
+ */
+static constexpr const char *kWip = "wip";
+
+/**
+ * Closed means the merge request has been closed without merging. This can happen for various
+ * reasons, such as the changes being deemed unnecessary, the issue being resolved in another way,
+ * or the author deciding to withdraw the request.
+ */
+static constexpr const char *kClosed = "closed";
+
+/**
+ * Merged indicates that the change has been successfully integrated into the target codebase.
+ */
+static constexpr const char *kMerged = "merged";
+
+} // namespace VcsChangeStateValues
+
+namespace VcsLineChangeTypeValues
+{
+/**
+ * How many lines were added.
+ */
+static constexpr const char *kAdded = "added";
+
+/**
+ * How many lines were removed.
+ */
+static constexpr const char *kRemoved = "removed";
+
+} // namespace VcsLineChangeTypeValues
+
+namespace VcsRefBaseTypeValues
+{
+/**
+ * branch
+ */
+static constexpr const char *kBranch = "branch";
+
+/**
+ * tag
+ */
+static constexpr const char *kTag = "tag";
+
+} // namespace VcsRefBaseTypeValues
+
+namespace VcsRefHeadTypeValues
+{
+/**
+ * branch
+ */
+static constexpr const char *kBranch = "branch";
+
+/**
+ * tag
+ */
+static constexpr const char *kTag = "tag";
+
+} // namespace VcsRefHeadTypeValues
+
+namespace VcsRefTypeValues
+{
+/**
+ * branch
+ */
+static constexpr const char *kBranch = "branch";
+
+/**
+ * tag
+ */
+static constexpr const char *kTag = "tag";
+
+} // namespace VcsRefTypeValues
+
namespace VcsRepositoryRefTypeValues
{
/**
@@ -81,6 +265,20 @@ static constexpr const char *kTag = "tag";
} // namespace VcsRepositoryRefTypeValues
+namespace VcsRevisionDeltaDirectionValues
+{
+/**
+ * How many revisions the change is behind the target ref.
+ */
+static constexpr const char *kBehind = "behind";
+
+/**
+ * How many revisions the change is ahead of the target ref.
+ */
+static constexpr const char *kAhead = "ahead";
+
+} // namespace VcsRevisionDeltaDirectionValues
+
} // namespace vcs
} // namespace semconv
OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/vcs_metrics.h b/api/include/opentelemetry/semconv/incubating/vcs_metrics.h
new file mode 100644
index 0000000000..ef5749fabe
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/vcs_metrics.h
@@ -0,0 +1,394 @@
+/*
+ * 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 vcs
+{
+
+/**
+ * The number of changes (pull requests/merge requests/changelists) in a repository, categorized by
+ * their state (e.g. open or merged) updowncounter
+ */
+static constexpr const char *kMetricVcsChangeCount = "metric.vcs.change.count";
+static constexpr const char *descrMetricVcsChangeCount =
+ "The number of changes (pull requests/merge requests/changelists) in a repository, categorized "
+ "by their state (e.g. open or merged)";
+static constexpr const char *unitMetricVcsChangeCount = "{change}";
+
+static inline nostd::unique_ptr
+ * gauge
+ */
+static constexpr const char *kMetricVcsChangeDuration = "metric.vcs.change.duration";
+static constexpr const char *descrMetricVcsChangeDuration =
+ "The time duration a change (pull request/merge request/changelist) has been in a given state.";
+static constexpr const char *unitMetricVcsChangeDuration = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr gauge
+ */
+static constexpr const char *kMetricVcsChangeTimeToApproval = "metric.vcs.change.time_to_approval";
+static constexpr const char *descrMetricVcsChangeTimeToApproval =
+ "The amount of time since its creation it took a change (pull request/merge "
+ "request/changelist) to get the first approval";
+static constexpr const char *unitMetricVcsChangeTimeToApproval = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr
+ * gauge
+ */
+static constexpr const char *kMetricVcsContributorCount = "metric.vcs.contributor.count";
+static constexpr const char *descrMetricVcsContributorCount =
+ "The number of unique contributors to a repository";
+static constexpr const char *unitMetricVcsContributorCount = "{contributor}";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricVcsRefCount = "metric.vcs.ref.count";
+static constexpr const char *descrMetricVcsRefCount =
+ "The number of refs of type branch or tag in a repository";
+static constexpr const char *unitMetricVcsRefCount = "{ref}";
+
+static inline nostd::unique_ptr This metric should be reported for each @code
+ * vcs.line_change.type @endcode value. For example if a ref added 3 lines and removed 2 lines,
+ * instrumentation SHOULD report two measurements: 3 and 2 (both positive numbers).
+ * If number of lines added/removed should be calculated from the start of time, then @code
+ * vcs.ref.base.name @endcode SHOULD be set to an empty string. gauge
+ */
+static constexpr const char *kMetricVcsRefLinesDelta = "metric.vcs.ref.lines_delta";
+static constexpr const char *descrMetricVcsRefLinesDelta =
+ "The number of lines added/removed in a ref (branch) relative to the ref from the "
+ "`vcs.ref.base.name` attribute";
+static constexpr const char *unitMetricVcsRefLinesDelta = "{line}";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr This metric should be reported for each @code
+ * vcs.revision_delta.direction @endcode value. For example if branch @code a @endcode is 3 commits
+ * behind and 2 commits ahead of @code trunk @endcode, instrumentation SHOULD report two
+ * measurements: 3 and 2 (both positive numbers) and @code vcs.ref.base.name @endcode is set to
+ * @code trunk @endcode. gauge
+ */
+static constexpr const char *kMetricVcsRefRevisionsDelta = "metric.vcs.ref.revisions_delta";
+static constexpr const char *descrMetricVcsRefRevisionsDelta =
+ "The number of revisions (commits) a ref (branch) is ahead/behind the branch from the "
+ "`vcs.ref.base.name` attribute";
+static constexpr const char *unitMetricVcsRefRevisionsDelta = "{revision}";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr gauge
+ */
+static constexpr const char *kMetricVcsRefTime = "metric.vcs.ref.time";
+static constexpr const char *descrMetricVcsRefTime =
+ "Time a ref (branch) created from the default branch (trunk) has existed. The `ref.type` "
+ "attribute will always be `branch`";
+static constexpr const char *unitMetricVcsRefTime = "s";
+
+#if OPENTELEMETRY_ABI_VERSION_NO >= 2
+
+static inline nostd::unique_ptr
+ * updowncounter
+ */
+static constexpr const char *kMetricVcsRepositoryCount = "metric.vcs.repository.count";
+static constexpr const char *descrMetricVcsRepositoryCount =
+ "The number of repositories in an organization";
+static constexpr const char *unitMetricVcsRepositoryCount = "{repository}";
+
+static inline nostd::unique_ptr The value SHOULD be normalized to lowercase.
*/
static constexpr const char *kNetworkProtocolName = "network.protocol.name";
@@ -56,7 +61,7 @@ static constexpr const char *kNetworkProtocolName = "network.protocol.name";
static constexpr const char *kNetworkProtocolVersion = "network.protocol.version";
/**
- * OSI transport layer or OSI transport layer or inter-process communication
* method. The value SHOULD be normalized to lowercase. Consider always setting the
* transport when setting a port number, since a port number is ambiguous without knowing the
@@ -66,7 +71,7 @@ static constexpr const char *kNetworkProtocolVersion = "network.protocol.version
static constexpr const char *kNetworkTransport = "network.transport";
/**
- * OSI network layer or non-OSI equivalent.
+ * OSI network layer or non-OSI equivalent.
*
* The value SHOULD be normalized to lowercase.
*/
diff --git a/api/include/opentelemetry/semconv/schema_url.h b/api/include/opentelemetry/semconv/schema_url.h
index a25e28b5ea..ca35597ba4 100644
--- a/api/include/opentelemetry/semconv/schema_url.h
+++ b/api/include/opentelemetry/semconv/schema_url.h
@@ -19,6 +19,6 @@ namespace semconv
/**
* The URL of the OpenTelemetry schema for these keys and values.
*/
-static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.28.0";
+static constexpr const char *kSchemaUrl = "https://opentelemetry.io/schemas/1.29.0";
} // namespace semconv
OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/url_attributes.h b/api/include/opentelemetry/semconv/url_attributes.h
index 25ed5b03ab..9a9c2bb671 100644
--- a/api/include/opentelemetry/semconv/url_attributes.h
+++ b/api/include/opentelemetry/semconv/url_attributes.h
@@ -28,14 +28,33 @@ static constexpr const char *kUrlFragment = "url.fragment";
* Absolute URL describing a network resource according to RFC3986 For network calls, URL usually has
* @code scheme://host[:port][path][?query][#fragment] @endcode format, where the fragment is not
- * transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.
+ * transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.
* @code url.full @endcode MUST NOT contain credentials passed via URL in form of @code
* https://username:password@www.example.com/ @endcode. In such case username and password SHOULD be
* redacted and attribute's value SHOULD be @code https://REDACTED:REDACTED@www.example.com/
- * @endcode.
+ * @endcode.
* @code url.full @endcode SHOULD capture the absolute URL when it is available (or can be
- * reconstructed). Sensitive content provided in @code url.full @endcode SHOULD be scrubbed when
- * instrumentations can identify it.
+ * reconstructed). Sensitive content provided in @code url.full @endcode SHOULD be scrubbed when
+ * instrumentations can identify it.
+ *
+ * Query string values for the following keys SHOULD be redacted by default and replaced by the
+ * value @code REDACTED @endcode:
+ *
+ *
+ * When a query string value is redacted, the query string key SHOULD still be preserved, e.g.
+ * @code https://www.example.com/path?color=blue&sig=REDACTED @endcode.
*/
static constexpr const char *kUrlFull = "url.full";
@@ -51,7 +70,23 @@ static constexpr const char *kUrlPath = "url.path";
* The URI query component
*
* Sensitive content provided in @code url.query @endcode SHOULD be scrubbed when instrumentations
- * can identify it.
+ * can identify it.
+ *
+ * Query string values for the following keys SHOULD be redacted by default and replaced by the
+ * value @code REDACTED @endcode:
+ * When a query string value is redacted, the query string key SHOULD still be preserved, e.g.
+ * @code q=OpenTelemetry&sig=REDACTED @endcode.
*/
static constexpr const char *kUrlQuery = "url.query";
diff --git a/buildscripts/semantic-convention/generate.sh b/buildscripts/semantic-convention/generate.sh
index b6fecb4459..ac9023d188 100755
--- a/buildscripts/semantic-convention/generate.sh
+++ b/buildscripts/semantic-convention/generate.sh
@@ -16,7 +16,7 @@ ROOT_DIR="${SCRIPT_DIR}/../../"
# freeze the spec & generator tools versions to make the generation reproducible
# repository: https://github.com/open-telemetry/semantic-conventions
-SEMCONV_VERSION=1.28.0
+SEMCONV_VERSION=1.29.0
# repository: https://github.com/open-telemetry/weaver
WEAVER_VERSION=0.10.0
+ *
+ * This list is subject to change over time.
+ *
+ * This list is subject to change over time.
+ *
+ *
+ * This list is subject to change over time.
+ *
+ * This list is subject to change over time.
+ *