Allows passing an OpenTelemetry instance to registerObservers() methods. (#5716)

* Allows passing an OpenTelemetry instance to registerObservers() methods.

* Deprecated registerObserver methods that were using the GlobalOpenTelemetry instance.
This commit is contained in:
Eduardo Narros 2022-03-31 03:44:57 +01:00 committed by GitHub
parent 0cc9cf0ef6
commit 2852d1d0c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 73 additions and 23 deletions

View File

@ -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());
}
}
}

View File

@ -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());

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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());
}
}
}

View File

@ -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 @@ import java.util.List;
* <p>Example usage:
*
* <pre>{@code
* GarbageCollector.registerObservers();
* GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
* }</pre>
*
* <p>Example metrics being exported:
@ -33,12 +34,19 @@ import java.util.List;
public final class GarbageCollector {
private static final AttributeKey<String> 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<GarbageCollectorMXBean> garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans();
Meter meter =
GlobalOpenTelemetry.get().getMeterProvider().get(GarbageCollector.class.getName());
Meter meter = openTelemetry.getMeterProvider().get(GarbageCollector.class.getName());
List<Attributes> labelSets = new ArrayList<>(garbageCollectors.size());
for (GarbageCollectorMXBean gc : garbageCollectors) {
labelSets.add(Attributes.of(GC_KEY, gc.getName()));

View File

@ -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 @@ import java.util.List;
* <p>Example usage:
*
* <pre>{@code
* MemoryPools.registerObservers();
* MemoryPools.registerObservers(GlobalOpenTelemetry.get());
* }</pre>
*
* <p>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 final class MemoryPools {
}
/** 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<MemoryPoolMXBean> poolBeans = ManagementFactory.getMemoryPoolMXBeans();
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName());
Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName());
List<Attributes> usedLabelSets = new ArrayList<>(poolBeans.size());
List<Attributes> committedLabelSets = new ArrayList<>(poolBeans.size());
List<Attributes> maxLabelSets = new ArrayList<>(poolBeans.size());
@ -106,12 +115,23 @@ public final class MemoryPools {
});
}
/** 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);
}