diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2021-04-26 15:22:04 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2021-04-26 18:18:52 +0200 |
commit | 53d8e8afc0bc393663f221febe143cebfcbb8487 (patch) | |
tree | 7266d7ede5a35eab3c454092ba7cd66a59c7fcc0 /configserver | |
parent | 89d75bb3c78c07c953d307003db530203153a55a (diff) |
Aggregate feeding blocked metric
Diffstat (limited to 'configserver')
4 files changed, 37 insertions, 6 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java index 067be8102b8..2903f0fadcc 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetriever.java @@ -46,7 +46,8 @@ public class ClusterDeploymentMetricsRetriever { private static final String VESPA_CONTAINER = "vespa.container"; private static final String VESPA_QRSERVER = "vespa.qrserver"; private static final String VESPA_DISTRIBUTOR = "vespa.distributor"; - private static final List<String> WANTED_METRIC_SERVICES = List.of(VESPA_CONTAINER, VESPA_QRSERVER, VESPA_DISTRIBUTOR); + private static final String VESPA_SEARCHNODE = "vespa.searchnode"; + private static final List<String> WANTED_METRIC_SERVICES = List.of(VESPA_CONTAINER, VESPA_QRSERVER, VESPA_DISTRIBUTOR, VESPA_SEARCHNODE); private static final ExecutorService executor = Executors.newFixedThreadPool(10, new DaemonThreadFactory("cluster-deployment-metrics-retriever-")); @@ -121,7 +122,7 @@ public class ClusterDeploymentMetricsRetriever { DeploymentMetricsAggregator deploymentMetricsAggregator = clusterMetricsMap.computeIfAbsent(clusterInfo, c -> new DeploymentMetricsAggregator()); switch (serviceName) { - case "vespa.container": + case VESPA_CONTAINER: deploymentMetricsAggregator.addContainerLatency( values.field("query_latency.sum").asDouble(), values.field("query_latency.count").asDouble()); @@ -129,14 +130,17 @@ public class ClusterDeploymentMetricsRetriever { values.field("feed.latency.sum").asDouble(), values.field("feed.latency.count").asDouble()); break; - case "vespa.qrserver": + case VESPA_QRSERVER: deploymentMetricsAggregator.addQrLatency( values.field("query_latency.sum").asDouble(), values.field("query_latency.count").asDouble()); break; - case "vespa.distributor": + case VESPA_DISTRIBUTOR: deploymentMetricsAggregator.addDocumentCount(values.field("vds.distributor.docsstored.average").asDouble()); break; + case VESPA_SEARCHNODE: + deploymentMetricsAggregator.addFeedingBlocked((int) values.field("content.proton.resource_usage.feeding_blocked.last").asLong()); + break; } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/DeploymentMetricsAggregator.java b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/DeploymentMetricsAggregator.java index a4066fc212d..916f5ff5613 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/DeploymentMetricsAggregator.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/metrics/DeploymentMetricsAggregator.java @@ -13,6 +13,7 @@ public class DeploymentMetricsAggregator { private LatencyMetrics qr; private LatencyMetrics container; private Double documentCount; + private Integer feedingBlocked; public synchronized DeploymentMetricsAggregator addFeedLatency(double sum, double count) { this.feed = combineLatency(this.feed, sum, count); @@ -34,9 +35,13 @@ public class DeploymentMetricsAggregator { return this; } + public synchronized DeploymentMetricsAggregator addFeedingBlocked(int feedingBlocked) { + this.feedingBlocked = Math.max(Optional.ofNullable(this.feedingBlocked).orElse(0), feedingBlocked); + return this; + } + public Optional<Double> aggregateFeedLatency() { return Optional.ofNullable(feed).map(m -> m.latencySum / m.latencyCount).filter(num -> !num.isNaN()); - } public Optional<Double> aggregateFeedRate() { @@ -61,6 +66,10 @@ public class DeploymentMetricsAggregator { return Optional.ofNullable(documentCount); } + public Optional<Integer> feedingBlocked() { + return Optional.ofNullable(feedingBlocked); + } + private LatencyMetrics combineLatency(LatencyMetrics metricsOrNull, double sum, double count) { var metrics = Optional.ofNullable(metricsOrNull).orElseGet(LatencyMetrics::new); metrics.latencyCount += count; diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetrieverTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetrieverTest.java index cdf87b8147c..5aa3e196222 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetrieverTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/metrics/ClusterDeploymentMetricsRetrieverTest.java @@ -60,7 +60,7 @@ public class ClusterDeploymentMetricsRetrieverTest { Map<ClusterInfo, DeploymentMetricsAggregator> aggregatorMap = new ClusterDeploymentMetricsRetriever().requestMetricsGroupedByCluster(hosts); compareAggregators( - new DeploymentMetricsAggregator().addDocumentCount(6000.0), + new DeploymentMetricsAggregator().addDocumentCount(6000.0).addFeedingBlocked(0), aggregatorMap.get(expectedContentCluster) ); @@ -95,6 +95,7 @@ public class ClusterDeploymentMetricsRetrieverTest { compareOptionals(expected.aggregateFeedRate(), actual.aggregateFeedRate(), assertDoubles); compareOptionals(expected.aggregateQueryLatency(), actual.aggregateQueryLatency(), assertDoubles); compareOptionals(expected.aggregateFeedLatency(), actual.aggregateFeedLatency(), assertDoubles); + assertEquals(expected.feedingBlocked(), actual.feedingBlocked()); } @SuppressWarnings("OptionalUsedAsFieldOrParameterType") diff --git a/configserver/src/test/resources/metrics/content_metrics.json b/configserver/src/test/resources/metrics/content_metrics.json index 932577c95b0..2f88dc91709 100644 --- a/configserver/src/test/resources/metrics/content_metrics.json +++ b/configserver/src/test/resources/metrics/content_metrics.json @@ -14,6 +14,23 @@ } } ] + }, + { + "name": "vespa.searchnode", + "timestamp": 1557306075, + "metrics": [ + { + "values": { + "content.proton.resource_usage.disk.average": 0.6716298061329, + "content.proton.resource_usage.memory.average": 0.7172795340244, + "content.proton.resource_usage.feeding_blocked.last": 0 + }, + "dimensions": { + "clustertype": "content", + "clusterid": "content_cluster_id" + } + } + ] } ] }
\ No newline at end of file |