Skip to content

Commit b819f87

Browse files
[Instrumentation.Process] Remove process.cpu.count
Remove the `process.cpu.count` metric which is not part of the Semantic Conventions.
1 parent 89cc97a commit b819f87

4 files changed

Lines changed: 11 additions & 38 deletions

File tree

src/OpenTelemetry.Instrumentation.Process/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
* Add instrumentation scope version and schema URL to metrics.
66
([#4088](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4088))
77

8+
* Removed the `process.cpu.count` metric as it is not part of
9+
the semantic conventions. Use the
10+
[`dotnet.process.cpu.count`](https://github.com/open-telemetry/semantic-conventions/blob/v1.41.0/docs/runtime/dotnet-metrics.md#metric-dotnetprocesscpucount)
11+
metric as an alternative.
12+
([#4088](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/4088))
13+
814
## 1.15.1-beta.1
915

1016
Released 2026-Apr-21

src/OpenTelemetry.Instrumentation.Process/ProcessMetrics.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,6 @@ static ProcessMetrics()
4747
unit: "s",
4848
description: "Total CPU seconds broken down by different states.");
4949

50-
MeterInstance.CreateObservableUpDownCounter(
51-
"process.cpu.count",
52-
() =>
53-
{
54-
return Environment.ProcessorCount;
55-
},
56-
unit: "{processors}",
57-
description: "The number of processors (CPU cores) available to the current process.");
58-
5950
MeterInstance.CreateObservableUpDownCounter(
6051
"process.thread.count",
6152
() =>

src/OpenTelemetry.Instrumentation.Process/README.md

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -118,24 +118,6 @@ Gets the user processor time for this process.
118118
* [Process.PrivilegedProcessorTime](https://learn.microsoft.com/dotnet/api/system.diagnostics.process.privilegedprocessortime):
119119
Gets the privileged processor time for this process.
120120

121-
### process.cpu.count
122-
123-
The number of processors (CPU cores) available to the current process.
124-
125-
| Units | Instrument Type | Value Type |
126-
| ------------- | ----------------------- | ---------- |
127-
| `{processors}`| ObservableUpDownCounter | `Int32` |
128-
129-
The API used to retrieve the value is
130-
[System.Environment.ProcessorCount](https://learn.microsoft.com/dotnet/api/system.environment.processorcount).
131-
132-
> [!NOTE]
133-
> This metric is under
134-
> [discussion](https://github.com/open-telemetry/opentelemetry-specification/issues/3200)
135-
and not part of the [Process Metrics
136-
Spec](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/system/process-metrics.md)
137-
at this time.
138-
139121
### process.thread.count
140122

141123
Process threads count.

test/OpenTelemetry.Instrumentation.Process.Tests/ProcessMetricsTests.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,15 @@ public void ProcessMetricsAreCaptured()
2121

2222
meterProviderA.ForceFlush(MaxTimeToAllowForFlush);
2323

24-
Assert.Equal(5, exportedItemsA.Count);
2524
var physicalMemoryMetric = exportedItemsA.FirstOrDefault(i => i.Name == "process.memory.usage");
2625
Assert.NotNull(physicalMemoryMetric);
2726
var virtualMemoryMetric = exportedItemsA.FirstOrDefault(i => i.Name == "process.memory.virtual");
2827
Assert.NotNull(virtualMemoryMetric);
2928
var cpuTimeMetric = exportedItemsA.FirstOrDefault(i => i.Name == "process.cpu.time");
3029
Assert.NotNull(cpuTimeMetric);
31-
var processorCountMetric = exportedItemsA.FirstOrDefault(i => i.Name == "process.cpu.count");
32-
Assert.NotNull(processorCountMetric);
3330
var threadMetric = exportedItemsA.FirstOrDefault(i => i.Name == "process.thread.count");
3431
Assert.NotNull(threadMetric);
32+
Assert.Equal(4, exportedItemsA.Count);
3533

3634
exportedItemsA.Clear();
3735

@@ -51,8 +49,8 @@ public void ProcessMetricsAreCaptured()
5149

5250
meterProviderB.ForceFlush(MaxTimeToAllowForFlush);
5351

54-
Assert.Equal(5, exportedItemsA.Count);
55-
Assert.Equal(5, exportedItemsB.Count);
52+
Assert.Equal(4, exportedItemsA.Count);
53+
Assert.Equal(4, exportedItemsB.Count);
5654

5755
AssertMetrics(exportedItemsA);
5856
AssertMetrics(exportedItemsB);
@@ -132,29 +130,25 @@ public async Task ProcessMetricsAreCapturedWhenTasksOverlap()
132130

133131
await Task.WhenAll(tasks);
134132

135-
Assert.Equal(5, exportedItemsA.Count);
136133
var physicalMemoryMetricA = exportedItemsA.FirstOrDefault(i => i.Name == "process.memory.usage");
137134
Assert.NotNull(physicalMemoryMetricA);
138135
var virtualMemoryMetricA = exportedItemsA.FirstOrDefault(i => i.Name == "process.memory.virtual");
139136
Assert.NotNull(virtualMemoryMetricA);
140137
var cpuTimeMetricA = exportedItemsA.FirstOrDefault(i => i.Name == "process.cpu.time");
141138
Assert.NotNull(cpuTimeMetricA);
142-
var processorCountMetricA = exportedItemsA.FirstOrDefault(i => i.Name == "process.cpu.count");
143-
Assert.NotNull(processorCountMetricA);
144139
var threadMetricA = exportedItemsA.FirstOrDefault(i => i.Name == "process.thread.count");
145140
Assert.NotNull(threadMetricA);
141+
Assert.Equal(4, exportedItemsA.Count);
146142

147-
Assert.Equal(5, exportedItemsB.Count);
148143
var physicalMemoryMetricB = exportedItemsB.FirstOrDefault(i => i.Name == "process.memory.usage");
149144
Assert.NotNull(physicalMemoryMetricB);
150145
var virtualMemoryMetricB = exportedItemsB.FirstOrDefault(i => i.Name == "process.memory.virtual");
151146
Assert.NotNull(virtualMemoryMetricB);
152147
var cpuTimeMetricB = exportedItemsB.FirstOrDefault(i => i.Name == "process.cpu.time");
153148
Assert.NotNull(cpuTimeMetricB);
154-
var processorCountMetricB = exportedItemsB.FirstOrDefault(i => i.Name == "process.cpu.count");
155-
Assert.NotNull(processorCountMetricB);
156149
var threadMetricB = exportedItemsB.FirstOrDefault(i => i.Name == "process.thread.count");
157150
Assert.NotNull(threadMetricB);
151+
Assert.Equal(4, exportedItemsB.Count);
158152

159153
AssertMetrics(exportedItemsA);
160154
AssertMetrics(exportedItemsB);

0 commit comments

Comments
 (0)