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;
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue