Quellcode durchsuchen

use semconv attributes for jvm metrics + cleanup (#11257)

Co-authored-by: Lauri Tulmin <ltulmin@splunk.com>
SylvainJuge vor 10 Monaten
Ursprung
Commit
745d880c06

+ 4 - 6
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/GarbageCollector.java

@@ -5,17 +5,16 @@
 
 package io.opentelemetry.instrumentation.runtimemetrics.java8;
 
-import static io.opentelemetry.api.common.AttributeKey.stringKey;
 import static java.util.Arrays.asList;
 import static java.util.Collections.unmodifiableList;
 
 import com.sun.management.GarbageCollectionNotificationInfo;
 import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.metrics.DoubleHistogram;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil;
+import io.opentelemetry.semconv.JvmAttributes;
 import java.lang.management.GarbageCollectorMXBean;
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
@@ -54,9 +53,6 @@ public final class GarbageCollector {
 
   private static final double MILLIS_PER_S = TimeUnit.SECONDS.toMillis(1);
 
-  // TODO: use the opentelemetry-semconv classes once we have metrics attributes there
-  private static final AttributeKey<String> JVM_GC_NAME = stringKey("jvm.gc.name");
-  private static final AttributeKey<String> JVM_GC_ACTION = stringKey("jvm.gc.action");
   static final List<Double> GC_DURATION_BUCKETS = unmodifiableList(asList(0.01, 0.1, 1., 10.));
 
   private static final NotificationFilter GC_FILTER =
@@ -131,7 +127,9 @@ public final class GarbageCollector {
       String gcAction = notificationInfo.getGcAction();
       double duration = notificationInfo.getGcInfo().getDuration() / MILLIS_PER_S;
 
-      gcDuration.record(duration, Attributes.of(JVM_GC_NAME, gcName, JVM_GC_ACTION, gcAction));
+      gcDuration.record(
+          duration,
+          Attributes.of(JvmAttributes.JVM_GC_NAME, gcName, JvmAttributes.JVM_GC_ACTION, gcAction));
     }
   }
 

+ 11 - 20
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/MemoryPools.java

@@ -5,14 +5,13 @@
 
 package io.opentelemetry.instrumentation.runtimemetrics.java8;
 
-import static io.opentelemetry.api.common.AttributeKey.stringKey;
-
 import io.opentelemetry.api.OpenTelemetry;
 import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.api.metrics.ObservableLongMeasurement;
 import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil;
+import io.opentelemetry.semconv.JvmAttributes;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryPoolMXBean;
 import java.lang.management.MemoryType;
@@ -47,14 +46,6 @@ import java.util.function.Function;
  */
 public final class MemoryPools {
 
-  // TODO: use the opentelemetry-semconv classes once we have metrics attributes there
-  private static final AttributeKey<String> JVM_MEMORY_POOL_NAME =
-      stringKey("jvm.memory.pool.name");
-  private static final AttributeKey<String> JVM_MEMORY_TYPE = stringKey("jvm.memory.type");
-
-  private static final String HEAP = "heap";
-  private static final String NON_HEAP = "non_heap";
-
   /** Register observers for java runtime memory metrics. */
   public static List<AutoCloseable> registerObservers(OpenTelemetry openTelemetry) {
     return registerObservers(openTelemetry, ManagementFactory.getMemoryPoolMXBeans());
@@ -73,8 +64,8 @@ public final class MemoryPools {
             .setUnit("By")
             .buildWithCallback(
                 callback(
-                    JVM_MEMORY_POOL_NAME,
-                    JVM_MEMORY_TYPE,
+                    JvmAttributes.JVM_MEMORY_POOL_NAME,
+                    JvmAttributes.JVM_MEMORY_TYPE,
                     poolBeans,
                     MemoryPoolMXBean::getUsage,
                     MemoryUsage::getUsed)));
@@ -85,8 +76,8 @@ public final class MemoryPools {
             .setUnit("By")
             .buildWithCallback(
                 callback(
-                    JVM_MEMORY_POOL_NAME,
-                    JVM_MEMORY_TYPE,
+                    JvmAttributes.JVM_MEMORY_POOL_NAME,
+                    JvmAttributes.JVM_MEMORY_TYPE,
                     poolBeans,
                     MemoryPoolMXBean::getUsage,
                     MemoryUsage::getCommitted)));
@@ -97,8 +88,8 @@ public final class MemoryPools {
             .setUnit("By")
             .buildWithCallback(
                 callback(
-                    JVM_MEMORY_POOL_NAME,
-                    JVM_MEMORY_TYPE,
+                    JvmAttributes.JVM_MEMORY_POOL_NAME,
+                    JvmAttributes.JVM_MEMORY_TYPE,
                     poolBeans,
                     MemoryPoolMXBean::getUsage,
                     MemoryUsage::getMax)));
@@ -110,8 +101,8 @@ public final class MemoryPools {
             .setUnit("By")
             .buildWithCallback(
                 callback(
-                    JVM_MEMORY_POOL_NAME,
-                    JVM_MEMORY_TYPE,
+                    JvmAttributes.JVM_MEMORY_POOL_NAME,
+                    JvmAttributes.JVM_MEMORY_TYPE,
                     poolBeans,
                     MemoryPoolMXBean::getCollectionUsage,
                     MemoryUsage::getUsed)));
@@ -155,9 +146,9 @@ public final class MemoryPools {
   private static String memoryType(MemoryType memoryType) {
     switch (memoryType) {
       case HEAP:
-        return HEAP;
+        return JvmAttributes.JvmMemoryTypeValues.HEAP;
       case NON_HEAP:
-        return NON_HEAP;
+        return JvmAttributes.JvmMemoryTypeValues.NON_HEAP;
     }
     return "unknown";
   }

+ 6 - 10
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/Threads.java

@@ -5,16 +5,14 @@
 
 package io.opentelemetry.instrumentation.runtimemetrics.java8;
 
-import static io.opentelemetry.api.common.AttributeKey.booleanKey;
-import static io.opentelemetry.api.common.AttributeKey.stringKey;
 import static java.util.Objects.requireNonNull;
 
 import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.api.metrics.ObservableLongMeasurement;
 import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil;
+import io.opentelemetry.semconv.JvmAttributes;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
@@ -55,10 +53,6 @@ public final class Threads {
   // Visible for testing
   static final Threads INSTANCE = new Threads();
 
-  // TODO: use the opentelemetry-semconv classes once we have metrics attributes there
-  static final AttributeKey<Boolean> JVM_THREAD_DAEMON = booleanKey("jvm.thread.daemon");
-  static final AttributeKey<String> JVM_THREAD_STATE = stringKey("jvm.thread.state");
-
   /** Register observers for java runtime class metrics. */
   public static List<AutoCloseable> registerObservers(OpenTelemetry openTelemetry) {
     return INSTANCE.registerObservers(openTelemetry, ManagementFactory.getThreadMXBean());
@@ -102,10 +96,11 @@ public final class Threads {
     return measurement -> {
       int daemonThreadCount = threadBean.getDaemonThreadCount();
       measurement.record(
-          daemonThreadCount, Attributes.builder().put(JVM_THREAD_DAEMON, true).build());
+          daemonThreadCount,
+          Attributes.builder().put(JvmAttributes.JVM_THREAD_DAEMON, true).build());
       measurement.record(
           threadBean.getThreadCount() - daemonThreadCount,
-          Attributes.builder().put(JVM_THREAD_DAEMON, false).build());
+          Attributes.builder().put(JvmAttributes.JVM_THREAD_DAEMON, false).build());
     };
   }
 
@@ -133,7 +128,8 @@ public final class Threads {
       throw new IllegalStateException("Unexpected error happened during ThreadInfo#isDaemon()", e);
     }
     String threadState = threadInfo.getThreadState().name().toLowerCase(Locale.ROOT);
-    return Attributes.of(JVM_THREAD_DAEMON, isDaemon, JVM_THREAD_STATE, threadState);
+    return Attributes.of(
+        JvmAttributes.JVM_THREAD_DAEMON, isDaemon, JvmAttributes.JVM_THREAD_STATE, threadState);
   }
 
   private Threads() {}

+ 5 - 14
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalMemoryPools.java

@@ -5,14 +5,13 @@
 
 package io.opentelemetry.instrumentation.runtimemetrics.java8.internal;
 
-import static io.opentelemetry.api.common.AttributeKey.stringKey;
 import static java.util.Collections.singletonList;
 
 import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.api.metrics.ObservableLongMeasurement;
+import io.opentelemetry.semconv.JvmAttributes;
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryPoolMXBean;
 import java.lang.management.MemoryType;
@@ -29,14 +28,6 @@ import java.util.function.Consumer;
  */
 public final class ExperimentalMemoryPools {
 
-  // TODO: use the opentelemetry-semconv classes once we have metrics attributes there
-  private static final AttributeKey<String> JVM_MEMORY_POOL_NAME =
-      stringKey("jvm.memory.pool.name");
-  private static final AttributeKey<String> JVM_MEMORY_TYPE = stringKey("jvm.memory.type");
-
-  private static final String HEAP = "heap";
-  private static final String NON_HEAP = "non_heap";
-
   /** Register observers for java runtime experimental memory metrics. */
   public static List<AutoCloseable> registerObservers(OpenTelemetry openTelemetry) {
     return registerObservers(openTelemetry, ManagementFactory.getMemoryPoolMXBeans());
@@ -60,8 +51,8 @@ public final class ExperimentalMemoryPools {
     for (MemoryPoolMXBean pool : poolBeans) {
       attributeSets.add(
           Attributes.builder()
-              .put(JVM_MEMORY_POOL_NAME, pool.getName())
-              .put(JVM_MEMORY_TYPE, memoryType(pool.getType()))
+              .put(JvmAttributes.JVM_MEMORY_POOL_NAME, pool.getName())
+              .put(JvmAttributes.JVM_MEMORY_TYPE, memoryType(pool.getType()))
               .build());
     }
 
@@ -84,9 +75,9 @@ public final class ExperimentalMemoryPools {
   private static String memoryType(MemoryType memoryType) {
     switch (memoryType) {
       case HEAP:
-        return HEAP;
+        return JvmAttributes.JvmMemoryTypeValues.HEAP;
       case NON_HEAP:
-        return NON_HEAP;
+        return JvmAttributes.JvmMemoryTypeValues.NON_HEAP;
     }
     return "unknown";
   }

+ 13 - 8
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/ThreadsStableSemconvTest.java

@@ -6,8 +6,6 @@
 package io.opentelemetry.instrumentation.runtimemetrics.java8;
 
 import static io.opentelemetry.instrumentation.runtimemetrics.java8.ScopeUtil.EXPECTED_SCOPE;
-import static io.opentelemetry.instrumentation.runtimemetrics.java8.Threads.JVM_THREAD_DAEMON;
-import static io.opentelemetry.instrumentation.runtimemetrics.java8.Threads.JVM_THREAD_STATE;
 import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
 import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
 import static org.mockito.Mockito.mock;
@@ -16,6 +14,7 @@ import static org.mockito.Mockito.when;
 import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
 import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
 import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
+import io.opentelemetry.semconv.JvmAttributes;
 import java.lang.management.ThreadInfo;
 import java.lang.management.ThreadMXBean;
 import org.junit.jupiter.api.Test;
@@ -67,12 +66,14 @@ class ThreadsStableSemconvTest {
                                             point
                                                 .hasValue(2)
                                                 .hasAttributesSatisfying(
-                                                    equalTo(JVM_THREAD_DAEMON, true)),
+                                                    equalTo(JvmAttributes.JVM_THREAD_DAEMON, true)),
                                         point ->
                                             point
                                                 .hasValue(5)
                                                 .hasAttributesSatisfying(
-                                                    equalTo(JVM_THREAD_DAEMON, false))))));
+                                                    equalTo(
+                                                        JvmAttributes.JVM_THREAD_DAEMON,
+                                                        false))))));
   }
 
   @Test
