From fc2600b8e2cfb96a9c31cb23a1a10fa74f1dba15 Mon Sep 17 00:00:00 2001 From: Pranav Date: Thu, 11 Apr 2024 15:44:56 -0700 Subject: [PATCH] Adding jvmVersion dimension in JVM Monitor (#16262) --- docs/operations/metrics.md | 26 ++++++------ .../druid/java/util/metrics/JvmMonitor.java | 42 +++++++++++-------- website/.spelling | 1 + 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/docs/operations/metrics.md b/docs/operations/metrics.md index e49b9600181..bf9d63a93b8 100644 --- a/docs/operations/metrics.md +++ b/docs/operations/metrics.md @@ -399,19 +399,19 @@ For more information, see [Enabling Metrics](../configuration/index.md#enabling- |Metric|Description|Dimensions|Normal value| |------|-----------|----------|------------| -|`jvm/pool/committed`|Committed pool|`poolKind`, `poolName`|Close to max pool| -|`jvm/pool/init`|Initial pool|`poolKind`, `poolName`|Varies| -|`jvm/pool/max`|Max pool|`poolKind`, `poolName`|Varies| -|`jvm/pool/used`|Pool used|`poolKind`, `poolName`|< max pool| -|`jvm/bufferpool/count`|Bufferpool count|`bufferpoolName`|Varies| -|`jvm/bufferpool/used`|Bufferpool used|`bufferpoolName`|Close to capacity| -|`jvm/bufferpool/capacity`|Bufferpool capacity|`bufferpoolName`|Varies| -|`jvm/mem/init`|Initial memory|`memKind`|Varies| -|`jvm/mem/max`|Max memory|`memKind`|Varies| -|`jvm/mem/used`|Used memory|`memKind`|< max memory| -|`jvm/mem/committed`|Committed memory|`memKind`|Close to max memory| -|`jvm/gc/count`|Garbage collection count|`gcName` (cms/g1/parallel/etc.), `gcGen` (old/young)|Varies| -|`jvm/gc/cpu`|Count of CPU time in Nanoseconds spent on garbage collection. Note: `jvm/gc/cpu` represents the total time over multiple GC cycles; divide by `jvm/gc/count` to get the mean GC time per cycle.|`gcName`, `gcGen`|Sum of `jvm/gc/cpu` should be within 10-30% of sum of `jvm/cpu/total`, depending on the GC algorithm used (reported by [`JvmCpuMonitor`](../configuration/index.md#enabling-metrics)). | +|`jvm/pool/committed`|Committed pool|`poolKind`, `poolName`, `jvmVersion`|Close to max pool| +|`jvm/pool/init`|Initial pool|`poolKind`, `poolName`, `jvmVersion`|Varies| +|`jvm/pool/max`|Max pool|`poolKind`, `poolName`, `jvmVersion`|Varies| +|`jvm/pool/used`|Pool used|`poolKind`, `poolName`, `jvmVersion`|< max pool| +|`jvm/bufferpool/count`|Bufferpool count|`bufferpoolName`, `jvmVersion`|Varies| +|`jvm/bufferpool/used`|Bufferpool used|`bufferpoolName`, `jvmVersion`|Close to capacity| +|`jvm/bufferpool/capacity`|Bufferpool capacity|`bufferpoolName`, `jvmVersion`|Varies| +|`jvm/mem/init`|Initial memory|`memKind`, `jvmVersion`|Varies| +|`jvm/mem/max`|Max memory|`memKind`, `jvmVersion`|Varies| +|`jvm/mem/used`|Used memory|`memKind`, `jvmVersion`|< max memory| +|`jvm/mem/committed`|Committed memory|`memKind`, `jvmVersion`|Close to max memory| +|`jvm/gc/count`|Garbage collection count|`gcName` (cms/g1/parallel/etc.), `gcGen` (old/young), `jvmVersion`|Varies| +|`jvm/gc/cpu`|Count of CPU time in Nanoseconds spent on garbage collection. Note: `jvm/gc/cpu` represents the total time over multiple GC cycles; divide by `jvm/gc/count` to get the mean GC time per cycle.|`gcName`, `gcGen`, `jvmVersion`|Sum of `jvm/gc/cpu` should be within 10-30% of sum of `jvm/cpu/total`, depending on the GC algorithm used (reported by [`JvmCpuMonitor`](../configuration/index.md#enabling-metrics)). | ### ZooKeeper diff --git a/processing/src/main/java/org/apache/druid/java/util/metrics/JvmMonitor.java b/processing/src/main/java/org/apache/druid/java/util/metrics/JvmMonitor.java index 39d5832db99..2a2bfdeda57 100644 --- a/processing/src/main/java/org/apache/druid/java/util/metrics/JvmMonitor.java +++ b/processing/src/main/java/org/apache/druid/java/util/metrics/JvmMonitor.java @@ -40,12 +40,12 @@ import java.util.Map; public class JvmMonitor extends FeedDefiningMonitor { - private final Map dimensions; - + private static final String JVM_VERSION = "jvmVersion"; + private static final String JAVA_VERSION = System.getProperty("java.version"); @VisibleForTesting @Nullable final GcCollectors gcCollectors; - + private final Map dimensions; @Nullable private final AllocationMetricCollector collector; @@ -83,6 +83,7 @@ public class JvmMonitor extends FeedDefiningMonitor { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); + builder.setDimension(JVM_VERSION, JAVA_VERSION); if (collector != null) { long delta = collector.calculateDelta(); emitter.emit(builder.setMetric("jvm/heapAlloc/bytes", delta)); @@ -104,7 +105,9 @@ public class JvmMonitor extends FeedDefiningMonitor for (Map.Entry entry : usages.entrySet()) { final String kind = entry.getKey(); final MemoryUsage usage = entry.getValue(); - final ServiceMetricEvent.Builder builder = builder().setDimension("memKind", kind); + final ServiceMetricEvent.Builder builder = builder() + .setDimension("memKind", kind) + .setDimension(JVM_VERSION, JAVA_VERSION); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.setMetric("jvm/mem/max", usage.getMax())); @@ -119,7 +122,8 @@ public class JvmMonitor extends FeedDefiningMonitor final MemoryUsage usage = pool.getUsage(); final ServiceMetricEvent.Builder builder = builder() .setDimension("poolKind", kind) - .setDimension("poolName", pool.getName()); + .setDimension("poolName", pool.getName()) + .setDimension(JVM_VERSION, JAVA_VERSION); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.setMetric("jvm/pool/max", usage.getMax())); @@ -132,7 +136,9 @@ public class JvmMonitor extends FeedDefiningMonitor private void emitDirectMemMetrics(ServiceEmitter emitter) { for (BufferPoolMXBean pool : ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) { - final ServiceMetricEvent.Builder builder = builder().setDimension("bufferpoolName", pool.getName()); + final ServiceMetricEvent.Builder builder = builder() + .setDimension("bufferpoolName", pool.getName()) + .setDimension(JVM_VERSION, JAVA_VERSION); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.setMetric("jvm/bufferpool/capacity", pool.getTotalCapacity())); @@ -182,23 +188,20 @@ public class JvmMonitor extends FeedDefiningMonitor private class GcGenerationCollector { - private final String generation; - private final String collectorName; - private final GarbageCollectorMXBean gcBean; - - private long lastInvocations = 0; - private long lastCpuMillis = 0; - private static final String GC_YOUNG_GENERATION_NAME = "young"; private static final String GC_OLD_GENERATION_NAME = "old"; private static final String GC_ZGC_GENERATION_NAME = "zgc"; - private static final String CMS_COLLECTOR_NAME = "cms"; private static final String G1_COLLECTOR_NAME = "g1"; private static final String PARALLEL_COLLECTOR_NAME = "parallel"; private static final String SERIAL_COLLECTOR_NAME = "serial"; private static final String ZGC_COLLECTOR_NAME = "zgc"; private static final String SHENANDOAN_COLLECTOR_NAME = "shenandoah"; + private final String generation; + private final String collectorName; + private final GarbageCollectorMXBean gcBean; + private long lastInvocations = 0; + private long lastCpuMillis = 0; GcGenerationCollector(GarbageCollectorMXBean gcBean) { @@ -253,9 +256,9 @@ public class JvmMonitor extends FeedDefiningMonitor void emit(ServiceEmitter emitter, Map dimensions) { ImmutableMap.Builder dimensionsCopyBuilder = ImmutableMap - .builder() - .putAll(dimensions) - .put("gcGen", new String[]{generation}); + .builder() + .putAll(dimensions) + .put("gcGen", new String[]{generation}); dimensionsCopyBuilder.put("gcName", new String[]{collectorName}); @@ -263,6 +266,7 @@ public class JvmMonitor extends FeedDefiningMonitor final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensionsCopy); + builder.setDimension(JVM_VERSION, JAVA_VERSION); long newInvocations = gcBean.getCollectionCount(); emitter.emit(builder.setMetric("jvm/gc/count", newInvocations - lastInvocations)); @@ -309,7 +313,9 @@ public class JvmMonitor extends FeedDefiningMonitor final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); - builder.setDimension("gcGenSpaceName", name); + builder + .setDimension(JVM_VERSION, JAVA_VERSION) + .setDimension("gcGenSpaceName", name); emitter.emit(builder.setMetric("jvm/gc/mem/max", memoryUsage.getMax())); emitter.emit(builder.setMetric("jvm/gc/mem/capacity", memoryUsage.getCommitted())); diff --git a/website/.spelling b/website/.spelling index e4c23aa7a44..3ceea924b57 100644 --- a/website/.spelling +++ b/website/.spelling @@ -1655,6 +1655,7 @@ EventReceiverFirehose EventReceiverFirehoseMonitor Filesystem JVMMonitor +jvmVersion QueryCountStatsMonitor RealtimeMetricsMonitor Sys