diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-10-25 12:32:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-25 12:32:06 +0200 |
commit | 65478e51de9eae8abd94a0894bc5fae11ec0772f (patch) | |
tree | 5272f2e81d05e3034bbe31407861124ba84c7492 | |
parent | 98b98eec39f56be04bd6ddc4c306302434525a41 (diff) | |
parent | 0b29cc584755c14e341f743f2717c657be4933f3 (diff) |
Merge pull request #19714 from vespa-engine/olaa/metering-metrics
Add metering metrics
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()); |