@@ -110,14 +111,18 @@ class ThreadsStableSemconvTest {
                                             point
                                                 .hasValue(1)
                                                 .hasAttributesSatisfying(
-                                                    equalTo(JVM_THREAD_DAEMON, false),
-                                                    equalTo(JVM_THREAD_STATE, "runnable")),
+                                                    equalTo(JvmAttributes.JVM_THREAD_DAEMON, false),
+                                                    equalTo(
+                                                        JvmAttributes.JVM_THREAD_STATE,
+                                                        "runnable")),
                                         point ->
                                             point
                                                 .hasValue(1)
                                                 .hasAttributesSatisfying(
-                                                    equalTo(JVM_THREAD_DAEMON, true),
-                                                    equalTo(JVM_THREAD_STATE, "waiting"))))));
+                                                    equalTo(JvmAttributes.JVM_THREAD_DAEMON, true),
+                                                    equalTo(
+                                                        JvmAttributes.JVM_THREAD_STATE,
+                                                        "waiting"))))));
   }
 
   static final class ThreadInfoAnswer implements Answer<Object> {

+ 1 - 4
javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java

@@ -200,10 +200,7 @@ public class AgentInstaller {
   }
 
   private static void copyNecessaryConfigToSystemProperties(ConfigProperties config) {
-    for (String property :
-        asList(
-            "otel.instrumentation.experimental.span-suppression-strategy",
-            "otel.semconv-stability.opt-in")) {
+    for (String property : asList("otel.instrumentation.experimental.span-suppression-strategy")) {
       String value = config.getString(property);
       if (value != null) {
         System.setProperty(property, value);