diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-10-25 11:18:00 +0200 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2021-10-25 11:27:36 +0200 |
commit | 0b29cc584755c14e341f743f2717c657be4933f3 (patch) | |
tree | 2e378fe4b6ac6a1d3d555e2f66a90af2189f2a8f /controller-server | |
parent | 832108f7de2bd4065d79198f23fd477c83c12939 (diff) |
Add metering metrics
Diffstat (limited to 'controller-server')
2 files changed, 24 insertions, 6 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java index 854780dd336..1ddb50b0a6b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java @@ -122,12 +122,7 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { private void reportResourceSnapshots(Collection<ResourceSnapshot> resourceSnapshots) { meteringClient.consume(resourceSnapshots); - metric.set(METERING_LAST_REPORTED, clock.millis() / 1000, metric.createContext(Collections.emptyMap())); - // total metered resource usage, for alerting on drastic changes - metric.set(METERING_TOTAL_REPORTED, - resourceSnapshots.stream() - .mapToDouble(r -> r.getCpuCores() + r.getMemoryGb() + r.getDiskGb()).sum(), - metric.createContext(Collections.emptyMap())); + updateMetrics(resourceSnapshots); try (var lock = curator.lockMeteringRefreshTime()) { if (needsRefresh(curator.readMeteringRefreshTime())) { @@ -194,4 +189,25 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { double cost = new NodeResources(allocation.getCpuCores(), allocation.getMemoryGb(), allocation.getDiskGb(), 0).cost(); return Math.round(cost * 100.0 / costDivisor) / 100.0; } + + private void updateMetrics(Collection<ResourceSnapshot> resourceSnapshots) { + metric.set(METERING_LAST_REPORTED, clock.millis() / 1000, metric.createContext(Collections.emptyMap())); + // total metered resource usage, for alerting on drastic changes + metric.set(METERING_TOTAL_REPORTED, + resourceSnapshots.stream() + .mapToDouble(r -> r.getCpuCores() + r.getMemoryGb() + r.getDiskGb()).sum(), + metric.createContext(Collections.emptyMap())); + + resourceSnapshots.forEach(snapshot -> { + var context = metric.createContext(Map.of( + "tenant", snapshot.getApplicationId().tenant().value(), + "applicationId", snapshot.getApplicationId().toFullString(), + "zoneId", snapshot.getZoneId() + )); + metric.set("metering.vcpu", snapshot.getCpuCores(), context); + metric.set("metering.memoryGB", snapshot.getMemoryGb(), context); + metric.set("metering.diskGB", snapshot.getDiskGb(), context); + }); + } + } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java index a255a6c37d8..5b923c2ee59 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java @@ -98,6 +98,8 @@ public class ResourceMeterMaintainerTest { assertEquals(tester.clock().millis()/1000, metrics.getMetric("metering_last_reported")); assertEquals(2224.0d, (Double) metrics.getMetric("metering_total_reported"), Double.MIN_VALUE); + assertEquals(24d, (Double) metrics.getMetric(context -> "tenant1".equals(context.get("tenant")), "metering.vcpu").get(), Double.MIN_VALUE); + assertEquals(40d, (Double) metrics.getMetric(context -> "tenant2".equals(context.get("tenant")), "metering.vcpu").get(), Double.MIN_VALUE); // Metering is not refreshed assertFalse(snapshotConsumer.isRefreshed()); |