From a68a8d7d2466eeafa6cc292fba5cba739b1f9a92 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Mon, 22 Jul 2024 19:33:10 +0800 Subject: [PATCH 1/9] add file descriptor metrics --- .../java17/RuntimeMetricsBuilder.java | 2 + .../java8/Java8RuntimeMetricsInstaller.java | 2 + .../internal/ExperimentalFileDescriptor.java | 72 ++++++++++++++++ .../java8/internal/FileDescriptorMethods.java | 82 +++++++++++++++++++ .../ExperimentalFileDescriptorTest.java | 57 +++++++++++++ 5 files changed, 215 insertions(+) create mode 100644 instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java create mode 100644 instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java create mode 100644 instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetricsBuilder.java b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetricsBuilder.java index e73c535e5803..63a2b4b8fe72 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetricsBuilder.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/RuntimeMetricsBuilder.java @@ -14,6 +14,7 @@ import io.opentelemetry.instrumentation.runtimemetrics.java8.Threads; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalBufferPools; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalCpu; +import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalFileDescriptor; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalMemoryPools; import java.util.ArrayList; import java.util.Arrays; @@ -114,6 +115,7 @@ private List buildObservables() { observables.addAll(ExperimentalBufferPools.registerObservers(openTelemetry)); observables.addAll(ExperimentalCpu.registerObservers(openTelemetry)); observables.addAll(ExperimentalMemoryPools.registerObservers(openTelemetry)); + observables.addAll(ExperimentalFileDescriptor.registerObservers(openTelemetry)); } return observables; } catch (Exception e) { diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java index 57ca0396ee99..799a6ac71778 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.runtimemetrics.java8.Threads; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalBufferPools; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalCpu; +import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalFileDescriptor; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.ExperimentalMemoryPools; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil; import io.opentelemetry.javaagent.extension.AgentListener; @@ -51,6 +52,7 @@ public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { observables.addAll(ExperimentalBufferPools.registerObservers(openTelemetry)); observables.addAll(ExperimentalCpu.registerObservers(openTelemetry)); observables.addAll(ExperimentalMemoryPools.registerObservers(openTelemetry)); + observables.addAll(ExperimentalFileDescriptor.registerObservers(openTelemetry)); } Thread cleanupTelemetry = new Thread(() -> JmxRuntimeMetricsUtil.closeObservers(observables)); diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java new file mode 100644 index 000000000000..51d1b614d44b --- /dev/null +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -0,0 +1,72 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.metrics.Meter; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +/** + * Registers measurements that generate experimental metrics about file descriptor. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ +public class ExperimentalFileDescriptor { + /** Register observers for java runtime experimental file descriptor metrics. */ + public static List registerObservers(OpenTelemetry openTelemetry) { + return registerObservers( + openTelemetry, + FileDescriptorMethods.openFileDescriptorCount(), + FileDescriptorMethods.maxFileDescriptorCount()); + } + + // Visible for testing + static List registerObservers( + OpenTelemetry openTelemetry, + Supplier openFileDescriptorCount, + Supplier maxFileDescriptorCount) { + Meter meter = JmxRuntimeMetricsUtil.getMeter(openTelemetry); + List observables = new ArrayList<>(); + + if (openFileDescriptorCount != null) { + observables.add( + meter + .gaugeBuilder("os.file.descriptor.open") + .setDescription("number of open file descriptors") + .setUnit("{file}") + .buildWithCallback( + observableMeasurement -> { + Long openCount = openFileDescriptorCount.get(); + if (openCount != null && openCount >= 0) { + observableMeasurement.record(openCount); + } + })); + } + + if (maxFileDescriptorCount != null) { + observables.add( + meter + .gaugeBuilder("os.file.descriptor.max") + .setDescription("maximum number of file descriptors") + .setUnit("{file}") + .buildWithCallback( + observableMeasurement -> { + Long maxCount = maxFileDescriptorCount.get(); + if (maxCount != null && maxCount >= 0) { + observableMeasurement.record(maxCount); + } + })); + } + + return observables; + } + + private ExperimentalFileDescriptor() { + } +} diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java new file mode 100644 index 000000000000..2ef2dff5fcea --- /dev/null +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java @@ -0,0 +1,82 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; + +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.function.Supplier; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public class FileDescriptorMethods { + + private static final String OS_BEAN_J9 = "com.ibm.lang.management.UnixOperatingSystemMXBean"; + private static final String OS_BEAN_HOTSPOT = "com.sun.management.UnixOperatingSystemMXBean"; + private static final String METHOD_OPEN_FILE_DESCRIPTOR_COUNT = "getOpenFileDescriptorCount"; + private static final String METHOD_MAX_FILE_DESCRIPTOR_COUNT = "getMaxFileDescriptorCount"; + + @Nullable private static final Supplier openFileDescriptorCount; + @Nullable private static final Supplier maxFileDescriptorCount; + + static { + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + + Supplier openFileDescriptorCountSupplier = + methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_OPEN_FILE_DESCRIPTOR_COUNT); + if (openFileDescriptorCountSupplier == null) { + // More users will be on hotspot than j9, so check for j9 second + openFileDescriptorCountSupplier = + methodInvoker(osBean, OS_BEAN_J9, METHOD_OPEN_FILE_DESCRIPTOR_COUNT); + } + + openFileDescriptorCount = openFileDescriptorCountSupplier; + + Supplier maxFileDescriptorCountSupplier = + methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_MAX_FILE_DESCRIPTOR_COUNT); + if (maxFileDescriptorCountSupplier == null) { + // More users will be on hotspot than j9, so check for j9 second + maxFileDescriptorCountSupplier = + methodInvoker(osBean, OS_BEAN_J9, METHOD_MAX_FILE_DESCRIPTOR_COUNT); + } + + maxFileDescriptorCount = maxFileDescriptorCountSupplier; + } + + @Nullable + @SuppressWarnings("ReturnValueIgnored") + private static Supplier methodInvoker( + OperatingSystemMXBean osBean, String osBeanClassName, String methodName) { + try { + Class osBeanClass = Class.forName(osBeanClassName); + osBeanClass.cast(osBean); + Method method = osBeanClass.getDeclaredMethod(methodName); + return () -> { + try { + return (Long) method.invoke(osBean); + } catch (IllegalAccessException | InvocationTargetException e) { + return null; + } + }; + } catch (ClassNotFoundException | ClassCastException | NoSuchMethodException e) { + return null; + } + } + + public static Supplier openFileDescriptorCount() { + return openFileDescriptorCount; + } + + public static Supplier maxFileDescriptorCount() { + return maxFileDescriptorCount; + } + + private FileDescriptorMethods() {} +} diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java new file mode 100644 index 000000000000..b257952ed350 --- /dev/null +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java @@ -0,0 +1,57 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; + +import static io.opentelemetry.instrumentation.runtimemetrics.java8.ScopeUtil.EXPECTED_SCOPE; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; +import java.util.function.Supplier; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class ExperimentalFileDescriptorTest { + @RegisterExtension + static final InstrumentationExtension testing = LibraryInstrumentationExtension.create(); + + @Test + void registerObservers() { + Supplier openFileDescriptor = () -> 10L; + Supplier maxFileDescriptor = () -> 10000L; + + ExperimentalFileDescriptor.registerObservers( + testing.getOpenTelemetry(), openFileDescriptor, maxFileDescriptor); + + testing.waitAndAssertMetrics( + "io.opentelemetry.runtime-telemetry-java8", + "os.file.descriptor.open", + metrics -> + metrics.anySatisfy( + metricData -> + assertThat(metricData) + .hasInstrumentationScope(EXPECTED_SCOPE) + .hasDescription("number of open file descriptors") + .hasUnit("{file}") + .hasDoubleGaugeSatisfying( + gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(10L))))); + testing.waitAndAssertMetrics( + "io.opentelemetry.runtime-telemetry-java8", + "os.file.descriptor.max", + metrics -> + metrics.anySatisfy( + metricData -> + assertThat(metricData) + .hasInstrumentationScope(EXPECTED_SCOPE) + .hasDescription("maximum number of file descriptors") + .hasUnit("{file}") + .hasDoubleGaugeSatisfying( + gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(10000L))))); + } +} From ee39c6bdb7dd2a6f5c9bea2bce310af5526b2f7d Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Mon, 22 Jul 2024 19:45:21 +0800 Subject: [PATCH 2/9] fix code style --- .../java8/internal/ExperimentalFileDescriptor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index 51d1b614d44b..915a11b75e91 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -67,6 +67,5 @@ static List registerObservers( return observables; } - private ExperimentalFileDescriptor() { - } + private ExperimentalFileDescriptor() {} } From 5dc42b31a71272e0e4e3ce86e070f20fd0b91ee9 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Thu, 25 Jul 2024 10:30:02 +0800 Subject: [PATCH 3/9] fix some desciption and name and some test --- ...ntelemetry-instrumentation-annotations.txt | 2 +- .../opentelemetry-instrumentation-api.txt | 2 +- ...pentelemetry-spring-boot-autoconfigure.txt | 10 +-- .../opentelemetry-spring-boot-starter.txt | 2 +- .../runtimemetrics/java8/Cpu.java | 6 +- .../java8/internal/ExperimentalCpu.java | 2 +- .../internal/ExperimentalFileDescriptor.java | 16 ++-- .../java8/internal/FileDescriptorMethods.java | 82 ------------------- ...thods.java => OperatingSystemMethods.java} | 75 ++++++++++++----- .../ExperimentalFileDescriptorTest.java | 5 +- 10 files changed, 71 insertions(+), 131 deletions(-) delete mode 100644 instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java rename instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/{CpuMethods.java => OperatingSystemMethods.java} (57%) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-annotations.txt b/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-annotations.txt index 30fcdad18fc6..9711244d9a5a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-annotations.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-annotations.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-instrumentation-annotations-2.7.0-SNAPSHOT.jar against opentelemetry-instrumentation-annotations-2.5.0.jar +Comparing source compatibility of opentelemetry-instrumentation-annotations-2.7.0-SNAPSHOT.jar against opentelemetry-instrumentation-annotations-2.6.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-api.txt index bd8a83882071..e6f29db1607f 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-instrumentation-api.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-instrumentation-api-2.7.0-SNAPSHOT.jar against opentelemetry-instrumentation-api-2.5.0.jar +Comparing source compatibility of opentelemetry-instrumentation-api-2.7.0-SNAPSHOT.jar against opentelemetry-instrumentation-api-2.6.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-autoconfigure.txt b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-autoconfigure.txt index 6571939e3aff..f0024ddc916a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-autoconfigure.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-autoconfigure.txt @@ -1,8 +1,2 @@ -Comparing source compatibility of opentelemetry-spring-boot-autoconfigure-2.7.0-SNAPSHOT.jar against -+++ NEW CLASS: PUBLIC(+) io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration (not serializable) - +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. - +++ NEW SUPERCLASS: java.lang.Object - +++ NEW CONSTRUCTOR: PUBLIC(+) OpenTelemetryAutoConfiguration() - +++ NEW ANNOTATION: org.springframework.context.annotation.Configuration - +++ NEW ANNOTATION: org.springframework.boot.context.properties.EnableConfigurationProperties - +++ NEW ELEMENT: value=io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties,io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.PropagationProperties (+) +Comparing source compatibility of opentelemetry-spring-boot-autoconfigure-2.7.0-SNAPSHOT.jar against opentelemetry-spring-boot-autoconfigure-2.6.0.jar +No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt index fbd4427818ca..32590bb0c2c9 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-spring-boot-starter.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-spring-boot-starter-2.7.0-SNAPSHOT.jar against +Comparing source compatibility of opentelemetry-spring-boot-starter-2.7.0-SNAPSHOT.jar against opentelemetry-spring-boot-starter-2.6.0.jar No changes. \ No newline at end of file diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/Cpu.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/Cpu.java index 1263c1b46560..ad844668441b 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/Cpu.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/Cpu.java @@ -7,8 +7,8 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.metrics.Meter; -import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.CpuMethods; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil; +import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.OperatingSystemMethods; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -48,8 +48,8 @@ public static List registerObservers(OpenTelemetry openTelemetry) return INSTANCE.registerObservers( openTelemetry, Runtime.getRuntime()::availableProcessors, - CpuMethods.processCpuTime(), - CpuMethods.processCpuUtilization()); + OperatingSystemMethods.processCpuTime(), + OperatingSystemMethods.processCpuUtilization()); } // Visible for testing diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalCpu.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalCpu.java index 5fd928495687..a297599f902d 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalCpu.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalCpu.java @@ -27,7 +27,7 @@ public static List registerObservers(OpenTelemetry openTelemetry) return registerObservers( openTelemetry, ManagementFactory.getOperatingSystemMXBean(), - CpuMethods.systemCpuUtilization()); + OperatingSystemMethods.systemCpuUtilization()); } // Visible for testing diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index 915a11b75e91..eabe2fe8663a 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -22,8 +22,8 @@ public class ExperimentalFileDescriptor { public static List registerObservers(OpenTelemetry openTelemetry) { return registerObservers( openTelemetry, - FileDescriptorMethods.openFileDescriptorCount(), - FileDescriptorMethods.maxFileDescriptorCount()); + OperatingSystemMethods.openFileDescriptorCount(), + OperatingSystemMethods.maxFileDescriptorCount()); } // Visible for testing @@ -37,9 +37,9 @@ static List registerObservers( if (openFileDescriptorCount != null) { observables.add( meter - .gaugeBuilder("os.file.descriptor.open") - .setDescription("number of open file descriptors") - .setUnit("{file}") + .upDownCounterBuilder("process.open_file_descriptor.count") + .setDescription("Number of file descriptors in use by the process.") + .setUnit("{count}") .buildWithCallback( observableMeasurement -> { Long openCount = openFileDescriptorCount.get(); @@ -52,9 +52,9 @@ static List registerObservers( if (maxFileDescriptorCount != null) { observables.add( meter - .gaugeBuilder("os.file.descriptor.max") - .setDescription("maximum number of file descriptors") - .setUnit("{file}") + .upDownCounterBuilder("process.open_file_descriptor.limit") + .setDescription("Measure of max file descriptors.") + .setUnit("{count}") .buildWithCallback( observableMeasurement -> { Long maxCount = maxFileDescriptorCount.get(); diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java deleted file mode 100644 index 2ef2dff5fcea..000000000000 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/FileDescriptorMethods.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; - -import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.function.Supplier; -import javax.annotation.Nullable; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public class FileDescriptorMethods { - - private static final String OS_BEAN_J9 = "com.ibm.lang.management.UnixOperatingSystemMXBean"; - private static final String OS_BEAN_HOTSPOT = "com.sun.management.UnixOperatingSystemMXBean"; - private static final String METHOD_OPEN_FILE_DESCRIPTOR_COUNT = "getOpenFileDescriptorCount"; - private static final String METHOD_MAX_FILE_DESCRIPTOR_COUNT = "getMaxFileDescriptorCount"; - - @Nullable private static final Supplier openFileDescriptorCount; - @Nullable private static final Supplier maxFileDescriptorCount; - - static { - OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); - - Supplier openFileDescriptorCountSupplier = - methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_OPEN_FILE_DESCRIPTOR_COUNT); - if (openFileDescriptorCountSupplier == null) { - // More users will be on hotspot than j9, so check for j9 second - openFileDescriptorCountSupplier = - methodInvoker(osBean, OS_BEAN_J9, METHOD_OPEN_FILE_DESCRIPTOR_COUNT); - } - - openFileDescriptorCount = openFileDescriptorCountSupplier; - - Supplier maxFileDescriptorCountSupplier = - methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_MAX_FILE_DESCRIPTOR_COUNT); - if (maxFileDescriptorCountSupplier == null) { - // More users will be on hotspot than j9, so check for j9 second - maxFileDescriptorCountSupplier = - methodInvoker(osBean, OS_BEAN_J9, METHOD_MAX_FILE_DESCRIPTOR_COUNT); - } - - maxFileDescriptorCount = maxFileDescriptorCountSupplier; - } - - @Nullable - @SuppressWarnings("ReturnValueIgnored") - private static Supplier methodInvoker( - OperatingSystemMXBean osBean, String osBeanClassName, String methodName) { - try { - Class osBeanClass = Class.forName(osBeanClassName); - osBeanClass.cast(osBean); - Method method = osBeanClass.getDeclaredMethod(methodName); - return () -> { - try { - return (Long) method.invoke(osBean); - } catch (IllegalAccessException | InvocationTargetException e) { - return null; - } - }; - } catch (ClassNotFoundException | ClassCastException | NoSuchMethodException e) { - return null; - } - } - - public static Supplier openFileDescriptorCount() { - return openFileDescriptorCount; - } - - public static Supplier maxFileDescriptorCount() { - return maxFileDescriptorCount; - } - - private FileDescriptorMethods() {} -} diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/CpuMethods.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/OperatingSystemMethods.java similarity index 57% rename from instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/CpuMethods.java rename to instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/OperatingSystemMethods.java index 479170865901..9ab782d560c7 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/CpuMethods.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/OperatingSystemMethods.java @@ -16,38 +16,33 @@ * This class is internal and is hence not for public use. Its APIs are unstable and can change at * any time. */ -public final class CpuMethods { +public final class OperatingSystemMethods { private static final String OS_BEAN_J9 = "com.ibm.lang.management.OperatingSystemMXBean"; private static final String OS_BEAN_HOTSPOT = "com.sun.management.OperatingSystemMXBean"; + private static final String UNIX_OS_BEAN_J9 = "com.ibm.lang.management.UnixOperatingSystemMXBean"; + private static final String UNIX_OS_BEAN_HOTSPOT = "com.sun.management.UnixOperatingSystemMXBean"; private static final String METHOD_PROCESS_CPU_TIME = "getProcessCpuTime"; private static final String METHOD_PROCESS_CPU_LOAD = "getProcessCpuLoad"; private static final String METHOD_CPU_LOAD = "getCpuLoad"; private static final String METHOD_SYSTEM_CPU_LOAD = "getSystemCpuLoad"; + private static final String METHOD_OPEN_FILE_DESCRIPTOR_COUNT = "getOpenFileDescriptorCount"; + private static final String METHOD_MAX_FILE_DESCRIPTOR_COUNT = "getMaxFileDescriptorCount"; @Nullable private static final Supplier processCpuTime; @Nullable private static final Supplier processCpuUtilization; @Nullable private static final Supplier systemCpuUtilization; + @Nullable private static final Supplier openFileDescriptorCount; + @Nullable private static final Supplier maxFileDescriptorCount; static { OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); - Supplier processCpuTimeSupplier = - methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_PROCESS_CPU_TIME, Long.class); - if (processCpuTimeSupplier == null) { - // More users will be on hotspot than j9, so check for j9 second - processCpuTimeSupplier = - methodInvoker(osBean, OS_BEAN_J9, METHOD_PROCESS_CPU_TIME, Long.class); - } - processCpuTime = processCpuTimeSupplier; + processCpuTime = + findMethod(osBean, OS_BEAN_HOTSPOT, OS_BEAN_J9, METHOD_PROCESS_CPU_TIME, Long.class); - Supplier processCpuSupplier = - methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_PROCESS_CPU_LOAD, Double.class); - if (processCpuSupplier == null) { - // More users will be on hotspot than j9, so check for j9 second - processCpuSupplier = methodInvoker(osBean, OS_BEAN_J9, METHOD_PROCESS_CPU_LOAD, Double.class); - } - processCpuUtilization = processCpuSupplier; + processCpuUtilization = + findMethod(osBean, OS_BEAN_HOTSPOT, OS_BEAN_J9, METHOD_PROCESS_CPU_LOAD, Double.class); // As of java 14, com.sun.management.OperatingSystemMXBean#getCpuLoad() is preferred and // #getSystemCpuLoad() is deprecated @@ -55,13 +50,25 @@ public final class CpuMethods { methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_CPU_LOAD, Double.class); if (systemCpuSupplier == null) { systemCpuSupplier = - methodInvoker(osBean, OS_BEAN_HOTSPOT, METHOD_SYSTEM_CPU_LOAD, Double.class); - } - if (systemCpuSupplier == null) { - // More users will be on hotspot than j9, so check for j9 second - systemCpuSupplier = methodInvoker(osBean, OS_BEAN_J9, METHOD_SYSTEM_CPU_LOAD, Double.class); + findMethod(osBean, OS_BEAN_HOTSPOT, OS_BEAN_J9, METHOD_SYSTEM_CPU_LOAD, Double.class); } systemCpuUtilization = systemCpuSupplier; + + openFileDescriptorCount = + findMethod( + osBean, + UNIX_OS_BEAN_HOTSPOT, + UNIX_OS_BEAN_J9, + METHOD_OPEN_FILE_DESCRIPTOR_COUNT, + Long.class); + + maxFileDescriptorCount = + findMethod( + osBean, + UNIX_OS_BEAN_HOTSPOT, + UNIX_OS_BEAN_J9, + METHOD_MAX_FILE_DESCRIPTOR_COUNT, + Long.class); } @Nullable @@ -87,6 +94,22 @@ private static Supplier methodInvoker( } } + // judge whether use hotspots or openj9 + private static Supplier findMethod( + OperatingSystemMXBean osBean, + String osBeanClassName, + String osBeanJ9ClassName, + String methodName, + Class returnType) { + Supplier processSupplier = methodInvoker(osBean, osBeanClassName, methodName, returnType); + if (processSupplier == null) { + // More users will be on hotspot than j9, so check for j9 second + processSupplier = methodInvoker(osBean, osBeanJ9ClassName, methodName, returnType); + } + + return processSupplier; + } + public static Supplier processCpuTime() { return processCpuTime; } @@ -99,5 +122,13 @@ public static Supplier systemCpuUtilization() { return systemCpuUtilization; } - private CpuMethods() {} + public static Supplier openFileDescriptorCount() { + return openFileDescriptorCount; + } + + public static Supplier maxFileDescriptorCount() { + return maxFileDescriptorCount; + } + + private OperatingSystemMethods() {} } diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java index b257952ed350..93a095585c38 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java @@ -12,12 +12,9 @@ import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import java.util.function.Supplier; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; -import org.mockito.junit.jupiter.MockitoExtension; -@ExtendWith(MockitoExtension.class) -public class ExperimentalFileDescriptorTest { +class ExperimentalFileDescriptorTest { @RegisterExtension static final InstrumentationExtension testing = LibraryInstrumentationExtension.create(); From df6fc6c66aaad2ce4d623778691d6e633ec6a1e2 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Thu, 25 Jul 2024 14:52:07 +0800 Subject: [PATCH 4/9] fix tests --- .../ExperimentalFileDescriptorTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java index 93a095585c38..dc35e667409e 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java @@ -28,27 +28,27 @@ void registerObservers() { testing.waitAndAssertMetrics( "io.opentelemetry.runtime-telemetry-java8", - "os.file.descriptor.open", + "process.open_file_descriptor.count", metrics -> metrics.anySatisfy( metricData -> assertThat(metricData) .hasInstrumentationScope(EXPECTED_SCOPE) - .hasDescription("number of open file descriptors") - .hasUnit("{file}") - .hasDoubleGaugeSatisfying( - gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(10L))))); + .hasDescription("Number of file descriptors in use by the process.") + .hasUnit("{count}") + .hasLongSumSatisfying( + sum -> sum.hasPointsSatisfying(point -> point.hasValue(10L))))); testing.waitAndAssertMetrics( "io.opentelemetry.runtime-telemetry-java8", - "os.file.descriptor.max", + "process.open_file_descriptor.limit", metrics -> metrics.anySatisfy( metricData -> assertThat(metricData) .hasInstrumentationScope(EXPECTED_SCOPE) - .hasDescription("maximum number of file descriptors") - .hasUnit("{file}") - .hasDoubleGaugeSatisfying( - gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(10000L))))); + .hasDescription("Measure of max file descriptors.") + .hasUnit("{count}") + .hasLongSumSatisfying( + sum -> sum.hasPointsSatisfying(point -> point.hasValue(10000L))))); } } From 752143dd159cfec5385299019b10e9609a025801 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Sun, 24 Nov 2024 10:15:20 +0800 Subject: [PATCH 5/9] add comment relate to issue --- .../java8/internal/ExperimentalFileDescriptor.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index eabe2fe8663a..952958892796 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -12,7 +12,10 @@ import java.util.function.Supplier; /** - * Registers measurements that generate experimental metrics about file descriptor. + * Registers measurements that generate experimental metrics about file descriptor. This metrics are + * experimental, see File Descriptor metrics + * semantic conventions * *

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. From 71e5ccded21e72b66d61cfafa403a71fd5f89096 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Thu, 28 Nov 2024 23:16:57 +0800 Subject: [PATCH 6/9] fix --- .../java8/internal/ExperimentalFileDescriptor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index 952958892796..72ac9939eafc 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -12,10 +12,10 @@ import java.util.function.Supplier; /** - * Registers measurements that generate experimental metrics about file descriptor. This metrics are + * Registers measurements that generate experimental metrics about file descriptor. These metrics are * experimental, see File Descriptor metrics - * semantic conventions + * semantic conventions. * *

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. @@ -46,7 +46,7 @@ static List registerObservers( .buildWithCallback( observableMeasurement -> { Long openCount = openFileDescriptorCount.get(); - if (openCount != null && openCount >= 0) { + if (openCount != null && openCount > 0) { observableMeasurement.record(openCount); } })); @@ -61,7 +61,7 @@ static List registerObservers( .buildWithCallback( observableMeasurement -> { Long maxCount = maxFileDescriptorCount.get(); - if (maxCount != null && maxCount >= 0) { + if (maxCount != null && maxCount > 0) { observableMeasurement.record(maxCount); } })); From 6ea98ec78ef394686d074b284db05a37d9a12d1b Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Thu, 28 Nov 2024 23:19:23 +0800 Subject: [PATCH 7/9] fix --- .../java8/internal/ExperimentalFileDescriptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index 72ac9939eafc..381a3b2e6a13 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -61,7 +61,7 @@ static List registerObservers( .buildWithCallback( observableMeasurement -> { Long maxCount = maxFileDescriptorCount.get(); - if (maxCount != null && maxCount > 0) { + if (maxCount != null && maxCount >= 0) { observableMeasurement.record(maxCount); } })); From 298eb0cd4cea70da0ba06c0d964228326b449ba2 Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Fri, 29 Nov 2024 22:07:11 +0800 Subject: [PATCH 8/9] code style --- .../java8/internal/ExperimentalFileDescriptor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index 381a3b2e6a13..f7ae0f445817 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -12,8 +12,8 @@ import java.util.function.Supplier; /** - * Registers measurements that generate experimental metrics about file descriptor. These metrics are - * experimental, see File Descriptor metrics * semantic conventions. * From cc4fb9b25c28ac4d6269495779f237dab42bbc2f Mon Sep 17 00:00:00 2001 From: xiangtianyu Date: Mon, 9 Dec 2024 21:22:15 +0800 Subject: [PATCH 9/9] modify metrics name --- .../java8/internal/ExperimentalFileDescriptor.java | 4 ++-- .../java8/internal/ExperimentalFileDescriptorTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java index f7ae0f445817..31bb03b27016 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptor.java @@ -40,7 +40,7 @@ static List registerObservers( if (openFileDescriptorCount != null) { observables.add( meter - .upDownCounterBuilder("process.open_file_descriptor.count") + .upDownCounterBuilder("jvm.open_file_descriptor.count") .setDescription("Number of file descriptors in use by the process.") .setUnit("{count}") .buildWithCallback( @@ -55,7 +55,7 @@ static List registerObservers( if (maxFileDescriptorCount != null) { observables.add( meter - .upDownCounterBuilder("process.open_file_descriptor.limit") + .upDownCounterBuilder("jvm.open_file_descriptor.limit") .setDescription("Measure of max file descriptors.") .setUnit("{count}") .buildWithCallback( diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java index dc35e667409e..81dc58536e5c 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/test/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/ExperimentalFileDescriptorTest.java @@ -28,7 +28,7 @@ void registerObservers() { testing.waitAndAssertMetrics( "io.opentelemetry.runtime-telemetry-java8", - "process.open_file_descriptor.count", + "jvm.open_file_descriptor.count", metrics -> metrics.anySatisfy( metricData -> @@ -40,7 +40,7 @@ void registerObservers() { sum -> sum.hasPointsSatisfying(point -> point.hasValue(10L))))); testing.waitAndAssertMetrics( "io.opentelemetry.runtime-telemetry-java8", - "process.open_file_descriptor.limit", + "jvm.open_file_descriptor.limit", metrics -> metrics.anySatisfy( metricData ->