diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2022-08-24 14:13:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-24 14:13:58 +0200 |
commit | f9ca2e0c2b2ab7e8e4b73e9254e88a1b12c04c07 (patch) | |
tree | f2229265246df289db0015c3293b3bcf13260b2d /node-admin | |
parent | 255060d07d5223ab76326e474dae45e51b6b65c5 (diff) | |
parent | 96d6c9b0024e32e1c32bd6533c3672a9c8289cd1 (diff) |
Merge pull request #23764 from vespa-engine/hakonhall/purge-old-containers-dimension-value
Purge old containers dimension value
Diffstat (limited to 'node-admin')
3 files changed, 15 insertions, 30 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java index 5a542feb5c7..d29569945a8 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Dimensions.java @@ -7,39 +7,14 @@ import java.util.Map; /** * @author freva */ -public class Dimensions { +public record Dimensions(Map<String, String> dimensionsMap) { public static final Dimensions NONE = new Dimensions(Map.of()); - private final Map<String, String> dimensionsMap; - public Dimensions(Map<String, String> dimensionsMap) { this.dimensionsMap = Map.copyOf(dimensionsMap); } - public Map<String, String> asMap() { - return dimensionsMap; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Dimensions that = (Dimensions) o; - return dimensionsMap.equals(that.dimensionsMap); - } - - @Override - public int hashCode() { - return dimensionsMap.hashCode(); - } - - @Override - public String toString() { - return dimensionsMap.toString(); - } - public static class Builder { private final Map<String, String> dimensionsMap = new HashMap<>(); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java index f7fdf171fc1..07a8d545178 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/container/metrics/Metrics.java @@ -117,7 +117,7 @@ public class Metrics { } } - // Used to distinguish whether metrics have been populated with all tag vaules + // Used to distinguish whether metrics have been populated with all tag values public enum DimensionType { /** Default metrics get added default dimensions set in check config */ DEFAULT, diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java index a112c0d2697..528383eb91e 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminImpl.java @@ -52,6 +52,7 @@ public class NodeAdminImpl implements NodeAdmin { private final Gauge containerCount; private final Counter numberOfUnhandledExceptions; private final Metrics metrics; + private Dimensions previousMemoryOverheadDimensions = null; public NodeAdminImpl(NodeAgentFactory nodeAgentFactory, Metrics metrics, Clock clock, FileSystem fileSystem) { this(nodeAgentContext -> create(clock, nodeAgentFactory, nodeAgentContext), @@ -113,7 +114,7 @@ public class NodeAdminImpl implements NodeAdmin { @Override public void updateMetrics(boolean isSuspended) { - long numContainers = 0; + int numContainers = 0; long totalContainerMemoryBytes = 0; for (NodeAgentWithScheduler nodeAgentWithScheduler : nodeAgentWithSchedulerByHostname.values()) { @@ -139,11 +140,20 @@ public class NodeAdminImpl implements NodeAdmin { if (!isSuspended) { containerCount.sample(numContainers); ProcMeminfo meminfo = procMeminfoReader.read(); - metrics.declareGauge("mem.system.overhead", new Dimensions(Map.of("containers", Long.toString(numContainers)))) - .sample(meminfo.memTotalBytes() - meminfo.memAvailableBytes() - totalContainerMemoryBytes); + updateMemoryOverheadMetric(numContainers, meminfo.memTotalBytes() - meminfo.memAvailableBytes() - totalContainerMemoryBytes); } } + private void updateMemoryOverheadMetric(int numContainers, double memoryOverhead) { + final String name = "mem.system.overhead"; + Dimensions dimensions = new Dimensions(Map.of("containers", Integer.toString(numContainers))); + metrics.declareGauge(Metrics.APPLICATION_HOST, name, dimensions, Metrics.DimensionType.DEFAULT) + .sample(memoryOverhead); + if (previousMemoryOverheadDimensions != null && !previousMemoryOverheadDimensions.equals(dimensions)) + metrics.deleteMetricByDimension(name, previousMemoryOverheadDimensions, Metrics.DimensionType.DEFAULT); + previousMemoryOverheadDimensions = dimensions; + } + @Override public boolean setFrozen(boolean wantFrozen) { if (wantFrozen != previousWantFrozen) { |