diff --git a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java index 059c0d2114f2..120e0209d9a4 100644 --- a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java +++ b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.oshi; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.oshi.ProcessMetrics; import io.opentelemetry.instrumentation.oshi.SystemMetrics; @@ -16,12 +17,12 @@ public final class MetricsRegistration { public static void register() { if (registered.compareAndSet(false, true)) { - SystemMetrics.registerObservers(); + SystemMetrics.registerObservers(GlobalOpenTelemetry.get()); // ProcessMetrics don't follow the spec if (Config.get() .getBoolean("otel.instrumentation.oshi.experimental-metrics.enabled", false)) { - ProcessMetrics.registerObservers(); + ProcessMetrics.registerObservers(GlobalOpenTelemetry.get()); } } } diff --git a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java index 67ba15c6941f..f689725a59a5 100644 --- a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java +++ b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/ProcessMetrics.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.oshi; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.metrics.Meter; @@ -19,10 +20,18 @@ public class ProcessMetrics { private ProcessMetrics() {} - /** Register observers for java runtime metrics. */ + /** + * Register observers for java runtime metrics. + * + * @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)} + */ + @Deprecated public static void registerObservers() { - // TODO(anuraaga): registerObservers should accept an OpenTelemetry instance - Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi"); + registerObservers(GlobalOpenTelemetry.get()); + } + + public static void registerObservers(OpenTelemetry openTelemetry) { + Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi"); SystemInfo systemInfo = new SystemInfo(); OperatingSystem osInfo = systemInfo.getOperatingSystem(); OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId()); diff --git a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java index 57e05ccadd99..9ef7a696940e 100644 --- a/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java +++ b/instrumentation/oshi/library/src/main/java/io/opentelemetry/instrumentation/oshi/SystemMetrics.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.oshi; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.metrics.Meter; @@ -27,10 +28,18 @@ public class SystemMetrics { private SystemMetrics() {} - /** Register observers for system metrics. */ + /** + * Register observers for system metrics. + * + * @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)} + */ + @Deprecated public static void registerObservers() { - // TODO(anuraaga): registerObservers should accept an OpenTelemetry instance - Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi"); + registerObservers(GlobalOpenTelemetry.get()); + } + + public static void registerObservers(OpenTelemetry openTelemetry) { + Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi"); SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hal = systemInfo.getHardware(); diff --git a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/ProcessMetricsTest.java b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/ProcessMetricsTest.java index 0ffaf20836cd..e61ca7e02556 100644 --- a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/ProcessMetricsTest.java +++ b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/ProcessMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.oshi; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import org.junit.jupiter.api.extension.RegisterExtension; @@ -16,7 +17,7 @@ class ProcessMetricsTest extends AbstractProcessMetricsTest { @Override protected void registerMetrics() { - ProcessMetrics.registerObservers(); + ProcessMetrics.registerObservers(GlobalOpenTelemetry.get()); } @Override diff --git a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/SystemMetricsTest.java b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/SystemMetricsTest.java index bed2ee6cdbaa..c1085d129a2c 100644 --- a/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/SystemMetricsTest.java +++ b/instrumentation/oshi/library/src/test/java/io/opentelemetry/instrumentation/oshi/SystemMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.oshi; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import org.junit.jupiter.api.extension.RegisterExtension; @@ -16,7 +17,7 @@ class SystemMetricsTest extends AbstractSystemMetricsTest { @Override protected void registerMetrics() { - SystemMetrics.registerObservers(); + SystemMetrics.registerObservers(GlobalOpenTelemetry.get()); } @Override diff --git a/instrumentation/runtime-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsInstaller.java b/instrumentation/runtime-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsInstaller.java index 8605984d9924..5657745ea5dd 100644 --- a/instrumentation/runtime-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsInstaller.java +++ b/instrumentation/runtime-metrics/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/RuntimeMetricsInstaller.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.javaagent.runtimemetrics; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.runtimemetrics.GarbageCollector; import io.opentelemetry.instrumentation.runtimemetrics.MemoryPools; @@ -20,8 +21,8 @@ public class RuntimeMetricsInstaller implements AgentListener { public void afterAgent(Config config, AutoConfiguredOpenTelemetrySdk unused) { if (config.isInstrumentationEnabled( Collections.singleton("runtime-metrics"), /* defaultEnabled= */ true)) { - GarbageCollector.registerObservers(); - MemoryPools.registerObservers(); + GarbageCollector.registerObservers(GlobalOpenTelemetry.get()); + MemoryPools.registerObservers(GlobalOpenTelemetry.get()); } } } 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 b2650195ed64..d9e84efc7071 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 @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.runtimemetrics; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.metrics.Meter; @@ -20,7 +21,7 @@ *

Example usage: * *

{@code
- * GarbageCollector.registerObservers();
+ * GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
  * }
* *

Example metrics being exported: @@ -33,12 +34,19 @@ public final class GarbageCollector { private static final AttributeKey GC_KEY = AttributeKey.stringKey("gc"); - /** Register all observers provided by this module. */ + /** + * Register all observers provided by this module. + * + * @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)} + */ + @Deprecated public static void registerObservers() { - // TODO(anuraaga): registerObservers should accept an OpenTelemetry instance + registerObservers(GlobalOpenTelemetry.get()); + } + + public static void registerObservers(OpenTelemetry openTelemetry) { List garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans(); - Meter meter = - GlobalOpenTelemetry.get().getMeterProvider().get(GarbageCollector.class.getName()); + Meter meter = openTelemetry.getMeterProvider().get(GarbageCollector.class.getName()); List labelSets = new ArrayList<>(garbageCollectors.size()); for (GarbageCollectorMXBean gc : garbageCollectors) { labelSets.add(Attributes.of(GC_KEY, gc.getName())); diff --git a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java index bc64e7935960..77a2fe771cc4 100644 --- a/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java +++ b/instrumentation/runtime-metrics/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/MemoryPools.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.runtimemetrics; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.metrics.Meter; @@ -23,7 +24,7 @@ *

Example usage: * *

{@code
- * MemoryPools.registerObservers();
+ * MemoryPools.registerObservers(GlobalOpenTelemetry.get());
  * }
* *

Example metrics being exported: Component @@ -58,10 +59,14 @@ public final class MemoryPools { private static final Attributes MAX_NON_HEAP = Attributes.of(TYPE_KEY, MAX, AREA_KEY, NON_HEAP); /** Register only the "area" measurements. */ + @Deprecated public static void registerMemoryAreaObservers() { - // TODO(anuraaga): registerObservers should accept an OpenTelemetry instance + registerMemoryPoolObservers(GlobalOpenTelemetry.get()); + } + + public static void registerMemoryAreaObservers(OpenTelemetry openTelemetry) { MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); - Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName()); + Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName()); meter .upDownCounterBuilder("runtime.jvm.memory.area") .setDescription("Bytes of a given JVM memory area.") @@ -74,10 +79,14 @@ public static void registerMemoryAreaObservers() { } /** Register only the "pool" measurements. */ + @Deprecated public static void registerMemoryPoolObservers() { - // TODO(anuraaga): registerObservers should accept an OpenTelemetry instance + registerMemoryPoolObservers(GlobalOpenTelemetry.get()); + } + + public static void registerMemoryPoolObservers(OpenTelemetry openTelemetry) { List poolBeans = ManagementFactory.getMemoryPoolMXBeans(); - Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName()); + Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName()); List usedLabelSets = new ArrayList<>(poolBeans.size()); List committedLabelSets = new ArrayList<>(poolBeans.size()); List maxLabelSets = new ArrayList<>(poolBeans.size()); @@ -106,12 +115,23 @@ public static void registerMemoryPoolObservers() { }); } - /** Register all measurements provided by this module. */ + /** + * Register all measurements provided by this module. + * + * @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)} + */ + @Deprecated public static void registerObservers() { registerMemoryAreaObservers(); registerMemoryPoolObservers(); } + /** Register all measurements provided by this module. */ + public static void registerObservers(OpenTelemetry openTelemetry) { + registerMemoryAreaObservers(openTelemetry); + registerMemoryPoolObservers(openTelemetry); + } + static void recordHeap(ObservableLongMeasurement measurement, MemoryUsage usage) { record(measurement, usage, USED_HEAP, COMMITTED_HEAP, MAX_HEAP); }