diff --git a/instrumentation/runtime-metrics/javaagent/src/test/groovy/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsTest.groovy b/instrumentation/runtime-metrics/javaagent/src/test/groovy/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsTest.groovy index a7a823471b..a3aa6c676d 100644 --- a/instrumentation/runtime-metrics/javaagent/src/test/groovy/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsTest.groovy +++ b/instrumentation/runtime-metrics/javaagent/src/test/groovy/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsTest.groovy @@ -16,7 +16,8 @@ class RuntimeMetricsTest extends AgentInstrumentationSpecification { then: conditions.eventually { - assert getMetrics().any { it.name == "runtime.jvm.gc.collection" } + assert getMetrics().any { it.name == "runtime.jvm.gc.time" } + assert getMetrics().any { it.name == "runtime.jvm.gc.count" } assert getMetrics().any { it.name == "runtime.jvm.memory.area" } assert getMetrics().any { it.name == "runtime.jvm.memory.pool" } } diff --git a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java index 7c2029ce45..d810bc56aa 100644 --- a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java +++ b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/GarbageCollector.java @@ -25,7 +25,8 @@ import java.util.List; *

Example metrics being exported: * *

- *   runtime.jvm.gc.collection{gc="PS1"} 6.7
+ *   runtime.jvm.gc.time{gc="PS1"} 6.7
+ *   runtime.jvm.gc.count{gc="PS1"} 1
  * 
*/ public final class GarbageCollector { @@ -40,7 +41,7 @@ public final class GarbageCollector { labelSets.add(Labels.of(GC_LABEL_KEY, gc.getName())); } meter - .longSumObserverBuilder("runtime.jvm.gc.collection") + .longSumObserverBuilder("runtime.jvm.gc.time") .setDescription("Time spent in a given JVM garbage collector in milliseconds.") .setUnit("ms") .setUpdater( @@ -51,6 +52,19 @@ public final class GarbageCollector { } }) .build(); + meter + .longSumObserverBuilder("runtime.jvm.gc.count") + .setDescription( + "The number of collections that have occurred for a given JVM garbage collector.") + .setUnit("collections") + .setUpdater( + resultLongObserver -> { + for (int i = 0; i < garbageCollectors.size(); i++) { + resultLongObserver.observe( + garbageCollectors.get(i).getCollectionCount(), labelSets.get(i)); + } + }) + .build(); } private GarbageCollector() {} diff --git a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SpringBootSmokeTest.groovy b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SpringBootSmokeTest.groovy index 4f1b981d80..c23934e759 100644 --- a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SpringBootSmokeTest.groovy +++ b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SpringBootSmokeTest.groovy @@ -62,7 +62,8 @@ class SpringBootSmokeTest extends SmokeTest { then: "JVM metrics are exported" def metrics = new MetricsInspector(waitForMetrics()) - metrics.hasMetricsNamed("runtime.jvm.gc.collection") + metrics.hasMetricsNamed("runtime.jvm.gc.time") + metrics.hasMetricsNamed("runtime.jvm.gc.count") metrics.hasMetricsNamed("runtime.jvm.memory.area") metrics.hasMetricsNamed("runtime.jvm.memory.pool")