This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new c29bab6ff78 HIVE-28613: OTEL: Collect & expose JVM metrics for LLAP
daemons. (#5533). (Ayush Saxena, reviewed by Simhadri Govindappa, Tanishq Chugh)
c29bab6ff78 is described below
commit c29bab6ff780e6d1cea74e995a50528364ae383a
Author: Ayush Saxena <[email protected]>
AuthorDate: Thu Nov 7 18:03:36 2024 +0530
HIVE-28613: OTEL: Collect & expose JVM metrics for LLAP daemons. (#5533).
(Ayush Saxena, reviewed by Simhadri Govindappa, Tanishq Chugh)
---
common/pom.xml | 6 +
.../apache/hadoop/hive/common/OTELJavaMetrics.java | 142 +++++++++++++++++++++
llap-server/pom.xml | 11 ++
.../hadoop/hive/llap/daemon/impl/LlapDaemon.java | 20 +++
.../hadoop/hive/llap/metrics/LLAPOTELExporter.java | 46 +++++++
.../apache/hive/service/server/HiveServer2.java | 19 ++-
.../apache/hive/service/servlet/OTELExporter.java | 136 +-------------------
7 files changed, 244 insertions(+), 136 deletions(-)
diff --git a/common/pom.xml b/common/pom.xml
index cf1cf7cfde9..9583b331256 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -330,6 +330,12 @@
<groupId>javolution</groupId>
<artifactId>javolution</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.opentelemetry</groupId>
+ <artifactId>opentelemetry-api</artifactId>
+ <version>${otel.version}</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
<profiles>
<profile>
diff --git a/common/src/java/org/apache/hadoop/hive/common/OTELJavaMetrics.java
b/common/src/java/org/apache/hadoop/hive/common/OTELJavaMetrics.java
new file mode 100644
index 00000000000..a7ab14415f5
--- /dev/null
+++ b/common/src/java/org/apache/hadoop/hive/common/OTELJavaMetrics.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.common;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.MemoryUsage;
+import java.lang.management.OperatingSystemMXBean;
+import java.lang.management.ThreadMXBean;
+
+import com.sun.management.UnixOperatingSystemMXBean;
+import io.opentelemetry.api.metrics.DoubleGauge;
+import io.opentelemetry.api.metrics.Meter;
+
+public class OTELJavaMetrics {
+
+ // The MXBean used to fetch values
+ private final MemoryMXBean memoryMXBean;
+ private final ThreadMXBean threadMXBean;
+ private final OperatingSystemMXBean osMXBean;
+
+ // Memory Level Gauge
+ private final DoubleGauge memNonHeapUsedMGauge;
+ private final DoubleGauge memNonHeapMaxM;
+ private final DoubleGauge memHeapUsedM;
+ private final DoubleGauge memHeapCommittedM;
+ private final DoubleGauge memHeapMaxM;
+ private final DoubleGauge memMaxM;
+ private final DoubleGauge memNonHeapCommittedM;
+
+ // Thread Level Gauge
+ private final DoubleGauge threadsNew;
+ private final DoubleGauge threadsRunnable;
+ private final DoubleGauge threadsBlocked;
+ private final DoubleGauge threadsWaiting;
+ private final DoubleGauge threadsTimedWaiting;
+ private final DoubleGauge threadsTerminated;
+
+ // OS Level Gauge
+ private final DoubleGauge systemLoadAverage;
+ private final DoubleGauge systemCpuLoad;
+ private final DoubleGauge committedVirtualMemorySize;
+ private final DoubleGauge processCpuTime;
+ private final DoubleGauge freePhysicalMemorySize;
+ private final DoubleGauge freeSwapSpaceSize;
+ private final DoubleGauge totalPhysicalMemorySize;
+ private final DoubleGauge processCpuLoad;
+
+ // 1 MB Constant
+ static final float M = 1024 * 1024;
+
+ public OTELJavaMetrics(Meter meter) {
+ memoryMXBean = ManagementFactory.getMemoryMXBean();
+ threadMXBean = ManagementFactory.getThreadMXBean();
+ osMXBean = ManagementFactory.getOperatingSystemMXBean();
+ memNonHeapUsedMGauge =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapUsedM.name()).build();
+ memNonHeapCommittedM =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapCommittedM.name()).build();
+ memNonHeapMaxM =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapMaxM.name()).build();
+ memHeapUsedM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapUsedM.name()).build();
+ memHeapCommittedM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapCommittedM.name()).build();
+ memHeapMaxM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapMaxM.name()).build();
+ memMaxM = meter.gaugeBuilder(JvmMetricsInfo.MemMaxM.name()).build();
+
+ // Thread Level Counters
+ threadsNew = meter.gaugeBuilder(JvmMetricsInfo.ThreadsNew.name()).build();
+ threadsRunnable =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsRunnable.name()).build();
+ threadsBlocked =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsBlocked.name()).build();
+ threadsWaiting =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsWaiting.name()).build();
+ threadsTimedWaiting =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsTimedWaiting.name()).build();
+ threadsTerminated =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsTerminated.name()).build();
+
+ // Os Level Counters
+ systemLoadAverage = meter.gaugeBuilder("SystemLoadAverage").build();
+ systemCpuLoad = meter.gaugeBuilder("SystemCpuLoad").build();
+ committedVirtualMemorySize =
meter.gaugeBuilder("CommittedVirtualMemorySize").build();
+
+ processCpuTime = meter.gaugeBuilder("ProcessCpuTime").build();
+ freePhysicalMemorySize =
meter.gaugeBuilder("FreePhysicalMemorySize").build();
+
+ freeSwapSpaceSize = meter.gaugeBuilder("FreeSwapSpaceSize").build();
+ totalPhysicalMemorySize =
meter.gaugeBuilder("TotalPhysicalMemorySize").build();
+ processCpuLoad = meter.gaugeBuilder("ProcessCpuLoad").build();
+ }
+
+ public void setJvmMetrics() {
+ setMemoryValuesValues();
+ setThreadCountValues();
+ setOsLevelValues();
+ }
+
+ private void setMemoryValuesValues() {
+ MemoryUsage memNonHeap = memoryMXBean.getNonHeapMemoryUsage();
+ MemoryUsage memHeap = memoryMXBean.getHeapMemoryUsage();
+ Runtime runtime = Runtime.getRuntime();
+ memNonHeapUsedMGauge.set(memNonHeap.getUsed() / M);
+ memNonHeapCommittedM.set(memNonHeap.getCommitted() / M);
+ memNonHeapMaxM.set(memNonHeap.getMax() / M);
+ memHeapUsedM.set(memHeap.getUsed() / M);
+ memHeapCommittedM.set(memHeap.getCommitted() / M);
+ memHeapMaxM.set(memHeap.getMax() / M);
+ memMaxM.set(runtime.maxMemory() / M);
+ }
+
+ private void setThreadCountValues() {
+ JvmMetrics.ThreadCountResult threadCountResult =
JvmMetrics.getThreadCountResult(threadMXBean);
+ threadsNew.set(threadCountResult.threadsNew);
+ threadsRunnable.set(threadCountResult.threadsRunnable);
+ threadsBlocked.set(threadCountResult.threadsBlocked);
+ threadsWaiting.set(threadCountResult.threadsWaiting);
+ threadsTimedWaiting.set(threadCountResult.threadsTimedWaiting);
+ threadsTerminated.set(threadCountResult.threadsTerminated);
+ }
+
+ private void setOsLevelValues() {
+ systemLoadAverage.set(osMXBean.getSystemLoadAverage());
+ if (osMXBean instanceof UnixOperatingSystemMXBean) {
+ UnixOperatingSystemMXBean unixMxBean = (UnixOperatingSystemMXBean)
osMXBean;
+ systemCpuLoad.set(unixMxBean.getSystemCpuLoad());
+
committedVirtualMemorySize.set(unixMxBean.getCommittedVirtualMemorySize());
+ processCpuTime.set(unixMxBean.getProcessCpuTime());
+ freePhysicalMemorySize.set(unixMxBean.getFreePhysicalMemorySize());
+ freeSwapSpaceSize.set(unixMxBean.getFreeSwapSpaceSize());
+ totalPhysicalMemorySize.set(unixMxBean.getTotalPhysicalMemorySize());
+ processCpuLoad.set(unixMxBean.getProcessCpuLoad());
+ }
+ }
+}
diff --git a/llap-server/pom.xml b/llap-server/pom.xml
index d90296d6023..4a40a2e1e72 100644
--- a/llap-server/pom.xml
+++ b/llap-server/pom.xml
@@ -459,6 +459,17 @@
<artifactId>hbase-hadoop-compat</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>io.opentelemetry</groupId>
+ <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
+ <version>${otel.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.opentelemetry</groupId>
+ <artifactId>opentelemetry-exporter-otlp</artifactId>
+ <version>${otel.version}</version>
+ </dependency>
</dependencies>
<build>
<sourceDirectory>${basedir}/src/java</sourceDirectory>
diff --git
a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
index 106f1826f95..78dd9336268 100644
---
a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
+++
b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
@@ -64,6 +64,7 @@ import
org.apache.hadoop.hive.llap.daemon.rpc.LlapDaemonProtocolProtos.SetCapaci
import
org.apache.hadoop.hive.llap.daemon.rpc.LlapDaemonProtocolProtos.SetCapacityResponseProto;
import org.apache.hadoop.hive.llap.daemon.services.impl.LlapWebServices;
import org.apache.hadoop.hive.llap.io.api.LlapProxy;
+import org.apache.hadoop.hive.llap.metrics.LLAPOTELExporter;
import org.apache.hadoop.hive.llap.metrics.LlapDaemonExecutorMetrics;
import org.apache.hadoop.hive.llap.metrics.LlapDaemonJvmMetrics;
import org.apache.hadoop.hive.llap.metrics.LlapMetricsSystem;
@@ -89,6 +90,9 @@ import org.apache.hadoop.yarn.util.ConverterUtils;
import org.apache.hive.common.util.HiveVersionInfo;
import org.apache.hive.common.util.ShutdownHookManager;
import org.apache.logging.log4j.core.config.Configurator;
+
+import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -124,6 +128,7 @@ public class LlapDaemon extends CompositeService implements
ContainerRunner, Lla
private final DaemonId daemonId;
private final SocketFactory socketFactory;
private final LlapTokenManager llapTokenManager;
+ private LLAPOTELExporter otelExporter = null;
// TODO Not the best way to share the address
private final AtomicReference<InetSocketAddress> srvAddress = new
AtomicReference<>(),
@@ -515,6 +520,17 @@ public class LlapDaemon extends CompositeService
implements ContainerRunner, Lla
"LlapDaemon serviceStart complete. RPC Port={}, ManagementPort={},
ShuflePort={}, WebPort={}",
server.getBindAddress().getPort(),
server.getManagementBindAddress().getPort(),
ShuffleHandler.get().getPort(), (webServices == null ? "" :
webServices.getPort()));
+
+ long otelExporterFrequency =
+ HiveConf.getTimeVar(getConfig(),
ConfVars.HIVE_OTEL_METRICS_FREQUENCY_SECONDS, TimeUnit.MILLISECONDS);
+ if (otelExporterFrequency > 0) {
+ this.otelExporter = new LLAPOTELExporter(GlobalOpenTelemetry.get(),
otelExporterFrequency,
+ server.getBindAddress().toString());
+ otelExporter.setName("LLAP OTEL Exporter");
+ otelExporter.setDaemon(true);
+ otelExporter.start();
+ LOG.info("Started OTEL exporter with frequency {}",
otelExporterFrequency);
+ }
}
public void serviceStop() throws Exception {
@@ -555,6 +571,10 @@ public class LlapDaemon extends CompositeService
implements ContainerRunner, Lla
if (fnLocalizer != null) {
fnLocalizer.close();
}
+
+ if (otelExporter != null) {
+ otelExporter.interrupt();
+ }
}
public static void main(String[] args) throws Exception {
diff --git
a/llap-server/src/java/org/apache/hadoop/hive/llap/metrics/LLAPOTELExporter.java
b/llap-server/src/java/org/apache/hadoop/hive/llap/metrics/LLAPOTELExporter.java
new file mode 100644
index 00000000000..aadddd55334
--- /dev/null
+++
b/llap-server/src/java/org/apache/hadoop/hive/llap/metrics/LLAPOTELExporter.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.llap.metrics;
+
+import io.opentelemetry.api.OpenTelemetry;
+
+import org.apache.hadoop.hive.common.OTELJavaMetrics;
+
+public class LLAPOTELExporter extends Thread {
+
+ private static final String JVM_SCOPE = OTELJavaMetrics.class.getName();
+ private final OTELJavaMetrics jvmMetrics;
+ private final long frequency;
+
+ public LLAPOTELExporter(OpenTelemetry openTelemetry, long frequency, String
addr) {
+ this.jvmMetrics = new OTELJavaMetrics(openTelemetry.getMeter(JVM_SCOPE +
":" + addr));
+ this.frequency = frequency;
+ }
+
+ @Override
+ public void run() {
+ while (true) {
+ jvmMetrics.setJvmMetrics();
+ try {
+ Thread.sleep(frequency);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java
b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index b006d49cf0a..540df7beb4e 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -136,6 +136,8 @@ import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooDefs.Perms;
import org.apache.zookeeper.data.ACL;
+
+import io.opentelemetry.api.GlobalOpenTelemetry;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletHolder;
@@ -513,14 +515,19 @@ public class HiveServer2 extends CompositeService {
long otelExporterFrequency =
hiveConf.getTimeVar(ConfVars.HIVE_OTEL_METRICS_FREQUENCY_SECONDS,
TimeUnit.MILLISECONDS);
if (otelExporterFrequency > 0) {
- otelExporter = new
OTELExporter(AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(),
- cliService.getSessionManager(), otelExporterFrequency);
+ try {
+ otelExporter =
+ new OTELExporter(GlobalOpenTelemetry.get(),
cliService.getSessionManager(), otelExporterFrequency,
+ getServerHost());
- otelExporter.setName("OTEL Exporter");
- otelExporter.setDaemon(true);
- otelExporter.start();
+ otelExporter.setName("OTEL Exporter");
+ otelExporter.setDaemon(true);
+ otelExporter.start();
- LOG.info("Started OTEL exporter with frequency {}",
otelExporterFrequency);
+ LOG.info("Started OTEL exporter with frequency {}",
otelExporterFrequency);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
// Add a shutdown hook for catching SIGTERM & SIGINT
diff --git a/service/src/java/org/apache/hive/service/servlet/OTELExporter.java
b/service/src/java/org/apache/hive/service/servlet/OTELExporter.java
index f8a2d55fea6..ceef60f1c7a 100644
--- a/service/src/java/org/apache/hive/service/servlet/OTELExporter.java
+++ b/service/src/java/org/apache/hive/service/servlet/OTELExporter.java
@@ -18,11 +18,6 @@
package org.apache.hive.service.servlet;
-import java.lang.management.ManagementFactory;
-import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryUsage;
-import java.lang.management.OperatingSystemMXBean;
-import java.lang.management.ThreadMXBean;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -30,11 +25,8 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-import com.sun.management.UnixOperatingSystemMXBean;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
-import io.opentelemetry.api.metrics.DoubleGauge;
-import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;
@@ -42,8 +34,7 @@ import io.opentelemetry.sdk.internal.AttributesMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.hadoop.hive.common.JvmMetrics;
-import org.apache.hadoop.hive.common.JvmMetricsInfo;
+import org.apache.hadoop.hive.common.OTELJavaMetrics;
import org.apache.hadoop.hive.ql.QueryDisplay;
import org.apache.hadoop.hive.ql.QueryInfo;
import org.apache.hive.service.cli.operation.OperationManager;
@@ -51,7 +42,7 @@ import org.apache.hive.service.cli.session.SessionManager;
public class OTELExporter extends Thread {
private static final String QUERY_SCOPE = OTELExporter.class.getName();
- private static final String JVM_SCOPE = JVMMetrics.class.getName();
+ private static final String JVM_SCOPE = OTELJavaMetrics.class.getName();
private static final Logger LOG =
LoggerFactory.getLogger(OTELExporter.class);
private final OperationManager operationManager;
private final Set<String> historicalQueryId;
@@ -59,12 +50,11 @@ public class OTELExporter extends Thread {
private final Tracer tracer;
private final Map<String, Span> queryIdToSpanMap;
private final Map<String, Set<String>> queryIdToTasksMap;
- private final JVMMetrics jvmMetrics;
+ private final OTELJavaMetrics jvmMetrics;
-
- public OTELExporter(OpenTelemetry openTelemetry, SessionManager
sessionManager, long frequency) {
- this.tracer = openTelemetry.getTracer(QUERY_SCOPE);
- this.jvmMetrics = new JVMMetrics(openTelemetry.getMeter(JVM_SCOPE));
+ public OTELExporter(OpenTelemetry openTelemetry, SessionManager
sessionManager, long frequency, String addr) {
+ this.tracer = openTelemetry.getTracer(QUERY_SCOPE + ":" + addr);
+ this.jvmMetrics = new OTELJavaMetrics(openTelemetry.getMeter(JVM_SCOPE +
":" + addr));
this.operationManager = sessionManager.getOperationManager();
this.historicalQueryId = new HashSet<>();
this.frequency = frequency;
@@ -236,118 +226,4 @@ public class OTELExporter extends Thread {
attributes.put(AttributeKey.longKey("EndTime"), taskDisplay.getEndTime());
return attributes;
}
-
- static class JVMMetrics {
-
- // The MXBean used to fetch values
- private final MemoryMXBean memoryMXBean;
- private final ThreadMXBean threadMXBean;
- private final OperatingSystemMXBean osMXBean;
-
- // Memory Level Gauge
- private final DoubleGauge memNonHeapUsedMGauge;
- private final DoubleGauge memNonHeapMaxM;
- private final DoubleGauge memHeapUsedM;
- private final DoubleGauge memHeapCommittedM;
- private final DoubleGauge memHeapMaxM;
- private final DoubleGauge memMaxM;
- private final DoubleGauge memNonHeapCommittedM;
-
- // Thread Level Gauge
- private final DoubleGauge threadsNew;
- private final DoubleGauge threadsRunnable;
- private final DoubleGauge threadsBlocked;
- private final DoubleGauge threadsWaiting;
- private final DoubleGauge threadsTimedWaiting;
- private final DoubleGauge threadsTerminated;
-
- // OS Level Gauge
- private final DoubleGauge systemLoadAverage;
- private final DoubleGauge systemCpuLoad;
- private final DoubleGauge committedVirtualMemorySize;
- private final DoubleGauge processCpuTime;
- private final DoubleGauge freePhysicalMemorySize;
- private final DoubleGauge freeSwapSpaceSize;
- private final DoubleGauge totalPhysicalMemorySize;
- private final DoubleGauge processCpuLoad;
-
- // 1 MB Constant
- static final float M = 1024 * 1024;
-
- public JVMMetrics(Meter meter) {
- memoryMXBean = ManagementFactory.getMemoryMXBean();
- threadMXBean = ManagementFactory.getThreadMXBean();
- osMXBean = ManagementFactory.getOperatingSystemMXBean();
- memNonHeapUsedMGauge =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapUsedM.name()).build();
- memNonHeapCommittedM =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapCommittedM.name()).build();
- memNonHeapMaxM =
meter.gaugeBuilder(JvmMetricsInfo.MemNonHeapMaxM.name()).build();
- memHeapUsedM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapUsedM.name()).build();
- memHeapCommittedM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapCommittedM.name()).build();
- memHeapMaxM =
meter.gaugeBuilder(JvmMetricsInfo.MemHeapMaxM.name()).build();
- memMaxM = meter.gaugeBuilder(JvmMetricsInfo.MemMaxM.name()).build();
-
- // Thread Level Counters
- threadsNew =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsNew.name()).build();
- threadsRunnable =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsRunnable.name()).build();
- threadsBlocked =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsBlocked.name()).build();
- threadsWaiting =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsWaiting.name()).build();
- threadsTimedWaiting =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsTimedWaiting.name()).build();
- threadsTerminated =
meter.gaugeBuilder(JvmMetricsInfo.ThreadsTerminated.name()).build();
-
- // Os Level Counters
- systemLoadAverage = meter.gaugeBuilder("SystemLoadAverage").build();
- systemCpuLoad = meter.gaugeBuilder("SystemCpuLoad").build();
- committedVirtualMemorySize =
meter.gaugeBuilder("CommittedVirtualMemorySize").build();
-
- processCpuTime = meter.gaugeBuilder("ProcessCpuTime").build();
- freePhysicalMemorySize =
meter.gaugeBuilder("FreePhysicalMemorySize").build();
-
- freeSwapSpaceSize = meter.gaugeBuilder("FreeSwapSpaceSize").build();
- totalPhysicalMemorySize =
meter.gaugeBuilder("TotalPhysicalMemorySize").build();
- processCpuLoad = meter.gaugeBuilder("ProcessCpuLoad").build();
- }
-
- public void setJvmMetrics() {
- setMemoryValuesValues();
- setThreadCountValues();
- setOsLevelValues();
- }
-
- private void setMemoryValuesValues() {
- MemoryUsage memNonHeap = memoryMXBean.getNonHeapMemoryUsage();
- MemoryUsage memHeap = memoryMXBean.getHeapMemoryUsage();
- Runtime runtime = Runtime.getRuntime();
- memNonHeapUsedMGauge.set(memNonHeap.getUsed() / M);
- memNonHeapCommittedM.set(memNonHeap.getCommitted() / M);
- memNonHeapMaxM.set(memNonHeap.getMax() / M);
- memHeapUsedM.set(memHeap.getUsed() / M);
- memHeapCommittedM.set(memHeap.getCommitted() / M);
- memHeapMaxM.set(memHeap.getMax() / M);
- memMaxM.set(runtime.maxMemory() / M);
- }
-
- private void setThreadCountValues() {
- JvmMetrics.ThreadCountResult threadCountResult =
JvmMetrics.getThreadCountResult(threadMXBean);
- threadsNew.set(threadCountResult.threadsNew);
- threadsRunnable.set(threadCountResult.threadsRunnable);
- threadsBlocked.set(threadCountResult.threadsBlocked);
- threadsWaiting.set(threadCountResult.threadsWaiting);
- threadsTimedWaiting.set(threadCountResult.threadsTimedWaiting);
- threadsTerminated.set(threadCountResult.threadsTerminated);
- }
-
- private void setOsLevelValues() {
- systemLoadAverage.set(osMXBean.getSystemLoadAverage());
- if (osMXBean instanceof UnixOperatingSystemMXBean) {
- UnixOperatingSystemMXBean unixMxBean = (UnixOperatingSystemMXBean)
osMXBean;
- systemCpuLoad.set(unixMxBean.getSystemCpuLoad());
-
committedVirtualMemorySize.set(unixMxBean.getCommittedVirtualMemorySize());
- processCpuTime.set(unixMxBean.getProcessCpuTime());
- freePhysicalMemorySize.set(unixMxBean.getFreePhysicalMemorySize());
- freeSwapSpaceSize.set(unixMxBean.getFreeSwapSpaceSize());
- totalPhysicalMemorySize.set(unixMxBean.getTotalPhysicalMemorySize());
- processCpuLoad.set(unixMxBean.getProcessCpuLoad());
- }
- }
- }
}