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:
parent
0cc9cf0ef6
commit
2852d1d0c7
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.oshi;
|
package io.opentelemetry.javaagent.instrumentation.oshi;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.config.Config;
|
import io.opentelemetry.instrumentation.api.config.Config;
|
||||||
import io.opentelemetry.instrumentation.oshi.ProcessMetrics;
|
import io.opentelemetry.instrumentation.oshi.ProcessMetrics;
|
||||||
import io.opentelemetry.instrumentation.oshi.SystemMetrics;
|
import io.opentelemetry.instrumentation.oshi.SystemMetrics;
|
||||||
|
@ -16,12 +17,12 @@ public final class MetricsRegistration {
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
if (registered.compareAndSet(false, true)) {
|
if (registered.compareAndSet(false, true)) {
|
||||||
SystemMetrics.registerObservers();
|
SystemMetrics.registerObservers(GlobalOpenTelemetry.get());
|
||||||
|
|
||||||
// ProcessMetrics don't follow the spec
|
// ProcessMetrics don't follow the spec
|
||||||
if (Config.get()
|
if (Config.get()
|
||||||
.getBoolean("otel.instrumentation.oshi.experimental-metrics.enabled", false)) {
|
.getBoolean("otel.instrumentation.oshi.experimental-metrics.enabled", false)) {
|
||||||
ProcessMetrics.registerObservers();
|
ProcessMetrics.registerObservers(GlobalOpenTelemetry.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.instrumentation.oshi;
|
package io.opentelemetry.instrumentation.oshi;
|
||||||
|
|
||||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.api.common.AttributeKey;
|
import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.api.common.Attributes;
|
import io.opentelemetry.api.common.Attributes;
|
||||||
import io.opentelemetry.api.metrics.Meter;
|
import io.opentelemetry.api.metrics.Meter;
|
||||||
|
@ -19,10 +20,18 @@ public class ProcessMetrics {
|
||||||
|
|
||||||
private 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() {
|
public static void registerObservers() {
|
||||||
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
|
registerObservers(GlobalOpenTelemetry.get());
|
||||||
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi");
|
}
|
||||||
|
|
||||||
|
public static void registerObservers(OpenTelemetry openTelemetry) {
|
||||||
|
Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi");
|
||||||
SystemInfo systemInfo = new SystemInfo();
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
OperatingSystem osInfo = systemInfo.getOperatingSystem();
|
OperatingSystem osInfo = systemInfo.getOperatingSystem();
|
||||||
OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId());
|
OSProcess processInfo = osInfo.getProcess(osInfo.getProcessId());
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.instrumentation.oshi;
|
package io.opentelemetry.instrumentation.oshi;
|
||||||
|
|
||||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.api.common.AttributeKey;
|
import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.api.common.Attributes;
|
import io.opentelemetry.api.common.Attributes;
|
||||||
import io.opentelemetry.api.metrics.Meter;
|
import io.opentelemetry.api.metrics.Meter;
|
||||||
|
@ -27,10 +28,18 @@ public class SystemMetrics {
|
||||||
|
|
||||||
private SystemMetrics() {}
|
private SystemMetrics() {}
|
||||||
|
|
||||||
/** Register observers for system metrics. */
|
/**
|
||||||
|
* Register observers for system metrics.
|
||||||
|
*
|
||||||
|
* @deprecated use {@link #registerObservers(OpenTelemetry openTelemetry)}
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static void registerObservers() {
|
public static void registerObservers() {
|
||||||
// TODO(anuraaga): registerObservers should accept an OpenTelemetry instance
|
registerObservers(GlobalOpenTelemetry.get());
|
||||||
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get("io.opentelemetry.oshi");
|
}
|
||||||
|
|
||||||
|
public static void registerObservers(OpenTelemetry openTelemetry) {
|
||||||
|
Meter meter = openTelemetry.getMeterProvider().get("io.opentelemetry.oshi");
|
||||||
SystemInfo systemInfo = new SystemInfo();
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
HardwareAbstractionLayer hal = systemInfo.getHardware();
|
HardwareAbstractionLayer hal = systemInfo.getHardware();
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.instrumentation.oshi;
|
package io.opentelemetry.instrumentation.oshi;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||||
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
|
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
@ -16,7 +17,7 @@ class ProcessMetricsTest extends AbstractProcessMetricsTest {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerMetrics() {
|
protected void registerMetrics() {
|
||||||
ProcessMetrics.registerObservers();
|
ProcessMetrics.registerObservers(GlobalOpenTelemetry.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.instrumentation.oshi;
|
package io.opentelemetry.instrumentation.oshi;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||||
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
|
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
@ -16,7 +17,7 @@ class SystemMetricsTest extends AbstractSystemMetricsTest {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerMetrics() {
|
protected void registerMetrics() {
|
||||||
SystemMetrics.registerObservers();
|
SystemMetrics.registerObservers(GlobalOpenTelemetry.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.instrumentation.javaagent.runtimemetrics;
|
package io.opentelemetry.instrumentation.javaagent.runtimemetrics;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.config.Config;
|
import io.opentelemetry.instrumentation.api.config.Config;
|
||||||
import io.opentelemetry.instrumentation.runtimemetrics.GarbageCollector;
|
import io.opentelemetry.instrumentation.runtimemetrics.GarbageCollector;
|
||||||
import io.opentelemetry.instrumentation.runtimemetrics.MemoryPools;
|
import io.opentelemetry.instrumentation.runtimemetrics.MemoryPools;
|
||||||
|
@ -20,8 +21,8 @@ public class RuntimeMetricsInstaller implements AgentListener {
|
||||||
public void afterAgent(Config config, AutoConfiguredOpenTelemetrySdk unused) {
|
public void afterAgent(Config config, AutoConfiguredOpenTelemetrySdk unused) {
|
||||||
if (config.isInstrumentationEnabled(
|
if (config.isInstrumentationEnabled(
|
||||||
Collections.singleton("runtime-metrics"), /* defaultEnabled= */ true)) {
|
Collections.singleton("runtime-metrics"), /* defaultEnabled= */ true)) {
|
||||||
GarbageCollector.registerObservers();
|
GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
|
||||||
MemoryPools.registerObservers();
|
MemoryPools.registerObservers(GlobalOpenTelemetry.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.instrumentation.runtimemetrics;
|
package io.opentelemetry.instrumentation.runtimemetrics;
|
||||||
|
|
||||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.api.common.AttributeKey;
|
import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.api.common.Attributes;
|
import io.opentelemetry.api.common.Attributes;
|
||||||
import io.opentelemetry.api.metrics.Meter;
|
import io.opentelemetry.api.metrics.Meter;
|
||||||
|
@ -20,7 +21,7 @@ import java.util.List;
|
||||||
* <p>Example usage:
|
* <p>Example usage:
|
||||||
*
|
*
|
||||||
* <pre>{@code
|
* <pre>{@code
|
||||||
* GarbageCollector.registerObservers();
|
* GarbageCollector.registerObservers(GlobalOpenTelemetry.get());
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* <p>Example metrics being exported:
|
* <p>Example metrics being exported:
|
||||||
|
@ -33,12 +34,19 @@ import java.util.List;
|
||||||
public final class GarbageCollector {
|
public final class GarbageCollector {
|
||||||
private static final AttributeKey<String> GC_KEY = AttributeKey.stringKey("gc");
|
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() {
|
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();
|
List<GarbageCollectorMXBean> garbageCollectors = ManagementFactory.getGarbageCollectorMXBeans();
|
||||||
Meter meter =
|
Meter meter = openTelemetry.getMeterProvider().get(GarbageCollector.class.getName());
|
||||||
GlobalOpenTelemetry.get().getMeterProvider().get(GarbageCollector.class.getName());
|
|
||||||
List<Attributes> labelSets = new ArrayList<>(garbageCollectors.size());
|
List<Attributes> labelSets = new ArrayList<>(garbageCollectors.size());
|
||||||
for (GarbageCollectorMXBean gc : garbageCollectors) {
|
for (GarbageCollectorMXBean gc : garbageCollectors) {
|
||||||
labelSets.add(Attributes.of(GC_KEY, gc.getName()));
|
labelSets.add(Attributes.of(GC_KEY, gc.getName()));
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package io.opentelemetry.instrumentation.runtimemetrics;
|
package io.opentelemetry.instrumentation.runtimemetrics;
|
||||||
|
|
||||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.api.common.AttributeKey;
|
import io.opentelemetry.api.common.AttributeKey;
|
||||||
import io.opentelemetry.api.common.Attributes;
|
import io.opentelemetry.api.common.Attributes;
|
||||||
import io.opentelemetry.api.metrics.Meter;
|
import io.opentelemetry.api.metrics.Meter;
|
||||||
|
@ -23,7 +24,7 @@ import java.util.List;
|
||||||
* <p>Example usage:
|
* <p>Example usage:
|
||||||
*
|
*
|
||||||
* <pre>{@code
|
* <pre>{@code
|
||||||
* MemoryPools.registerObservers();
|
* MemoryPools.registerObservers(GlobalOpenTelemetry.get());
|
||||||
* }</pre>
|
* }</pre>
|
||||||
*
|
*
|
||||||
* <p>Example metrics being exported: Component
|
* <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);
|
private static final Attributes MAX_NON_HEAP = Attributes.of(TYPE_KEY, MAX, AREA_KEY, NON_HEAP);
|
||||||
|
|
||||||
/** Register only the "area" measurements. */
|
/** Register only the "area" measurements. */
|
||||||
|
@Deprecated
|
||||||
public static void registerMemoryAreaObservers() {
|
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();
|
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
|
||||||
Meter meter = GlobalOpenTelemetry.get().getMeterProvider().get(MemoryPools.class.getName());
|
Meter meter = openTelemetry.getMeterProvider().get(MemoryPools.class.getName());
|
||||||
meter
|
meter
|
||||||
.upDownCounterBuilder("runtime.jvm.memory.area")
|
.upDownCounterBuilder("runtime.jvm.memory.area")
|
||||||
.setDescription("Bytes of a given JVM memory area.")
|
.setDescription("Bytes of a given JVM memory area.")
|
||||||
|
@ -74,10 +79,14 @@ public final class MemoryPools {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Register only the "pool" measurements. */
|
/** Register only the "pool" measurements. */
|
||||||
|
@Deprecated
|
||||||
public static void registerMemoryPoolObservers() {
|
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();
|
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> usedLabelSets = new ArrayList<>(poolBeans.size());
|
||||||
List<Attributes> committedLabelSets = new ArrayList<>(poolBeans.size());
|
List<Attributes> committedLabelSets = new ArrayList<>(poolBeans.size());
|
||||||
List<Attributes> maxLabelSets = 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() {
|
public static void registerObservers() {
|
||||||
registerMemoryAreaObservers();
|
registerMemoryAreaObservers();
|
||||||
registerMemoryPoolObservers();
|
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) {
|
static void recordHeap(ObservableLongMeasurement measurement, MemoryUsage usage) {
|
||||||
record(measurement, usage, USED_HEAP, COMMITTED_HEAP, MAX_HEAP);
|
record(measurement, usage, USED_HEAP, COMMITTED_HEAP, MAX_HEAP);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue