diff --git a/.chloggen/stabilise-cpu-mode.yaml b/.chloggen/stabilise-cpu-mode.yaml
new file mode 100644
index 0000000000..a90f851250
--- /dev/null
+++ b/.chloggen/stabilise-cpu-mode.yaml
@@ -0,0 +1,22 @@
+# Use this changelog template to create an entry for release notes.
+#
+# If your change doesn't affect end users you should instead start
+# your pull request title with [chore] or use the "Skip Changelog" label.
+
+# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
+change_type: enhancement
+
+# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
+component: cpu
+
+# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
+note: Promote `cpu.mode` attribute and its enum members to `release_candidate`
+
+# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
+# The values here must be integers.
+issues: [3694]
+
+# (Optional) One or more lines of additional information to render under the primary note.
+# These lines will be padded with 2 spaces and then inserted directly into the document.
+# Use pipe (|) for multiline entries.
+subtext:
diff --git a/docs/non-normative/groups/system/cpu-metrics-guidelines.md b/docs/non-normative/groups/system/cpu-metrics-guidelines.md
index 0732e3c126..712cc4d36e 100644
--- a/docs/non-normative/groups/system/cpu-metrics-guidelines.md
+++ b/docs/non-normative/groups/system/cpu-metrics-guidelines.md
@@ -13,8 +13,8 @@ metrics across the different areas of the Semantic Conventions.
## Policy
-* **recommended**: `*.cpu.time`
-* **opt-in** (optional): `*.cpu.utilization`, `*.cpu.usage`,
+- **recommended**: `*.cpu.time`
+- **opt-in** (optional): `*.cpu.utilization`, `*.cpu.usage`,
`*.cpu.limit_utilization`, `*.cpu.request_utilization`
## Rationale
@@ -40,16 +40,16 @@ uniquely implemented in other systems like the
## Implementation Guidance
-* SHOULD emit `*.cpu.time` by default for system, process container, and k8s
+- SHOULD emit `*.cpu.time` by default for system, process container, and k8s
resources.
-* SHOULD gate `*.cpu.*utilization` and `*.cpu.usage` metrics behind explicit
+- SHOULD gate `*.cpu.*utilization` and `*.cpu.usage` metrics behind explicit
configuration.
## Backend Guidance
-* SHOULD provide transforms or views to derive utilization/usage from
+- SHOULD provide transforms or views to derive utilization/usage from
`*.cpu.time` when helpful.
-* SHOULD treat `*.cpu.time` as the canonical source of truth across system,
+- SHOULD treat `*.cpu.time` as the canonical source of truth across system,
container, and k8s resources.
## Using CPU Time
@@ -98,8 +98,9 @@ used:
`avg(sum(rate(system.cpu.time{cpu.mode!="idle"}[5m])) by (cpu.logical_number))/(5*60)`
-Note that the above formulas can be ambiguous and hence they are not standardized
-as part of the Semantic Conventions project. They are only provided as examples.
+Note that the above formulas can be ambiguous and hence they are not
+standardized as part of the Semantic Conventions project. They are only provided
+as examples.
Projects like
[Prometheus Node Exporter](https://github.com/prometheus/node_exporter/blob/b959d48df950d5c446660eca3354c26eb997ca44/docs/node-mixin/lib/prom-mixin.libsonnet#L85-L87)
diff --git a/docs/non-normative/groups/system/design-philosophy.md b/docs/non-normative/groups/system/design-philosophy.md
index 2168699399..8ca5782c91 100644
--- a/docs/non-normative/groups/system/design-philosophy.md
+++ b/docs/non-normative/groups/system/design-philosophy.md
@@ -201,11 +201,11 @@ baseline level of knowledge of the concepts being instrumented**. The `brief`
and `note` fields of metrics and attributes should be used to convey information
that is crucial to understanding the instrumentation intention, i.e.:
-* Differences in the same piece of data when it is instrumented on different
+- Differences in the same piece of data when it is instrumented on different
platforms
-* When we recommend calculations be done on particular data rather than
+- When we recommend calculations be done on particular data rather than
surfacing direct values from existing tools
-* When particular names or enum values were chosen when there are common
+- When particular names or enum values were chosen when there are common
alternate terms for the same concept
For root metrics and attributes, we will strive to always have a `brief` field.
@@ -213,13 +213,13 @@ The `brief` field should explain what the metric/attribute is, and if the
explanation of a value is simple (i.e. simply surfacing a value from a common
source like `procfs`) then the explanation of what the value should be can go in
the brief. If the value needs some calculation explanation and justification,
-the information should be moved to the `note` field.
-For enum values, it is often the case that the intention of these values is
-obvious given whatever `brief` was provided for the attribute as a whole. A
-brief can be included in a scenario where we have had to make some choice on the
-value that isn't immediately obvious; the most common scenario is when some
-terminology differs across platforms and we had to choose one term to represent
-all scenarios. In this case, the `brief` can be used to clarify our intention.
+the information should be moved to the `note` field. For enum values, it is
+often the case that the intention of these values is obvious given whatever
+`brief` was provided for the attribute as a whole. A brief can be included in a
+scenario where we have had to make some choice on the value that isn't
+immediately obvious; the most common scenario is when some terminology differs
+across platforms and we had to choose one term to represent all scenarios. In
+this case, the `brief` can be used to clarify our intention.
In cases where information about a concept is required to describe our intention
for instrumentation, all information must come with citations to authoritative
@@ -301,6 +301,11 @@ had OS root namespaces, different sources like `system`, `process`, etc. could
get very tangled within each OS namespace, defeating the intended design
philosophy.
-However, to clarify — when we refer to avoiding OS names at the “root namespace” level, we also mean avoiding them at the area level. The OS name should appear after the area of concern (such as `system.memory.linux.*`), not before it. This ensures that users can first navigate by functional area (e.g. memory, CPU, network) and then, if necessary, drill down into OS-specific variants within that area.
+However, to clarify — when we refer to avoiding OS names at the “root namespace”
+level, we also mean avoiding them at the area level. The OS name should appear
+after the area of concern (such as `system.memory.linux.*`), not before it. This
+ensures that users can first navigate by functional area (e.g. memory, CPU,
+network) and then, if necessary, drill down into OS-specific variants within
+that area.
[use cases doc]: ./use-cases.md
diff --git a/docs/registry/attributes/cpu.md b/docs/registry/attributes/cpu.md
index 3a3b48fa7e..d0dc63a85c 100644
--- a/docs/registry/attributes/cpu.md
+++ b/docs/registry/attributes/cpu.md
@@ -12,7 +12,7 @@ Attributes specific to a cpu instance.
| Key | Stability | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- |
| `cpu.logical_number` |  | int | The logical CPU number [0..n-1] | `1` |
-| `cpu.mode` |  | string | The mode of the CPU | `user`; `system` |
+| `cpu.mode` |  | string | The mode of the CPU | `user`; `system` |
---
@@ -20,10 +20,10 @@ Attributes specific to a cpu instance.
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
diff --git a/docs/runtime/dotnet-metrics.md b/docs/runtime/dotnet-metrics.md
index 1e3371d2b1..2b880032d2 100644
--- a/docs/runtime/dotnet-metrics.md
+++ b/docs/runtime/dotnet-metrics.md
@@ -85,7 +85,7 @@ This metric reports the same values as accessing the corresponding processor tim
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The mode of the CPU | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The mode of the CPU | `user`; `system` |
---
@@ -93,13 +93,13 @@ This metric reports the same values as accessing the corresponding processor tim
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
diff --git a/docs/system/container-metrics.md b/docs/system/container-metrics.md
index 3a43aff317..fdae878d17 100644
--- a/docs/system/container-metrics.md
+++ b/docs/system/container-metrics.md
@@ -69,7 +69,7 @@ This metric is [recommended][MetricRecommended].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Conditionally Required` [1] | string | The CPU mode for this data point. A container's CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels. [2] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Conditionally Required` [1] | string | The CPU mode for this data point. A container's CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels. [2] | `user`; `system` |
**[1] `cpu.mode`:** Required if mode is available, i.e. metrics coming from the Docker Stats API, containerd stats or cAdvisor.
@@ -84,13 +84,13 @@ In pure container environments the CPU's mode is usually available and cpu.mode
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
@@ -115,7 +115,7 @@ This metric is [opt-in][MetricOptIn].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Conditionally Required` [1] | string | The CPU mode for this data point. A container's CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels. [2] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Conditionally Required` [1] | string | The CPU mode for this data point. A container's CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels. [2] | `user`; `system` |
**[1] `cpu.mode`:** Required if mode is available, i.e. metrics coming from the Docker Stats API, containerd stats or cAdvisor.
@@ -127,13 +127,13 @@ This metric is [opt-in][MetricOptIn].
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
diff --git a/docs/system/process-metrics.md b/docs/system/process-metrics.md
index a6721ba19a..54cb5b477e 100644
--- a/docs/system/process-metrics.md
+++ b/docs/system/process-metrics.md
@@ -63,7 +63,7 @@ This metric is [recommended][MetricRecommended].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The CPU mode for this data point. [1] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The CPU mode for this data point. [1] | `user`; `system` |
**[1] `cpu.mode`:** The following values for `cpu.mode` SHOULD be used: `user`, `system`, `wait` Other modes SHOULD NOT be used unless a particular platform mandates a unique set of modes.
@@ -73,13 +73,13 @@ This metric is [recommended][MetricRecommended].
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
@@ -102,7 +102,7 @@ This metric is [opt-in][MetricOptIn].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The CPU mode for this data point. [1] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Required` | string | The CPU mode for this data point. [1] | `user`; `system` |
**[1] `cpu.mode`:** The following values for `cpu.mode` SHOULD be used: `user`, `system`, `wait` Other modes SHOULD NOT be used unless a particular platform mandates a unique set of modes.
@@ -112,13 +112,13 @@ This metric is [opt-in][MetricOptIn].
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
diff --git a/docs/system/system-metrics.md b/docs/system/system-metrics.md
index 25f98395bd..b991b788e8 100644
--- a/docs/system/system-metrics.md
+++ b/docs/system/system-metrics.md
@@ -162,7 +162,7 @@ This metric is [recommended][MetricRecommended].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Recommended` | string | The mode of the CPU [1] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Recommended` | string | The mode of the CPU [1] | `user`; `system` |
| [`cpu.logical_number`](/docs/registry/attributes/cpu.md) |  | `Opt-In` | int | The logical CPU number [0..n-1] | `1` |
**[1] `cpu.mode`:** Following states SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`
@@ -173,13 +173,13 @@ This metric is [recommended][MetricRecommended].
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
@@ -225,7 +225,7 @@ This metric is [opt-in][MetricOptIn].
| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
| --- | --- | --- | --- | --- | --- |
-| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Recommended` | string | The mode of the CPU [1] | `user`; `system` |
+| [`cpu.mode`](/docs/registry/attributes/cpu.md) |  | `Recommended` | string | The mode of the CPU [1] | `user`; `system` |
| [`cpu.logical_number`](/docs/registry/attributes/cpu.md) |  | `Opt-In` | int | The logical CPU number [0..n-1] | `1` |
**[1] `cpu.mode`:** Following modes SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`
@@ -236,13 +236,13 @@ This metric is [opt-in][MetricOptIn].
| Value | Description | Stability |
| --- | --- | --- |
-| `idle` | Idle |  |
-| `interrupt` | Interrupt |  |
-| `iowait` | IO Wait |  |
-| `nice` | Nice |  |
-| `steal` | Steal |  |
-| `system` | System |  |
-| `user` | User |  |
+| `idle` | Idle |  |
+| `interrupt` | Interrupt |  |
+| `iowait` | IO Wait |  |
+| `nice` | Nice |  |
+| `steal` | Steal |  |
+| `system` | System |  |
+| `user` | User |  |
diff --git a/model/cpu/registry.yaml b/model/cpu/registry.yaml
index d459cee6d1..aa9a245fa9 100644
--- a/model/cpu/registry.yaml
+++ b/model/cpu/registry.yaml
@@ -12,39 +12,39 @@ groups:
- id: user
value: 'user'
brief: User
- stability: development
+ stability: release_candidate
- id: system
value: 'system'
brief: System
- stability: development
+ stability: release_candidate
- id: nice
value: 'nice'
brief: Nice
- stability: development
+ stability: release_candidate
- id: idle
value: 'idle'
brief: Idle
- stability: development
+ stability: release_candidate
- id: iowait
value: 'iowait'
brief: IO Wait
- stability: development
+ stability: release_candidate
- id: interrupt
value: 'interrupt'
brief: Interrupt
- stability: development
+ stability: release_candidate
- id: steal
value: 'steal'
brief: Steal
- stability: development
+ stability: release_candidate
- id: kernel
value: 'kernel'
- stability: development
+ stability: release_candidate
brief: "Deprecated. Use `system` instead."
deprecated:
reason: renamed
renamed_to: "system"
- stability: development
+ stability: release_candidate
examples: [ "user", "system" ]
- id: cpu.logical_number
type: int