diff --git a/api/include/opentelemetry/semconv/http_metrics.h b/api/include/opentelemetry/semconv/http_metrics.h
new file mode 100644
index 0000000000..ab698d3984
--- /dev/null
+++ b/api/include/opentelemetry/semconv/http_metrics.h
@@ -0,0 +1,78 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricHttpClientRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpClientRequestDuration,
+ descrMetricHttpClientRequestDuration,
+ unitMetricHttpClientRequestDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpClientRequestDuration,
+ descrMetricHttpClientRequestDuration,
+ unitMetricHttpClientRequestDuration);
+}
+
+/**
+ * Duration of HTTP server requests.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpServerRequestDuration,
+ descrMetricHttpServerRequestDuration,
+ unitMetricHttpServerRequestDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpServerRequestDuration,
+ descrMetricHttpServerRequestDuration,
+ unitMetricHttpServerRequestDuration);
+}
+
+} // namespace http
+} // 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..450d334926
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/container_metrics.h
@@ -0,0 +1,124 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricContainerCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+static nostd::shared_ptr CreateAsyncMetricContainerCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricContainerCpuTime, descrMetricContainerCpuTime,
+ unitMetricContainerCpuTime);
+}
+
+/**
+ * Disk bytes for the container.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricContainerDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+static nostd::shared_ptr CreateAsyncMetricContainerDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricContainerDiskIo, descrMetricContainerDiskIo,
+ unitMetricContainerDiskIo);
+}
+
+/**
+ * Memory usage of the container.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricContainerMemoryUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage,
+ unitMetricContainerMemoryUsage);
+}
+
+static nostd::shared_ptr CreateAsyncMetricContainerMemoryUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(
+ kMetricContainerMemoryUsage, descrMetricContainerMemoryUsage, unitMetricContainerMemoryUsage);
+}
+
+/**
+ * Network bytes for the container.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricContainerNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricContainerNetworkIo, descrMetricContainerNetworkIo,
+ unitMetricContainerNetworkIo);
+}
+
+static nostd::shared_ptr CreateAsyncMetricContainerNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(
+ kMetricContainerNetworkIo, descrMetricContainerNetworkIo, unitMetricContainerNetworkIo);
+}
+
+} // namespace container
+} // 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..a2bda6b9c3
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/db_metrics.h
@@ -0,0 +1,574 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionCount,
+ descrMetricDbClientConnectionCount,
+ unitMetricDbClientConnectionCount);
+}
+
+/**
+ * The time it took to create a new connection
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionCreateTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionCreateTime,
+ descrMetricDbClientConnectionCreateTime,
+ unitMetricDbClientConnectionCreateTime);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionCreateTime(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionCreateTime,
+ descrMetricDbClientConnectionCreateTime,
+ unitMetricDbClientConnectionCreateTime);
+}
+
+/**
+ * The maximum number of idle open connections allowed
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionIdleMax(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionIdleMax(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionIdleMax,
+ descrMetricDbClientConnectionIdleMax,
+ unitMetricDbClientConnectionIdleMax);
+}
+
+/**
+ * The minimum number of idle open connections allowed
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionIdleMin(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionIdleMin(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionIdleMin,
+ descrMetricDbClientConnectionIdleMin,
+ unitMetricDbClientConnectionIdleMin);
+}
+
+/**
+ * The maximum number of open connections allowed
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionMax(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionMax(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionMax,
+ descrMetricDbClientConnectionMax,
+ unitMetricDbClientConnectionMax);
+}
+
+/**
+ * The number of pending requests for an open connection, cumulative for the entire pool
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionPendingRequests(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionPendingRequests,
+ descrMetricDbClientConnectionPendingRequests,
+ unitMetricDbClientConnectionPendingRequests);
+}
+
+/**
+ * The number of connection timeouts that have occurred trying to obtain a connection from the pool
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricDbClientConnectionTimeouts,
+ descrMetricDbClientConnectionTimeouts,
+ unitMetricDbClientConnectionTimeouts);
+}
+
+/**
+ * The time between borrowing a connection and returning it to the pool
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionUseTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionUseTime,
+ descrMetricDbClientConnectionUseTime,
+ unitMetricDbClientConnectionUseTime);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionUseTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionUseTime,
+ descrMetricDbClientConnectionUseTime,
+ unitMetricDbClientConnectionUseTime);
+}
+
+/**
+ * The time it took to obtain an open connection from the pool
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientConnectionWaitTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionWaitTime,
+ descrMetricDbClientConnectionWaitTime,
+ unitMetricDbClientConnectionWaitTime);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientConnectionWaitTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionWaitTime,
+ descrMetricDbClientConnectionWaitTime,
+ unitMetricDbClientConnectionWaitTime);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.create_time @endcode instead. Note: the unit also
+ * changed from @code ms @endcode to @code s @endcode.
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsCreateTimeDeprecated =
+ "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+static constexpr const char *unitMetricDbClientConnectionsCreateTimeDeprecated = "ms";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsCreateTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsCreateTimeDeprecated,
+ descrMetricDbClientConnectionsCreateTimeDeprecated,
+ unitMetricDbClientConnectionsCreateTimeDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsCreateTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionsCreateTimeDeprecated,
+ descrMetricDbClientConnectionsCreateTimeDeprecated,
+ unitMetricDbClientConnectionsCreateTimeDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.idle.max @endcode instead.
+ *
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsIdleMaxDeprecated =
+ "Deprecated, use `db.client.connection.idle.max` instead.";
+static constexpr const char *unitMetricDbClientConnectionsIdleMaxDeprecated = "{connection}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsIdleMaxDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsIdleMaxDeprecated,
+ descrMetricDbClientConnectionsIdleMaxDeprecated,
+ unitMetricDbClientConnectionsIdleMaxDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsIdleMaxDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsIdleMaxDeprecated,
+ descrMetricDbClientConnectionsIdleMaxDeprecated,
+ unitMetricDbClientConnectionsIdleMaxDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.idle.min @endcode instead.
+ *
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsIdleMinDeprecated =
+ "Deprecated, use `db.client.connection.idle.min` instead.";
+static constexpr const char *unitMetricDbClientConnectionsIdleMinDeprecated = "{connection}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsIdleMinDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsIdleMinDeprecated,
+ descrMetricDbClientConnectionsIdleMinDeprecated,
+ unitMetricDbClientConnectionsIdleMinDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsIdleMinDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsIdleMinDeprecated,
+ descrMetricDbClientConnectionsIdleMinDeprecated,
+ unitMetricDbClientConnectionsIdleMinDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.max @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.client.connection.max @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsMaxDeprecated =
+ "metric.db.client.connections.max.deprecated";
+static constexpr const char *descrMetricDbClientConnectionsMaxDeprecated =
+ "Deprecated, use `db.client.connection.max` instead.";
+static constexpr const char *unitMetricDbClientConnectionsMaxDeprecated = "{connection}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsMaxDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsMaxDeprecated,
+ descrMetricDbClientConnectionsMaxDeprecated,
+ unitMetricDbClientConnectionsMaxDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsMaxDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsMaxDeprecated,
+ descrMetricDbClientConnectionsMaxDeprecated,
+ unitMetricDbClientConnectionsMaxDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.pending_requests @endcode instead.
+ *
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsPendingRequestsDeprecated =
+ "Deprecated, use `db.client.connection.pending_requests` instead.";
+static constexpr const char *unitMetricDbClientConnectionsPendingRequestsDeprecated = "{request}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsPendingRequestsDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsPendingRequestsDeprecated,
+ descrMetricDbClientConnectionsPendingRequestsDeprecated,
+ unitMetricDbClientConnectionsPendingRequestsDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsPendingRequestsDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricDbClientConnectionsPendingRequestsDeprecated,
+ descrMetricDbClientConnectionsPendingRequestsDeprecated,
+ unitMetricDbClientConnectionsPendingRequestsDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.timeouts @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.client.connection.timeouts @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsTimeoutsDeprecated =
+ "metric.db.client.connections.timeouts.deprecated";
+static constexpr const char *descrMetricDbClientConnectionsTimeoutsDeprecated =
+ "Deprecated, use `db.client.connection.timeouts` instead.";
+static constexpr const char *unitMetricDbClientConnectionsTimeoutsDeprecated = "{timeout}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsTimeoutsDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricDbClientConnectionsTimeoutsDeprecated,
+ descrMetricDbClientConnectionsTimeoutsDeprecated,
+ unitMetricDbClientConnectionsTimeoutsDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsTimeoutsDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricDbClientConnectionsTimeoutsDeprecated,
+ descrMetricDbClientConnectionsTimeoutsDeprecated,
+ unitMetricDbClientConnectionsTimeoutsDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.count @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code db.client.connection.count @endcode.
+ *
+ * updowncounter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricDbClientConnectionsCountDeprecated =
+ "metric.db.client.connections.count.deprecated";
+static constexpr const char *descrMetricDbClientConnectionsCountDeprecated =
+ "Deprecated, use `db.client.connection.count` instead.";
+static constexpr const char *unitMetricDbClientConnectionsCountDeprecated = "{connection}";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsCountDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricDbClientConnectionsCountDeprecated,
+ descrMetricDbClientConnectionsCountDeprecated,
+ unitMetricDbClientConnectionsCountDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsCountDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricDbClientConnectionsCountDeprecated,
+ descrMetricDbClientConnectionsCountDeprecated,
+ unitMetricDbClientConnectionsCountDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.use_time @endcode instead. Note: the unit also changed
+ * from @code ms @endcode to @code s @endcode.
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsUseTimeDeprecated =
+ "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+static constexpr const char *unitMetricDbClientConnectionsUseTimeDeprecated = "ms";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsUseTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsUseTimeDeprecated,
+ descrMetricDbClientConnectionsUseTimeDeprecated,
+ unitMetricDbClientConnectionsUseTimeDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsUseTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionsUseTimeDeprecated,
+ descrMetricDbClientConnectionsUseTimeDeprecated,
+ unitMetricDbClientConnectionsUseTimeDeprecated);
+}
+
+/**
+ * Deprecated, use @code db.client.connection.wait_time @endcode instead. Note: the unit also
+ * changed from @code ms @endcode to @code s @endcode.
+ * @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";
+static constexpr const char *descrMetricDbClientConnectionsWaitTimeDeprecated =
+ "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from "
+ "`ms` to `s`.";
+static constexpr const char *unitMetricDbClientConnectionsWaitTimeDeprecated = "ms";
+
+static nostd::unique_ptr>
+CreateSyncMetricDbClientConnectionsWaitTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientConnectionsWaitTimeDeprecated,
+ descrMetricDbClientConnectionsWaitTimeDeprecated,
+ unitMetricDbClientConnectionsWaitTimeDeprecated);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricDbClientConnectionsWaitTimeDeprecated(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientConnectionsWaitTimeDeprecated,
+ descrMetricDbClientConnectionsWaitTimeDeprecated,
+ unitMetricDbClientConnectionsWaitTimeDeprecated);
+}
+
+/**
+ * Duration of database client operations.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricDbClientOperationDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDbClientOperationDuration,
+ descrMetricDbClientOperationDuration,
+ unitMetricDbClientOperationDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDbClientOperationDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricDbClientOperationDuration,
+ descrMetricDbClientOperationDuration,
+ unitMetricDbClientOperationDuration);
+}
+
+} // namespace db
+} // 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..abd9513a0c
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/dns_metrics.h
@@ -0,0 +1,48 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricDnsLookupDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricDnsLookupDuration, descrMetricDnsLookupDuration,
+ unitMetricDnsLookupDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricDnsLookupDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricDnsLookupDuration, descrMetricDnsLookupDuration, unitMetricDnsLookupDuration);
+}
+
+} // namespace dns
+} // 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..fcfdfad251
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/faas_metrics.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_metrics-h.j2
+ */
+
+#pragma once
+
+#include "opentelemetry/common/macros.h"
+#include "opentelemetry/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace faas
+{
+
+/**
+ * Number of invocation cold starts
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasColdstarts(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasColdstarts(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasColdstarts, descrMetricFaasColdstarts,
+ unitMetricFaasColdstarts);
+}
+
+/**
+ * Distribution of CPU usage per invocation
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasCpuUsage, descrMetricFaasCpuUsage,
+ unitMetricFaasCpuUsage);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasCpuUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricFaasCpuUsage, descrMetricFaasCpuUsage,
+ unitMetricFaasCpuUsage);
+}
+
+/**
+ * Number of invocation errors
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasErrors, descrMetricFaasErrors, unitMetricFaasErrors);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasErrors(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasErrors, descrMetricFaasErrors,
+ unitMetricFaasErrors);
+}
+
+/**
+ * Measures the duration of the function's initialization, such as a cold start
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasInitDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasInitDuration, descrMetricFaasInitDuration,
+ unitMetricFaasInitDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasInitDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricFaasInitDuration, descrMetricFaasInitDuration,
+ unitMetricFaasInitDuration);
+}
+
+/**
+ * Number of successful invocations
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasInvocations(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasInvocations(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasInvocations, descrMetricFaasInvocations,
+ unitMetricFaasInvocations);
+}
+
+/**
+ * Measures the duration of the function's logic execution
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasInvokeDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasInvokeDuration, descrMetricFaasInvokeDuration,
+ unitMetricFaasInvokeDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasInvokeDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricFaasInvokeDuration, descrMetricFaasInvokeDuration, unitMetricFaasInvokeDuration);
+}
+
+/**
+ * Distribution of max memory usage per invocation
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasMemUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasMemUsage, descrMetricFaasMemUsage,
+ unitMetricFaasMemUsage);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasMemUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricFaasMemUsage, descrMetricFaasMemUsage,
+ unitMetricFaasMemUsage);
+}
+
+/**
+ * Distribution of net I/O usage per invocation
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasNetIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricFaasNetIo, descrMetricFaasNetIo, unitMetricFaasNetIo);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasNetIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricFaasNetIo, descrMetricFaasNetIo,
+ unitMetricFaasNetIo);
+}
+
+/**
+ * Number of invocation timeouts
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+static nostd::shared_ptr CreateAsyncMetricFaasTimeouts(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricFaasTimeouts, descrMetricFaasTimeouts,
+ unitMetricFaasTimeouts);
+}
+
+} // namespace faas
+} // 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..48db5b7351
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/gen_ai_metrics.h
@@ -0,0 +1,157 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricGenAiClientOperationDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiClientOperationDuration,
+ descrMetricGenAiClientOperationDuration,
+ unitMetricGenAiClientOperationDuration);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricGenAiClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricGenAiClientOperationDuration,
+ descrMetricGenAiClientOperationDuration,
+ unitMetricGenAiClientOperationDuration);
+}
+
+/**
+ * Measures number of input and output tokens used
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricGenAiClientTokenUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiClientTokenUsage,
+ descrMetricGenAiClientTokenUsage,
+ unitMetricGenAiClientTokenUsage);
+}
+
+static nostd::shared_ptr CreateAsyncMetricGenAiClientTokenUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricGenAiClientTokenUsage,
+ descrMetricGenAiClientTokenUsage,
+ unitMetricGenAiClientTokenUsage);
+}
+
+/**
+ * Generative AI server request duration such as time-to-last byte or last output token
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricGenAiServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerRequestDuration,
+ descrMetricGenAiServerRequestDuration,
+ unitMetricGenAiServerRequestDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricGenAiServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricGenAiServerRequestDuration,
+ descrMetricGenAiServerRequestDuration,
+ unitMetricGenAiServerRequestDuration);
+}
+
+/**
+ * Time per output token generated after the first token for successful responses
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricGenAiServerTimePerOutputToken(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerTimePerOutputToken,
+ descrMetricGenAiServerTimePerOutputToken,
+ unitMetricGenAiServerTimePerOutputToken);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricGenAiServerTimePerOutputToken(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricGenAiServerTimePerOutputToken,
+ descrMetricGenAiServerTimePerOutputToken,
+ unitMetricGenAiServerTimePerOutputToken);
+}
+
+/**
+ * Time to generate first token for successful responses
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricGenAiServerTimeToFirstToken(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricGenAiServerTimeToFirstToken,
+ descrMetricGenAiServerTimeToFirstToken,
+ unitMetricGenAiServerTimeToFirstToken);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricGenAiServerTimeToFirstToken(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricGenAiServerTimeToFirstToken,
+ descrMetricGenAiServerTimeToFirstToken,
+ unitMetricGenAiServerTimeToFirstToken);
+}
+
+} // namespace gen_ai
+} // 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..a2820feced
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/http_metrics.h
@@ -0,0 +1,304 @@
+/*
+ * 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/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 nostd::unique_ptr> CreateSyncMetricHttpClientActiveRequests(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricHttpClientActiveRequests,
+ descrMetricHttpClientActiveRequests,
+ unitMetricHttpClientActiveRequests);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientActiveRequests(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricHttpClientActiveRequests,
+ descrMetricHttpClientActiveRequests,
+ unitMetricHttpClientActiveRequests);
+}
+
+/**
+ * The duration of the successfully established outbound HTTP connections.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpClientConnectionDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpClientConnectionDuration,
+ descrMetricHttpClientConnectionDuration,
+ unitMetricHttpClientConnectionDuration);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricHttpClientConnectionDuration(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpClientConnectionDuration,
+ descrMetricHttpClientConnectionDuration,
+ unitMetricHttpClientConnectionDuration);
+}
+
+/**
+ * Number of outbound HTTP connections that are currently active or idle on the client.
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricHttpClientOpenConnections(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricHttpClientOpenConnections,
+ descrMetricHttpClientOpenConnections,
+ unitMetricHttpClientOpenConnections);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientOpenConnections(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricHttpClientOpenConnections,
+ descrMetricHttpClientOpenConnections,
+ unitMetricHttpClientOpenConnections);
+}
+
+/**
+ * Size of HTTP client request bodies.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpClientRequestBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpClientRequestBodySize,
+ descrMetricHttpClientRequestBodySize,
+ unitMetricHttpClientRequestBodySize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientRequestBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpClientRequestBodySize,
+ descrMetricHttpClientRequestBodySize,
+ unitMetricHttpClientRequestBodySize);
+}
+
+/**
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpClientRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpClientRequestDuration,
+ descrMetricHttpClientRequestDuration,
+ unitMetricHttpClientRequestDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpClientRequestDuration,
+ descrMetricHttpClientRequestDuration,
+ unitMetricHttpClientRequestDuration);
+}
+
+/**
+ * Size of HTTP client response bodies.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpClientResponseBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpClientResponseBodySize,
+ descrMetricHttpClientResponseBodySize,
+ unitMetricHttpClientResponseBodySize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpClientResponseBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpClientResponseBodySize,
+ descrMetricHttpClientResponseBodySize,
+ unitMetricHttpClientResponseBodySize);
+}
+
+/**
+ * Number of active HTTP server requests.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpServerActiveRequests(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricHttpServerActiveRequests,
+ descrMetricHttpServerActiveRequests,
+ unitMetricHttpServerActiveRequests);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpServerActiveRequests(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricHttpServerActiveRequests,
+ descrMetricHttpServerActiveRequests,
+ unitMetricHttpServerActiveRequests);
+}
+
+/**
+ * Size of HTTP server request bodies.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpServerRequestBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpServerRequestBodySize,
+ descrMetricHttpServerRequestBodySize,
+ unitMetricHttpServerRequestBodySize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpServerRequestBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpServerRequestBodySize,
+ descrMetricHttpServerRequestBodySize,
+ unitMetricHttpServerRequestBodySize);
+}
+
+/**
+ * Duration of HTTP server requests.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpServerRequestDuration,
+ descrMetricHttpServerRequestDuration,
+ unitMetricHttpServerRequestDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpServerRequestDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpServerRequestDuration,
+ descrMetricHttpServerRequestDuration,
+ unitMetricHttpServerRequestDuration);
+}
+
+/**
+ * Size of HTTP server response bodies.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricHttpServerResponseBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricHttpServerResponseBodySize,
+ descrMetricHttpServerResponseBodySize,
+ unitMetricHttpServerResponseBodySize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricHttpServerResponseBodySize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricHttpServerResponseBodySize,
+ descrMetricHttpServerResponseBodySize,
+ unitMetricHttpServerResponseBodySize);
+}
+
+} // namespace http
+} // 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..3e1b1fe5eb
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/messaging_metrics.h
@@ -0,0 +1,289 @@
+/*
+ * 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/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 nostd::unique_ptr>
+CreateSyncMetricMessagingClientConsumedMessages(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricMessagingClientConsumedMessages,
+ descrMetricMessagingClientConsumedMessages,
+ unitMetricMessagingClientConsumedMessages);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricMessagingClientConsumedMessages(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricMessagingClientConsumedMessages,
+ descrMetricMessagingClientConsumedMessages,
+ unitMetricMessagingClientConsumedMessages);
+}
+
+/**
+ * Duration of messaging operation initiated by a producer or consumer client.
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricMessagingClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricMessagingClientOperationDuration,
+ descrMetricMessagingClientOperationDuration,
+ unitMetricMessagingClientOperationDuration);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricMessagingClientOperationDuration(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricMessagingClientOperationDuration,
+ descrMetricMessagingClientOperationDuration,
+ unitMetricMessagingClientOperationDuration);
+}
+
+/**
+ * Number of messages producer attempted to publish to the broker.
+ *
+ * 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 nostd::unique_ptr>
+CreateSyncMetricMessagingClientPublishedMessages(metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricMessagingClientPublishedMessages,
+ descrMetricMessagingClientPublishedMessages,
+ unitMetricMessagingClientPublishedMessages);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricMessagingClientPublishedMessages(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricMessagingClientPublishedMessages,
+ descrMetricMessagingClientPublishedMessages,
+ unitMetricMessagingClientPublishedMessages);
+}
+
+/**
+ * Duration of processing operation.
+ *
+ * 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 nostd::unique_ptr> CreateSyncMetricMessagingProcessDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricMessagingProcessDuration,
+ descrMetricMessagingProcessDuration,
+ unitMetricMessagingProcessDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingProcessDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricMessagingProcessDuration,
+ descrMetricMessagingProcessDuration,
+ unitMetricMessagingProcessDuration);
+}
+
+/**
+ * Deprecated. Use @code messaging.client.consumed.messages @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.consumed.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingProcessMessages = "metric.messaging.process.messages";
+static constexpr const char *descrMetricMessagingProcessMessages =
+ "Deprecated. Use `messaging.client.consumed.messages` instead.";
+static constexpr const char *unitMetricMessagingProcessMessages = "{message}";
+
+static nostd::unique_ptr> CreateSyncMetricMessagingProcessMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricMessagingProcessMessages,
+ descrMetricMessagingProcessMessages,
+ unitMetricMessagingProcessMessages);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingProcessMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricMessagingProcessMessages,
+ descrMetricMessagingProcessMessages,
+ unitMetricMessagingProcessMessages);
+}
+
+/**
+ * Deprecated. Use @code messaging.client.operation.duration @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.operation.duration @endcode.
+ *
+ * histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingPublishDuration = "metric.messaging.publish.duration";
+static constexpr const char *descrMetricMessagingPublishDuration =
+ "Deprecated. Use `messaging.client.operation.duration` instead.";
+static constexpr const char *unitMetricMessagingPublishDuration = "s";
+
+static nostd::unique_ptr> CreateSyncMetricMessagingPublishDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricMessagingPublishDuration,
+ descrMetricMessagingPublishDuration,
+ unitMetricMessagingPublishDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingPublishDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricMessagingPublishDuration,
+ descrMetricMessagingPublishDuration,
+ unitMetricMessagingPublishDuration);
+}
+
+/**
+ * Deprecated. Use @code messaging.client.produced.messages @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.produced.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingPublishMessages = "metric.messaging.publish.messages";
+static constexpr const char *descrMetricMessagingPublishMessages =
+ "Deprecated. Use `messaging.client.produced.messages` instead.";
+static constexpr const char *unitMetricMessagingPublishMessages = "{message}";
+
+static nostd::unique_ptr> CreateSyncMetricMessagingPublishMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricMessagingPublishMessages,
+ descrMetricMessagingPublishMessages,
+ unitMetricMessagingPublishMessages);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingPublishMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricMessagingPublishMessages,
+ descrMetricMessagingPublishMessages,
+ unitMetricMessagingPublishMessages);
+}
+
+/**
+ * Deprecated. Use @code messaging.client.operation.duration @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.operation.duration @endcode.
+ *
+ * histogram
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingReceiveDuration = "metric.messaging.receive.duration";
+static constexpr const char *descrMetricMessagingReceiveDuration =
+ "Deprecated. Use `messaging.client.operation.duration` instead.";
+static constexpr const char *unitMetricMessagingReceiveDuration = "s";
+
+static nostd::unique_ptr> CreateSyncMetricMessagingReceiveDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricMessagingReceiveDuration,
+ descrMetricMessagingReceiveDuration,
+ unitMetricMessagingReceiveDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingReceiveDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricMessagingReceiveDuration,
+ descrMetricMessagingReceiveDuration,
+ unitMetricMessagingReceiveDuration);
+}
+
+/**
+ * Deprecated. Use @code messaging.client.consumed.messages @endcode instead.
+ *
+ * @deprecated
+ * Replaced by @code messaging.client.consumed.messages @endcode.
+ *
+ * counter
+ */
+OPENTELEMETRY_DEPRECATED
+static constexpr const char *kMetricMessagingReceiveMessages = "metric.messaging.receive.messages";
+static constexpr const char *descrMetricMessagingReceiveMessages =
+ "Deprecated. Use `messaging.client.consumed.messages` instead.";
+static constexpr const char *unitMetricMessagingReceiveMessages = "{message}";
+
+static nostd::unique_ptr> CreateSyncMetricMessagingReceiveMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricMessagingReceiveMessages,
+ descrMetricMessagingReceiveMessages,
+ unitMetricMessagingReceiveMessages);
+}
+
+static nostd::shared_ptr CreateAsyncMetricMessagingReceiveMessages(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricMessagingReceiveMessages,
+ descrMetricMessagingReceiveMessages,
+ unitMetricMessagingReceiveMessages);
+}
+
+} // namespace messaging
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/process_metrics.h b/api/include/opentelemetry/semconv/incubating/process_metrics.h
new file mode 100644
index 0000000000..2ee736ed27
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/process_metrics.h
@@ -0,0 +1,267 @@
+/*
+ * 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/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace process
+{
+
+/**
+ * Number of times the process has been context switched.
+ *
+ * counter
+ */
+static constexpr const char *kMetricProcessContextSwitches = "metric.process.context_switches";
+static constexpr const char *descrMetricProcessContextSwitches =
+ "Number of times the process has been context switched.";
+static constexpr const char *unitMetricProcessContextSwitches = "{count}";
+
+static nostd::unique_ptr> CreateSyncMetricProcessContextSwitches(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricProcessContextSwitches,
+ descrMetricProcessContextSwitches,
+ unitMetricProcessContextSwitches);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessContextSwitches(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricProcessContextSwitches,
+ descrMetricProcessContextSwitches,
+ unitMetricProcessContextSwitches);
+}
+
+/**
+ * Total CPU seconds broken down by different states.
+ *
+ * counter
+ */
+static constexpr const char *kMetricProcessCpuTime = "metric.process.cpu.time";
+static constexpr const char *descrMetricProcessCpuTime =
+ "Total CPU seconds broken down by different states.";
+static constexpr const char *unitMetricProcessCpuTime = "s";
+
+static nostd::unique_ptr> CreateSyncMetricProcessCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricProcessCpuTime, descrMetricProcessCpuTime,
+ unitMetricProcessCpuTime);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricProcessCpuTime, descrMetricProcessCpuTime,
+ unitMetricProcessCpuTime);
+}
+
+/**
+ * Difference in process.cpu.time since the last measurement, divided by the elapsed time and number
+ * of CPUs available to the process. gauge
+ */
+static constexpr const char *kMetricProcessCpuUtilization = "metric.process.cpu.utilization";
+static constexpr const char *descrMetricProcessCpuUtilization =
+ "Difference in process.cpu.time since the last measurement, divided by the elapsed time and "
+ "number of CPUs available to the process.";
+static constexpr const char *unitMetricProcessCpuUtilization = "1";
+
+static nostd::unique_ptr> CreateSyncMetricProcessCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Gauge(kMetricProcessCpuUtilization, descrMetricProcessCpuUtilization,
+ unitMetricProcessCpuUtilization);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricProcessCpuUtilization,
+ descrMetricProcessCpuUtilization,
+ unitMetricProcessCpuUtilization);
+}
+
+/**
+ * Disk bytes transferred.
+ *
+ * counter
+ */
+static constexpr const char *kMetricProcessDiskIo = "metric.process.disk.io";
+static constexpr const char *descrMetricProcessDiskIo = "Disk bytes transferred.";
+static constexpr const char *unitMetricProcessDiskIo = "By";
+
+static nostd::unique_ptr> CreateSyncMetricProcessDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricProcessDiskIo, descrMetricProcessDiskIo,
+ unitMetricProcessDiskIo);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricProcessDiskIo, descrMetricProcessDiskIo,
+ unitMetricProcessDiskIo);
+}
+
+/**
+ * The amount of physical memory in use.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricProcessMemoryUsage = "metric.process.memory.usage";
+static constexpr const char *descrMetricProcessMemoryUsage =
+ "The amount of physical memory in use.";
+static constexpr const char *unitMetricProcessMemoryUsage = "By";
+
+static nostd::unique_ptr> CreateSyncMetricProcessMemoryUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricProcessMemoryUsage, descrMetricProcessMemoryUsage,
+ unitMetricProcessMemoryUsage);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessMemoryUsage(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricProcessMemoryUsage, descrMetricProcessMemoryUsage, unitMetricProcessMemoryUsage);
+}
+
+/**
+ * The amount of committed virtual memory.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricProcessMemoryVirtual = "metric.process.memory.virtual";
+static constexpr const char *descrMetricProcessMemoryVirtual =
+ "The amount of committed virtual memory.";
+static constexpr const char *unitMetricProcessMemoryVirtual = "By";
+
+static nostd::unique_ptr> CreateSyncMetricProcessMemoryVirtual(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(
+ kMetricProcessMemoryVirtual, descrMetricProcessMemoryVirtual, unitMetricProcessMemoryVirtual);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessMemoryVirtual(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricProcessMemoryVirtual, descrMetricProcessMemoryVirtual, unitMetricProcessMemoryVirtual);
+}
+
+/**
+ * Network bytes transferred.
+ *
+ * counter
+ */
+static constexpr const char *kMetricProcessNetworkIo = "metric.process.network.io";
+static constexpr const char *descrMetricProcessNetworkIo = "Network bytes transferred.";
+static constexpr const char *unitMetricProcessNetworkIo = "By";
+
+static nostd::unique_ptr> CreateSyncMetricProcessNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricProcessNetworkIo, descrMetricProcessNetworkIo,
+ unitMetricProcessNetworkIo);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessNetworkIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricProcessNetworkIo, descrMetricProcessNetworkIo,
+ unitMetricProcessNetworkIo);
+}
+
+/**
+ * Number of file descriptors in use by the process.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricProcessOpenFileDescriptorCount =
+ "metric.process.open_file_descriptor.count";
+static constexpr const char *descrMetricProcessOpenFileDescriptorCount =
+ "Number of file descriptors in use by the process.";
+static constexpr const char *unitMetricProcessOpenFileDescriptorCount = "{count}";
+
+static nostd::unique_ptr>
+CreateSyncMetricProcessOpenFileDescriptorCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricProcessOpenFileDescriptorCount,
+ descrMetricProcessOpenFileDescriptorCount,
+ unitMetricProcessOpenFileDescriptorCount);
+}
+
+static nostd::shared_ptr
+CreateAsyncMetricProcessOpenFileDescriptorCount(metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricProcessOpenFileDescriptorCount,
+ descrMetricProcessOpenFileDescriptorCount,
+ unitMetricProcessOpenFileDescriptorCount);
+}
+
+/**
+ * Number of page faults the process has made.
+ *
+ * counter
+ */
+static constexpr const char *kMetricProcessPagingFaults = "metric.process.paging.faults";
+static constexpr const char *descrMetricProcessPagingFaults =
+ "Number of page faults the process has made.";
+static constexpr const char *unitMetricProcessPagingFaults = "{fault}";
+
+static nostd::unique_ptr> CreateSyncMetricProcessPagingFaults(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricProcessPagingFaults, descrMetricProcessPagingFaults,
+ unitMetricProcessPagingFaults);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessPagingFaults(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(
+ kMetricProcessPagingFaults, descrMetricProcessPagingFaults, unitMetricProcessPagingFaults);
+}
+
+/**
+ * Process threads count.
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricProcessThreadCount = "metric.process.thread.count";
+static constexpr const char *descrMetricProcessThreadCount = "Process threads count.";
+static constexpr const char *unitMetricProcessThreadCount = "{thread}";
+
+static nostd::unique_ptr> CreateSyncMetricProcessThreadCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricProcessThreadCount, descrMetricProcessThreadCount,
+ unitMetricProcessThreadCount);
+}
+
+static nostd::shared_ptr CreateAsyncMetricProcessThreadCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(
+ kMetricProcessThreadCount, descrMetricProcessThreadCount, unitMetricProcessThreadCount);
+}
+
+} // namespace process
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/rpc_metrics.h b/api/include/opentelemetry/semconv/incubating/rpc_metrics.h
new file mode 100644
index 0000000000..0fb503694e
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/rpc_metrics.h
@@ -0,0 +1,311 @@
+/*
+ * 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/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace rpc
+{
+
+/**
+ * Measures the duration of outbound RPC.
+ *
+ * While streaming RPCs may record this metric as start-of-batch
+ * to end-of-batch, it's hard to interpret in practice.
+ *
+ * Streaming: N/A.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcClientDuration = "metric.rpc.client.duration";
+static constexpr const char *descrMetricRpcClientDuration =
+ "Measures the duration of outbound RPC.";
+static constexpr const char *unitMetricRpcClientDuration = "ms";
+
+static nostd::unique_ptr> CreateSyncMetricRpcClientDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcClientDuration, descrMetricRpcClientDuration,
+ unitMetricRpcClientDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcClientDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricRpcClientDuration, descrMetricRpcClientDuration, unitMetricRpcClientDuration);
+}
+
+/**
+ * Measures the size of RPC request messages (uncompressed).
+ *
+ * Streaming: Recorded per message in a streaming batch
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcClientRequestSize = "metric.rpc.client.request.size";
+static constexpr const char *descrMetricRpcClientRequestSize =
+ "Measures the size of RPC request messages (uncompressed).";
+static constexpr const char *unitMetricRpcClientRequestSize = "By";
+
+static nostd::unique_ptr> CreateSyncMetricRpcClientRequestSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcClientRequestSize, descrMetricRpcClientRequestSize,
+ unitMetricRpcClientRequestSize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcClientRequestSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricRpcClientRequestSize, descrMetricRpcClientRequestSize, unitMetricRpcClientRequestSize);
+}
+
+/**
+ * Measures the number of messages received per RPC.
+ *
+ * Should be 1 for all non-streaming RPCs.
+ *
+ * Streaming: This metric is required for server and client streaming RPCs
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcClientRequestsPerRpc = "metric.rpc.client.requests_per_rpc";
+static constexpr const char *descrMetricRpcClientRequestsPerRpc =
+ "Measures the number of messages received per RPC.";
+static constexpr const char *unitMetricRpcClientRequestsPerRpc = "{count}";
+
+static nostd::unique_ptr> CreateSyncMetricRpcClientRequestsPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcClientRequestsPerRpc,
+ descrMetricRpcClientRequestsPerRpc,
+ unitMetricRpcClientRequestsPerRpc);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcClientRequestsPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcClientRequestsPerRpc,
+ descrMetricRpcClientRequestsPerRpc,
+ unitMetricRpcClientRequestsPerRpc);
+}
+
+/**
+ * Measures the size of RPC response messages (uncompressed).
+ *
+ * Streaming: Recorded per response in a streaming batch
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcClientResponseSize = "metric.rpc.client.response.size";
+static constexpr const char *descrMetricRpcClientResponseSize =
+ "Measures the size of RPC response messages (uncompressed).";
+static constexpr const char *unitMetricRpcClientResponseSize = "By";
+
+static nostd::unique_ptr> CreateSyncMetricRpcClientResponseSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcClientResponseSize,
+ descrMetricRpcClientResponseSize,
+ unitMetricRpcClientResponseSize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcClientResponseSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcClientResponseSize,
+ descrMetricRpcClientResponseSize,
+ unitMetricRpcClientResponseSize);
+}
+
+/**
+ * Measures the number of messages sent per RPC.
+ *
+ * Should be 1 for all non-streaming RPCs.
+ *
+ * Streaming: This metric is required for server and client streaming RPCs
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcClientResponsesPerRpc =
+ "metric.rpc.client.responses_per_rpc";
+static constexpr const char *descrMetricRpcClientResponsesPerRpc =
+ "Measures the number of messages sent per RPC.";
+static constexpr const char *unitMetricRpcClientResponsesPerRpc = "{count}";
+
+static nostd::unique_ptr> CreateSyncMetricRpcClientResponsesPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcClientResponsesPerRpc,
+ descrMetricRpcClientResponsesPerRpc,
+ unitMetricRpcClientResponsesPerRpc);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcClientResponsesPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcClientResponsesPerRpc,
+ descrMetricRpcClientResponsesPerRpc,
+ unitMetricRpcClientResponsesPerRpc);
+}
+
+/**
+ * Measures the duration of inbound RPC.
+ *
+ * While streaming RPCs may record this metric as start-of-batch
+ * to end-of-batch, it's hard to interpret in practice.
+ *
+ * Streaming: N/A.
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcServerDuration = "metric.rpc.server.duration";
+static constexpr const char *descrMetricRpcServerDuration = "Measures the duration of inbound RPC.";
+static constexpr const char *unitMetricRpcServerDuration = "ms";
+
+static nostd::unique_ptr> CreateSyncMetricRpcServerDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcServerDuration, descrMetricRpcServerDuration,
+ unitMetricRpcServerDuration);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcServerDuration(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricRpcServerDuration, descrMetricRpcServerDuration, unitMetricRpcServerDuration);
+}
+
+/**
+ * Measures the size of RPC request messages (uncompressed).
+ *
+ * Streaming: Recorded per message in a streaming batch
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcServerRequestSize = "metric.rpc.server.request.size";
+static constexpr const char *descrMetricRpcServerRequestSize =
+ "Measures the size of RPC request messages (uncompressed).";
+static constexpr const char *unitMetricRpcServerRequestSize = "By";
+
+static nostd::unique_ptr> CreateSyncMetricRpcServerRequestSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcServerRequestSize, descrMetricRpcServerRequestSize,
+ unitMetricRpcServerRequestSize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcServerRequestSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(
+ kMetricRpcServerRequestSize, descrMetricRpcServerRequestSize, unitMetricRpcServerRequestSize);
+}
+
+/**
+ * Measures the number of messages received per RPC.
+ *
+ * Should be 1 for all non-streaming RPCs.
+ *
+ * Streaming : This metric is required for server and client streaming RPCs
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcServerRequestsPerRpc = "metric.rpc.server.requests_per_rpc";
+static constexpr const char *descrMetricRpcServerRequestsPerRpc =
+ "Measures the number of messages received per RPC.";
+static constexpr const char *unitMetricRpcServerRequestsPerRpc = "{count}";
+
+static nostd::unique_ptr> CreateSyncMetricRpcServerRequestsPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcServerRequestsPerRpc,
+ descrMetricRpcServerRequestsPerRpc,
+ unitMetricRpcServerRequestsPerRpc);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcServerRequestsPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcServerRequestsPerRpc,
+ descrMetricRpcServerRequestsPerRpc,
+ unitMetricRpcServerRequestsPerRpc);
+}
+
+/**
+ * Measures the size of RPC response messages (uncompressed).
+ *
+ * Streaming: Recorded per response in a streaming batch
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcServerResponseSize = "metric.rpc.server.response.size";
+static constexpr const char *descrMetricRpcServerResponseSize =
+ "Measures the size of RPC response messages (uncompressed).";
+static constexpr const char *unitMetricRpcServerResponseSize = "By";
+
+static nostd::unique_ptr> CreateSyncMetricRpcServerResponseSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcServerResponseSize,
+ descrMetricRpcServerResponseSize,
+ unitMetricRpcServerResponseSize);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcServerResponseSize(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcServerResponseSize,
+ descrMetricRpcServerResponseSize,
+ unitMetricRpcServerResponseSize);
+}
+
+/**
+ * Measures the number of messages sent per RPC.
+ *
+ * Should be 1 for all non-streaming RPCs.
+ *
+ * Streaming: This metric is required for server and client streaming RPCs
+ *
+ * histogram
+ */
+static constexpr const char *kMetricRpcServerResponsesPerRpc =
+ "metric.rpc.server.responses_per_rpc";
+static constexpr const char *descrMetricRpcServerResponsesPerRpc =
+ "Measures the number of messages sent per RPC.";
+static constexpr const char *unitMetricRpcServerResponsesPerRpc = "{count}";
+
+static nostd::unique_ptr> CreateSyncMetricRpcServerResponsesPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Histogram(kMetricRpcServerResponsesPerRpc,
+ descrMetricRpcServerResponsesPerRpc,
+ unitMetricRpcServerResponsesPerRpc);
+}
+
+static nostd::shared_ptr CreateAsyncMetricRpcServerResponsesPerRpc(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableHistogram(kMetricRpcServerResponsesPerRpc,
+ descrMetricRpcServerResponsesPerRpc,
+ unitMetricRpcServerResponsesPerRpc);
+}
+
+} // namespace rpc
+} // namespace semconv
+OPENTELEMETRY_END_NAMESPACE
diff --git a/api/include/opentelemetry/semconv/incubating/system_metrics.h b/api/include/opentelemetry/semconv/incubating/system_metrics.h
new file mode 100644
index 0000000000..c6f82d35dd
--- /dev/null
+++ b/api/include/opentelemetry/semconv/incubating/system_metrics.h
@@ -0,0 +1,758 @@
+/*
+ * 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/version.h"
+
+OPENTELEMETRY_BEGIN_NAMESPACE
+namespace semconv
+{
+namespace system
+{
+
+/**
+ * Reports the current frequency of the CPU in Hz
+ *
+ * gauge
+ */
+static constexpr const char *kMetricSystemCpuFrequency = "metric.system.cpu.frequency";
+static constexpr const char *descrMetricSystemCpuFrequency =
+ "Reports the current frequency of the CPU in Hz";
+static constexpr const char *unitMetricSystemCpuFrequency = "{Hz}";
+
+static nostd::unique_ptr> CreateSyncMetricSystemCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Gauge(kMetricSystemCpuFrequency, descrMetricSystemCpuFrequency,
+ unitMetricSystemCpuFrequency);
+}
+
+static nostd::shared_ptr CreateAsyncMetricSystemCpuFrequency(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(kMetricSystemCpuFrequency, descrMetricSystemCpuFrequency,
+ unitMetricSystemCpuFrequency);
+}
+
+/**
+ * Reports the number of logical (virtual) processor cores created by the operating system to manage
+ * multitasking updowncounter
+ */
+static constexpr const char *kMetricSystemCpuLogicalCount = "metric.system.cpu.logical.count";
+static constexpr const char *descrMetricSystemCpuLogicalCount =
+ "Reports the number of logical (virtual) processor cores created by the operating system to "
+ "manage multitasking";
+static constexpr const char *unitMetricSystemCpuLogicalCount = "{cpu}";
+
+static nostd::unique_ptr> CreateSyncMetricSystemCpuLogicalCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricSystemCpuLogicalCount,
+ descrMetricSystemCpuLogicalCount,
+ unitMetricSystemCpuLogicalCount);
+}
+
+static nostd::shared_ptr CreateAsyncMetricSystemCpuLogicalCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricSystemCpuLogicalCount,
+ descrMetricSystemCpuLogicalCount,
+ unitMetricSystemCpuLogicalCount);
+}
+
+/**
+ * Reports the number of actual physical processor cores on the hardware
+ *
+ * updowncounter
+ */
+static constexpr const char *kMetricSystemCpuPhysicalCount = "metric.system.cpu.physical.count";
+static constexpr const char *descrMetricSystemCpuPhysicalCount =
+ "Reports the number of actual physical processor cores on the hardware";
+static constexpr const char *unitMetricSystemCpuPhysicalCount = "{cpu}";
+
+static nostd::unique_ptr> CreateSyncMetricSystemCpuPhysicalCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64UpDownCounter(kMetricSystemCpuPhysicalCount,
+ descrMetricSystemCpuPhysicalCount,
+ unitMetricSystemCpuPhysicalCount);
+}
+
+static nostd::shared_ptr CreateAsyncMetricSystemCpuPhysicalCount(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableUpDownCounter(kMetricSystemCpuPhysicalCount,
+ descrMetricSystemCpuPhysicalCount,
+ unitMetricSystemCpuPhysicalCount);
+}
+
+/**
+ * Seconds each logical CPU spent on each mode
+ *
+ * counter
+ */
+static constexpr const char *kMetricSystemCpuTime = "metric.system.cpu.time";
+static constexpr const char *descrMetricSystemCpuTime =
+ "Seconds each logical CPU spent on each mode";
+static constexpr const char *unitMetricSystemCpuTime = "s";
+
+static nostd::unique_ptr> CreateSyncMetricSystemCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricSystemCpuTime, descrMetricSystemCpuTime,
+ unitMetricSystemCpuTime);
+}
+
+static nostd::shared_ptr CreateAsyncMetricSystemCpuTime(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableCounter(kMetricSystemCpuTime, descrMetricSystemCpuTime,
+ unitMetricSystemCpuTime);
+}
+
+/**
+ * Difference in system.cpu.time since the last measurement, divided by the elapsed time and number
+ * of logical CPUs gauge
+ */
+static constexpr const char *kMetricSystemCpuUtilization = "metric.system.cpu.utilization";
+static constexpr const char *descrMetricSystemCpuUtilization =
+ "Difference in system.cpu.time since the last measurement, divided by the elapsed time and "
+ "number of logical CPUs";
+static constexpr const char *unitMetricSystemCpuUtilization = "1";
+
+static nostd::unique_ptr> CreateSyncMetricSystemCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Gauge(kMetricSystemCpuUtilization, descrMetricSystemCpuUtilization,
+ unitMetricSystemCpuUtilization);
+}
+
+static nostd::shared_ptr CreateAsyncMetricSystemCpuUtilization(
+ metrics::Meter *meter)
+{
+ return meter->CreateInt64ObservableGauge(
+ kMetricSystemCpuUtilization, descrMetricSystemCpuUtilization, unitMetricSystemCpuUtilization);
+}
+
+/**
+ * counter
+ */
+static constexpr const char *kMetricSystemDiskIo = "metric.system.disk.io";
+static constexpr const char *descrMetricSystemDiskIo = "";
+static constexpr const char *unitMetricSystemDiskIo = "By";
+
+static nostd::unique_ptr> CreateSyncMetricSystemDiskIo(
+ metrics::Meter *meter)
+{
+ return meter->CreateUInt64Counter(kMetricSystemDiskIo, descrMetricSystemDiskIo,
+ unitMetricSystemDiskIo);
+}
+
+static nostd::shared_ptr