Update runtime metrics to follow semantic conventions (#1735)

This commit is contained in:
Stanley Liu
2023-04-03 16:24:35 -04:00
committed by GitHub
parent 20d2cc311a
commit e4d42e6632
3 changed files with 36 additions and 28 deletions

View File

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased ## Unreleased
- `opentelemetry-instrumentation-system-metrics` Add `process.` prefix to `runtime.memory`, `runtime.cpu.time`, and `runtime.gc_count`. Change `runtime.memory` from count to UpDownCounter. ([#1735](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1735))
### Added ### Added
- Add `excluded_urls` functionality to `urllib` and `urllib3` instrumentations - Add `excluded_urls` functionality to `urllib` and `urllib3` instrumentations

View File

@ -34,8 +34,8 @@ following metrics are configured:
"system.network.io": ["transmit", "receive"], "system.network.io": ["transmit", "receive"],
"system.network.connections": ["family", "type"], "system.network.connections": ["family", "type"],
"system.thread_count": None "system.thread_count": None
"runtime.memory": ["rss", "vms"], "process.runtime.memory": ["rss", "vms"],
"runtime.cpu.time": ["user", "system"], "process.runtime.cpu.time": ["user", "system"],
} }
Usage Usage
@ -61,8 +61,8 @@ Usage
"system.memory.usage": ["used", "free", "cached"], "system.memory.usage": ["used", "free", "cached"],
"system.cpu.time": ["idle", "user", "system", "irq"], "system.cpu.time": ["idle", "user", "system", "irq"],
"system.network.io": ["transmit", "receive"], "system.network.io": ["transmit", "receive"],
"runtime.memory": ["rss", "vms"], "process.runtime.memory": ["rss", "vms"],
"runtime.cpu.time": ["user", "system"], "process.runtime.cpu.time": ["user", "system"],
} }
SystemMetricsInstrumentor(config=configuration).instrument() SystemMetricsInstrumentor(config=configuration).instrument()
@ -102,9 +102,9 @@ _DEFAULT_CONFIG = {
"system.network.io": ["transmit", "receive"], "system.network.io": ["transmit", "receive"],
"system.network.connections": ["family", "type"], "system.network.connections": ["family", "type"],
"system.thread_count": None, "system.thread_count": None,
"runtime.memory": ["rss", "vms"], "process.runtime.memory": ["rss", "vms"],
"runtime.cpu.time": ["user", "system"], "process.runtime.cpu.time": ["user", "system"],
"runtime.gc_count": None, "process.runtime.gc_count": None,
} }
@ -323,25 +323,25 @@ class SystemMetricsInstrumentor(BaseInstrumentor):
description="System active threads count", description="System active threads count",
) )
if "runtime.memory" in self._config: if "process.runtime.memory" in self._config:
self._meter.create_observable_counter( self._meter.create_observable_up_down_counter(
name=f"runtime.{self._python_implementation}.memory", name=f"process.runtime.{self._python_implementation}.memory",
callbacks=[self._get_runtime_memory], callbacks=[self._get_runtime_memory],
description=f"Runtime {self._python_implementation} memory", description=f"Runtime {self._python_implementation} memory",
unit="bytes", unit="bytes",
) )
if "runtime.cpu.time" in self._config: if "process.runtime.cpu.time" in self._config:
self._meter.create_observable_counter( self._meter.create_observable_counter(
name=f"runtime.{self._python_implementation}.cpu_time", name=f"process.runtime.{self._python_implementation}.cpu_time",
callbacks=[self._get_runtime_cpu_time], callbacks=[self._get_runtime_cpu_time],
description=f"Runtime {self._python_implementation} CPU time", description=f"Runtime {self._python_implementation} CPU time",
unit="seconds", unit="seconds",
) )
if "runtime.gc_count" in self._config: if "process.runtime.gc_count" in self._config:
self._meter.create_observable_counter( self._meter.create_observable_counter(
name=f"runtime.{self._python_implementation}.gc_count", name=f"process.runtime.{self._python_implementation}.gc_count",
callbacks=[self._get_runtime_gc_count], callbacks=[self._get_runtime_gc_count],
description=f"Runtime {self._python_implementation} GC count", description=f"Runtime {self._python_implementation} GC count",
unit="bytes", unit="bytes",
@ -618,7 +618,7 @@ class SystemMetricsInstrumentor(BaseInstrumentor):
) -> Iterable[Observation]: ) -> Iterable[Observation]:
"""Observer callback for runtime memory""" """Observer callback for runtime memory"""
proc_memory = self._proc.memory_info() proc_memory = self._proc.memory_info()
for metric in self._config["runtime.memory"]: for metric in self._config["process.runtime.memory"]:
if hasattr(proc_memory, metric): if hasattr(proc_memory, metric):
self._runtime_memory_labels["type"] = metric self._runtime_memory_labels["type"] = metric
yield Observation( yield Observation(
@ -631,7 +631,7 @@ class SystemMetricsInstrumentor(BaseInstrumentor):
) -> Iterable[Observation]: ) -> Iterable[Observation]:
"""Observer callback for runtime CPU time""" """Observer callback for runtime CPU time"""
proc_cpu = self._proc.cpu_times() proc_cpu = self._proc.cpu_times()
for metric in self._config["runtime.cpu.time"]: for metric in self._config["process.runtime.cpu.time"]:
if hasattr(proc_cpu, metric): if hasattr(proc_cpu, metric):
self._runtime_cpu_time_labels["type"] = metric self._runtime_cpu_time_labels["type"] = metric
yield Observation( yield Observation(

View File

@ -114,9 +114,9 @@ class TestSystemMetrics(TestBase):
"system.network.io", "system.network.io",
"system.network.connections", "system.network.connections",
"system.thread_count", "system.thread_count",
f"runtime.{self.implementation}.memory", f"process.runtime.{self.implementation}.memory",
f"runtime.{self.implementation}.cpu_time", f"process.runtime.{self.implementation}.cpu_time",
f"runtime.{self.implementation}.gc_count", f"process.runtime.{self.implementation}.gc_count",
] ]
for observer in metric_names: for observer in metric_names:
@ -125,9 +125,9 @@ class TestSystemMetrics(TestBase):
def test_runtime_metrics_instrument(self): def test_runtime_metrics_instrument(self):
runtime_config = { runtime_config = {
"runtime.memory": ["rss", "vms"], "process.runtime.memory": ["rss", "vms"],
"runtime.cpu.time": ["user", "system"], "process.runtime.cpu.time": ["user", "system"],
"runtime.gc_count": None, "process.runtime.gc_count": None,
} }
reader = InMemoryMetricReader() reader = InMemoryMetricReader()
@ -143,9 +143,9 @@ class TestSystemMetrics(TestBase):
self.assertEqual(len(metric_names), 3) self.assertEqual(len(metric_names), 3)
observer_names = [ observer_names = [
f"runtime.{self.implementation}.memory", f"process.runtime.{self.implementation}.memory",
f"runtime.{self.implementation}.cpu_time", f"process.runtime.{self.implementation}.cpu_time",
f"runtime.{self.implementation}.gc_count", f"process.runtime.{self.implementation}.gc_count",
] ]
for observer in metric_names: for observer in metric_names:
@ -750,7 +750,9 @@ class TestSystemMetrics(TestBase):
_SystemMetricsResult({"type": "rss"}, 1), _SystemMetricsResult({"type": "rss"}, 1),
_SystemMetricsResult({"type": "vms"}, 2), _SystemMetricsResult({"type": "vms"}, 2),
] ]
self._test_metrics(f"runtime.{self.implementation}.memory", expected) self._test_metrics(
f"process.runtime.{self.implementation}.memory", expected
)
@mock.patch("psutil.Process.cpu_times") @mock.patch("psutil.Process.cpu_times")
def test_runtime_cpu_time(self, mock_process_cpu_times): def test_runtime_cpu_time(self, mock_process_cpu_times):
@ -764,7 +766,9 @@ class TestSystemMetrics(TestBase):
_SystemMetricsResult({"type": "user"}, 1.1), _SystemMetricsResult({"type": "user"}, 1.1),
_SystemMetricsResult({"type": "system"}, 2.2), _SystemMetricsResult({"type": "system"}, 2.2),
] ]
self._test_metrics(f"runtime.{self.implementation}.cpu_time", expected) self._test_metrics(
f"process.runtime.{self.implementation}.cpu_time", expected
)
@mock.patch("gc.get_count") @mock.patch("gc.get_count")
def test_runtime_get_count(self, mock_gc_get_count): def test_runtime_get_count(self, mock_gc_get_count):
@ -775,4 +779,6 @@ class TestSystemMetrics(TestBase):
_SystemMetricsResult({"count": "1"}, 2), _SystemMetricsResult({"count": "1"}, 2),
_SystemMetricsResult({"count": "2"}, 3), _SystemMetricsResult({"count": "2"}, 3),
] ]
self._test_metrics(f"runtime.{self.implementation}.gc_count", expected) self._test_metrics(
f"process.runtime.{self.implementation}.gc_count", expected
)