diff options
10 files changed, 214 insertions, 51 deletions
diff --git a/.java-version b/.java-version deleted file mode 100644 index 229ebd33f55..00000000000 --- a/.java-version +++ /dev/null @@ -1 +0,0 @@ -11.0.7 diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java index d698d42b2d9..86b6ab8a25c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainerCluster.java @@ -117,7 +117,7 @@ public class MetricsProxyContainerCluster extends ContainerCluster<MetricsProxyC addHttpHandler(PrometheusHandler.class, PrometheusHandler.V1_PATH); addHttpHandler(YamasHandler.class, YamasHandler.V1_PATH); - addHttpHandler(ApplicationMetricsHandler.class, ApplicationMetricsHandler.V1_METRICS); + addHttpHandler(ApplicationMetricsHandler.class, ApplicationMetricsHandler.METRICS_V1_PATH); addMetricsProxyComponent(ApplicationMetricsRetriever.class); addTelegrafComponents(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index 75e6468d3a0..71d16303573 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -215,7 +215,6 @@ public final class ApplicationContainerCluster extends ContainerCluster<Applicat public void getConfig(MetricsProxyApiConfig.Builder builder) { builder.metricsPort(MetricsProxyContainer.BASEPORT) .metricsApiPath(ApplicationMetricsHandler.METRICS_VALUES_PATH) - .prometheusPort(MetricsProxyContainer.BASEPORT) .prometheusApiPath(ApplicationMetricsHandler.PROMETHEUS_VALUES_PATH); } diff --git a/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusHandler.java b/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java index 5010e6a3a8d..54207e5c640 100644 --- a/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusHandler.java +++ b/container-core/src/main/java/com/yahoo/container/handler/metrics/PrometheusV1Handler.java @@ -20,7 +20,7 @@ import org.eclipse.jetty.server.Response; import static com.yahoo.container.handler.metrics.MetricsV2Handler.consumerQuery; import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; -public class PrometheusHandler extends HttpHandlerBase{ +public class PrometheusV1Handler extends HttpHandlerBase{ public static final String V1_PATH = "/prometheus/v1"; static final String VALUES_PATH = V1_PATH + "/values"; @@ -31,10 +31,10 @@ public class PrometheusHandler extends HttpHandlerBase{ private final String prometheusProxyUri; private final HttpClient httpClient = createHttpClient(); - protected PrometheusHandler(Executor executor, - MetricsProxyApiConfig config) { + protected PrometheusV1Handler(Executor executor, + MetricsProxyApiConfig config) { super(executor); - prometheusProxyUri = "http://localhost:" + config.prometheusPort() + config.prometheusApiPath(); + prometheusProxyUri = "http://localhost:" + config.metricsPort() + config.prometheusApiPath(); } @Override diff --git a/container-core/src/main/resources/configdefinitions/metrics-proxy-api.def b/container-core/src/main/resources/configdefinitions/metrics-proxy-api.def index b41d79149ef..d2b85cc1df7 100644 --- a/container-core/src/main/resources/configdefinitions/metrics-proxy-api.def +++ b/container-core/src/main/resources/configdefinitions/metrics-proxy-api.def @@ -5,5 +5,4 @@ namespace=container.handler.metrics metricsPort int metricsApiPath string -prometheusPort int prometheusApiPath string diff --git a/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java b/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java index 1e8dccbcd26..3f406368f68 100644 --- a/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java +++ b/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java @@ -60,7 +60,6 @@ public class MetricsV2HandlerTest { new MetricsProxyApiConfig.Builder() .metricsPort(wireMockRule.port()) .metricsApiPath(MOCK_METRICS_PATH) - .prometheusPort(0) .prometheusApiPath("Not/In/Use") .build()); testDriver = new RequestHandlerTestDriver(handler); @@ -134,7 +133,7 @@ public class MetricsV2HandlerTest { } } - private static String getFileContents(String filename) { + public static String getFileContents(String filename) { InputStream in = MetricsV2HandlerTest.class.getClassLoader().getResourceAsStream(filename); if (in == null) { throw new RuntimeException("File not found: " + filename); diff --git a/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusHandlerTest.java b/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java index 31b21651fdc..4a94b4a1a7d 100644 --- a/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusHandlerTest.java +++ b/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java @@ -3,6 +3,10 @@ package com.yahoo.container.handler.metrics; import com.github.tomakehurst.wiremock.junit.WireMockRule; import com.yahoo.container.jdisc.RequestHandlerTestDriver; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.stream.Collectors; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -11,41 +15,35 @@ import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.concurrent.Executors; -import java.util.stream.Collectors; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; -import static com.yahoo.container.handler.metrics.MetricsV2Handler.V2_PATH; -import static com.yahoo.container.handler.metrics.MetricsV2Handler.VALUES_PATH; import static com.yahoo.container.handler.metrics.MetricsV2Handler.consumerQuery; +import static com.yahoo.container.handler.metrics.MetricsV2HandlerTest.getFileContents; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; /** * @author gjoranv */ -public class PrometheusHandlerTest { +public class PrometheusV1HandlerTest { private static final String URI_BASE = "http://localhost"; - private static final String V2_URI = URI_BASE + PrometheusHandler.V1_PATH; - private static final String VALUES_URI = URI_BASE + PrometheusHandler.VALUES_PATH; + private static final String V1_URI = URI_BASE + PrometheusV1Handler.V1_PATH; + private static final String VALUES_URI = URI_BASE + PrometheusV1Handler.VALUES_PATH; // Mock applicationmetrics api private static final String MOCK_METRICS_PATH = "/node0"; - private static final String TEST_FILE = "application-metrics.json"; + private static final String TEST_FILE = "application-prometheus.txt"; private static final String RESPONSE = getFileContents(TEST_FILE); - private static final String CPU_METRIC = "cpu.util"; - private static final String REPLACED_CPU_METRIC = "replaced_cpu_util"; + private static final String CPU_METRIC = "cpu"; + private static final String REPLACED_CPU_METRIC = "replaced_cpu"; private static final String CUSTOM_CONSUMER = "custom-consumer"; private static RequestHandlerTestDriver testDriver; @@ -56,11 +54,10 @@ public class PrometheusHandlerTest { @Before public void setup() { setupWireMock(); - var handler = new PrometheusHandler(Executors.newSingleThreadExecutor(), + var handler = new PrometheusV1Handler(Executors.newSingleThreadExecutor(), new MetricsProxyApiConfig.Builder() - .prometheusPort(wireMockRule.port()) .prometheusApiPath(MOCK_METRICS_PATH) - .metricsPort(0) + .metricsPort(wireMockRule.port()) .metricsApiPath("/Not/In/Use") .build()); testDriver = new RequestHandlerTestDriver(handler); @@ -80,7 +77,7 @@ public class PrometheusHandlerTest { @Test public void v2_response_contains_values_uri() throws Exception { - String response = testDriver.sendRequest(V2_URI).readAll(); + String response = testDriver.sendRequest(V1_URI).readAll(); JSONObject root = new JSONObject(response); assertTrue(root.has("resources")); @@ -91,6 +88,7 @@ public class PrometheusHandlerTest { assertEquals(VALUES_URI, valuesUri.getString("url")); } + @Ignore @Test public void visually_inspect_values_response() throws Exception { String response = testDriver.sendRequest(VALUES_URI).readAll(); @@ -99,14 +97,12 @@ public class PrometheusHandlerTest { @Test public void invalid_path_yields_error_response() throws Exception { - String response = testDriver.sendRequest(V2_URI + "/invalid").readAll(); + String response = testDriver.sendRequest(V1_URI + "/invalid").readAll(); JSONObject root = new JSONObject(response); assertTrue(root.has("error")); assertTrue(root.getString("error" ).startsWith("No content")); } - //Currently broken as no way to convert to Prometheus format around here - @Ignore @Test public void values_response_is_equal_to_test_file() { String response = testDriver.sendRequest(VALUES_URI).readAll(); @@ -119,13 +115,4 @@ public class PrometheusHandlerTest { assertTrue(response.contains(REPLACED_CPU_METRIC)); } - - private static String getFileContents(String filename) { - InputStream in = PrometheusHandlerTest.class.getClassLoader().getResourceAsStream(filename); - if (in == null) { - throw new RuntimeException("File not found: " + filename); - } - return new BufferedReader(new InputStreamReader(in)).lines().collect(Collectors.joining("\n")); - } - } diff --git a/container-core/src/test/resources/application-prometheus.txt b/container-core/src/test/resources/application-prometheus.txt new file mode 100644 index 00000000000..c184737bf67 --- /dev/null +++ b/container-core/src/test/resources/application-prometheus.txt @@ -0,0 +1,178 @@ +# HELP memory_virt +# TYPE memory_virt untyped +memory_virt{metrictype="system",instance="container-clustercontroller",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 1.322737664E9 1593416625000 +memory_virt{metrictype="system",instance="distributor",vespaVersion="7.242.24",vespa_service="vespa_distributor",} 3.01477888E8 1593416625000 +memory_virt{metrictype="system",instance="logd",vespaVersion="7.242.24",vespa_service="vespa_logd",} 1.10235648E8 1593416625000 +memory_virt{metrictype="system",instance="container",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 3.973951488E9 1593416625000 +memory_virt{metrictype="system",instance="configserver",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +memory_virt{metrictype="system",instance="slobrok",vespaVersion="7.242.24",vespa_service="vespa_slobrok",} 1.00839424E8 1593416625000 +memory_virt{metrictype="system",instance="metricsproxy-container",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 1.327828992E9 1593416625000 +memory_virt{metrictype="system",instance="logserver",vespaVersion="7.242.24",vespa_service="vespa_logserver",} 8.62457856E8 1593416625000 +memory_virt{metrictype="system",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 4.51248128E8 1593416625000 +memory_virt{metrictype="system",instance="config-sentinel",vespaVersion="7.242.24",vespa_service="vespa_config_sentinel",} 0.0 1593416625000 +# HELP memory_rss +# TYPE memory_rss untyped +memory_rss{metrictype="system",instance="container-clustercontroller",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 2.59342336E8 1593416625000 +memory_rss{metrictype="system",instance="distributor",vespaVersion="7.242.24",vespa_service="vespa_distributor",} 1.13975296E8 1593416625000 +memory_rss{metrictype="system",instance="logd",vespaVersion="7.242.24",vespa_service="vespa_logd",} 1.5110144E7 1593416625000 +memory_rss{metrictype="system",instance="container",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 1.900249088E9 1593416625000 +memory_rss{metrictype="system",instance="configserver",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +memory_rss{metrictype="system",instance="slobrok",vespaVersion="7.242.24",vespa_service="vespa_slobrok",} 1.3324288E7 1593416625000 +memory_rss{metrictype="system",instance="metricsproxy-container",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 3.64470272E8 1593416625000 +memory_rss{metrictype="system",instance="logserver",vespaVersion="7.242.24",vespa_service="vespa_logserver",} 7.0815744E7 1593416625000 +memory_rss{metrictype="system",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 2.04427264E8 1593416625000 +memory_rss{metrictype="system",instance="config-sentinel",vespaVersion="7.242.24",vespa_service="vespa_config_sentinel",} 0.0 1593416625000 +# HELP cpu +# TYPE cpu untyped +cpu{metrictype="system",instance="container-clustercontroller",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 1.7821054565496968 1593416625000 +cpu{metrictype="system",instance="distributor",vespaVersion="7.242.24",vespa_service="vespa_distributor",} 23.38783758956458 1593416625000 +cpu{metrictype="system",instance="logd",vespaVersion="7.242.24",vespa_service="vespa_logd",} 1.028844387286423 1593416625000 +cpu{metrictype="system",instance="container",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 64.119051993386 1593416625000 +cpu{metrictype="system",instance="configserver",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +cpu{metrictype="system",instance="slobrok",vespaVersion="7.242.24",vespa_service="vespa_slobrok",} 1.8923387837589565 1593416625000 +cpu{metrictype="system",instance="metricsproxy-container",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 7.697960683446628 1593416625000 +cpu{metrictype="system",instance="logserver",vespaVersion="7.242.24",vespa_service="vespa_logserver",} 0.4409333088370384 1593416625000 +cpu{metrictype="system",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 51.589197133933496 1593416625000 +cpu{metrictype="system",instance="config-sentinel",vespaVersion="7.242.24",vespa_service="vespa_config_sentinel",} 0.0 1593416625000 +# HELP jdisc_gc_ms_average +# TYPE jdisc_gc_ms_average untyped +jdisc_gc_ms_average{metrictype="standard",instance="container-clustercontroller",gcName="G1OldGeneration",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 0.0 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="container-clustercontroller",gcName="G1YoungGeneration",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 5.666666666666667 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="container",gcName="G1YoungGeneration",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 148.5 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="container",gcName="G1OldGeneration",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 0.0 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="configserver",gcName="G1OldGeneration",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="configserver",gcName="G1YoungGeneration",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 7.5 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="metricsproxy-container",gcName="G1OldGeneration",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 0.0 1593416625000 +jdisc_gc_ms_average{metrictype="standard",instance="metricsproxy-container",gcName="G1YoungGeneration",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 172.83333333333334 1593416625000 +# HELP mem_heap_free_average +# TYPE mem_heap_free_average untyped +mem_heap_free_average{metrictype="standard",instance="container-clustercontroller",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 1.6804585333333332E7 1593416625000 +mem_heap_free_average{metrictype="standard",instance="container",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 1.176528152E9 1593416625000 +mem_heap_free_average{metrictype="standard",instance="configserver",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 8.277591866666667E7 1593416625000 +mem_heap_free_average{metrictype="standard",instance="metricsproxy-container",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 5.7865174666666664E7 1593416625000 +# HELP http_status_2xx_rate +# TYPE http_status_2xx_rate untyped +http_status_2xx_rate{metrictype="standard",instance="container-clustercontroller",scheme="http",httpMethod="GET",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 0.10011513240226261 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="container",scheme="http",httpMethod="GET",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 0.10011513240226261 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="container",scheme="http",httpMethod="POST",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 131.35105371176854 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="configserver",scheme="http",httpMethod="POST",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="configserver",scheme="http",httpMethod="PUT",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="configserver",scheme="http",httpMethod="GET",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.10011513240226261 1593416625000 +http_status_2xx_rate{metrictype="standard",instance="metricsproxy-container",scheme="http",httpMethod="GET",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 0.20023026480452522 1593416625000 +# HELP serverActiveThreads_average +# TYPE serverActiveThreads_average untyped +serverActiveThreads_average{metrictype="standard",instance="container-clustercontroller",threadpool="default-pool",clustername="cluster-controllers",vespaVersion="7.242.24",vespa_service="vespa_container_clustercontroller",} 0.0 1593416625000 +serverActiveThreads_average{metrictype="standard",instance="container",threadpool="default-pool",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 0.5293132328308208 1593416625000 +serverActiveThreads_average{metrictype="standard",instance="configserver",threadpool="default-pool",vespaVersion="7.242.24",vespa_service="vespa_configserver",} 0.0 1593416625000 +serverActiveThreads_average{metrictype="standard",instance="metricsproxy-container",threadpool="default-pool",clustername="metrics",vespaVersion="7.242.24",vespa_service="vespa_metricsproxy_container",} 0.11912751677852348 1593416625000 +# HELP vespa_container_clustercontroller_status status of service +# TYPE vespa_container_clustercontroller_status untyped +vespa_container_clustercontroller_status 1.0 1593416625000 +# HELP vespa_distributor_status status of service +# TYPE vespa_distributor_status untyped +vespa_distributor_status 1.0 1593416625000 +# HELP vespa_logd_status status of service +# TYPE vespa_logd_status untyped +vespa_logd_status 1.0 1593416625000 +# HELP feed_operations_rate +# TYPE feed_operations_rate untyped +feed_operations_rate{metrictype="standard",instance="container",api="vespa.http.server",operation="PUT",status="OK",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 15.951677762760507 1593416625000 +# HELP degraded_queries_rate +# TYPE degraded_queries_rate untyped +degraded_queries_rate{metrictype="standard",instance="container",chain="vespa",reason="timeout",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 0.0 1593416625000 +# HELP query_latency_average +# TYPE query_latency_average untyped +query_latency_average{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 5.821542940320233 1593416625000 +# HELP query_latency_99percentile +# TYPE query_latency_99percentile untyped +query_latency_99percentile{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 20.109375 1593416625000 +# HELP query_latency_95percentile +# TYPE query_latency_95percentile untyped +query_latency_95percentile{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 11.046875 1593416625000 +# HELP totalhits_per_query_average +# TYPE totalhits_per_query_average untyped +totalhits_per_query_average{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 23109.089956331878 1593416625000 +# HELP hits_per_query_average +# TYPE hits_per_query_average untyped +hits_per_query_average{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 10.0 1593416625000 +# HELP queries_rate +# TYPE queries_rate untyped +queries_rate{metrictype="standard",instance="container",chain="vespa",endpoint="vespa:8080",clustername="container",vespaVersion="7.242.24",vespa_service="vespa_container",} 57.33259915569572 1593416625000 +# HELP vespa_container_status status of service +# TYPE vespa_container_status untyped +vespa_container_status 1.0 1593416625000 +# HELP vespa_configserver_status status of service +# TYPE vespa_configserver_status untyped +vespa_configserver_status 1.0 1593416625000 +# HELP vespa_slobrok_status status of service +# TYPE vespa_slobrok_status untyped +vespa_slobrok_status 1.0 1593416625000 +# HELP vespa_metricsproxy_container_status status of service +# TYPE vespa_metricsproxy_container_status untyped +vespa_metricsproxy_container_status 1.0 1593416625000 +# HELP vespa_logserver_status status of service +# TYPE vespa_logserver_status untyped +vespa_logserver_status 1.0 1593416625000 +# HELP content_proton_documentdb_matching_docs_reranked_rate +# TYPE content_proton_documentdb_matching_docs_reranked_rate untyped +content_proton_documentdb_matching_docs_reranked_rate{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +# HELP content_proton_documentdb_memory_usage_allocated_bytes_last +# TYPE content_proton_documentdb_memory_usage_allocated_bytes_last untyped +content_proton_documentdb_memory_usage_allocated_bytes_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 2.7138485E7 1593416625000 +# HELP content_proton_transactionlog_disk_usage_last +# TYPE content_proton_transactionlog_disk_usage_last untyped +content_proton_transactionlog_disk_usage_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 1.8301504E7 1593416625000 +# HELP content_proton_documentdb_matching_rank_profile_rerank_time_average +# TYPE content_proton_documentdb_matching_rank_profile_rerank_time_average untyped +content_proton_documentdb_matching_rank_profile_rerank_time_average{metrictype="standard",instance="searchnode",rankProfile="unranked",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +content_proton_documentdb_matching_rank_profile_rerank_time_average{metrictype="standard",instance="searchnode",rankProfile="default",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +content_proton_documentdb_matching_rank_profile_rerank_time_average{metrictype="standard",instance="searchnode",rankProfile="rank_albums",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +# HELP content_proton_documentdb_matching_rank_profile_query_latency_average +# TYPE content_proton_documentdb_matching_rank_profile_query_latency_average untyped +content_proton_documentdb_matching_rank_profile_query_latency_average{metrictype="standard",instance="searchnode",rankProfile="unranked",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +content_proton_documentdb_matching_rank_profile_query_latency_average{metrictype="standard",instance="searchnode",rankProfile="default",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.004089901414609053 1593416625000 +content_proton_documentdb_matching_rank_profile_query_latency_average{metrictype="standard",instance="searchnode",rankProfile="rank_albums",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +# HELP content_proton_documentdb_matching_rank_profile_query_setup_time_average +# TYPE content_proton_documentdb_matching_rank_profile_query_setup_time_average untyped +content_proton_documentdb_matching_rank_profile_query_setup_time_average{metrictype="standard",instance="searchnode",rankProfile="unranked",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +content_proton_documentdb_matching_rank_profile_query_setup_time_average{metrictype="standard",instance="searchnode",rankProfile="default",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 1.617217592592592E-4 1593416625000 +content_proton_documentdb_matching_rank_profile_query_setup_time_average{metrictype="standard",instance="searchnode",rankProfile="rank_albums",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +# HELP content_proton_documentdb_matching_docs_matched_rate +# TYPE content_proton_documentdb_matching_docs_matched_rate untyped +content_proton_documentdb_matching_docs_matched_rate{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 1459709.916666 1593416625000 +# HELP content_proton_documentdb_documents_active_last +# TYPE content_proton_documentdb_documents_active_last untyped +content_proton_documentdb_documents_active_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 48968.0 1593416625000 +# HELP content_proton_documentdb_documents_ready_last +# TYPE content_proton_documentdb_documents_ready_last untyped +content_proton_documentdb_documents_ready_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 48968.0 1593416625000 +# HELP content_proton_documentdb_documents_total_last +# TYPE content_proton_documentdb_documents_total_last untyped +content_proton_documentdb_documents_total_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 48968.0 1593416625000 +# HELP content_proton_documentdb_disk_usage_last +# TYPE content_proton_documentdb_disk_usage_last untyped +content_proton_documentdb_disk_usage_last{metrictype="standard",instance="searchnode",documenttype="music",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 4872789.0 1593416625000 +# HELP content_proton_resource_usage_disk_average +# TYPE content_proton_resource_usage_disk_average untyped +content_proton_resource_usage_disk_average{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.1484413210467096 1593416625000 +# HELP content_proton_resource_usage_memory_average +# TYPE content_proton_resource_usage_memory_average untyped +content_proton_resource_usage_memory_average{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.02216534368263088 1593416625000 +# HELP content_proton_resource_usage_feeding_blocked_last +# TYPE content_proton_resource_usage_feeding_blocked_last untyped +content_proton_resource_usage_feeding_blocked_last{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.0 1593416625000 +# HELP content_proton_search_protocol_query_latency_average +# TYPE content_proton_search_protocol_query_latency_average untyped +content_proton_search_protocol_query_latency_average{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 0.004598581322356573 1593416625000 +# HELP content_proton_search_protocol_docsum_latency_average +# TYPE content_proton_search_protocol_docsum_latency_average untyped +content_proton_search_protocol_docsum_latency_average{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 5.904414458451241E-4 1593416625000 +# HELP content_proton_search_protocol_docsum_requested_documents_rate +# TYPE content_proton_search_protocol_docsum_requested_documents_rate untyped +content_proton_search_protocol_docsum_requested_documents_rate{metrictype="standard",instance="searchnode",clustername="music",vespaVersion="7.242.24",vespa_service="vespa_searchnode",} 647.833333 1593416625000 +# HELP vespa_searchnode_status status of service +# TYPE vespa_searchnode_status untyped +vespa_searchnode_status 1.0 1593416625000 +# HELP vespa_config_sentinel_status status of service +# TYPE vespa_config_sentinel_status untyped +vespa_config_sentinel_status 1.0 1593416625000 diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java index 46f3a1b18c4..6b1376452fa 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandler.java @@ -27,6 +27,7 @@ import static ai.vespa.metricsproxy.http.ValuesFetcher.getConsumerOrDefault; import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericApplicationModel; import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericJsonModel; import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toMetricsPackets; +import static ai.vespa.metricsproxy.metric.model.prometheus.PrometheusUtil.toPrometheusModel; import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; import static com.yahoo.jdisc.Response.Status.OK; @@ -37,11 +38,11 @@ import static com.yahoo.jdisc.Response.Status.OK; */ public class ApplicationMetricsHandler extends HttpHandlerBase { - public static final String V1_METRICS = "/applicationmetrics/v1"; - public static final String METRICS_VALUES_PATH = V1_METRICS + "/values"; + public static final String METRICS_V1_PATH = "/applicationmetrics/v1"; + public static final String METRICS_VALUES_PATH = METRICS_V1_PATH + "/values"; - public static final String V1_PROMETHEUS = "/applicationprometheus/v1"; - public static final String PROMETHEUS_VALUES_PATH = V1_PROMETHEUS + "/values"; + public static final String PROMETHEUS_V1_PATH = "/applicationprometheus/v1"; + public static final String PROMETHEUS_VALUES_PATH = PROMETHEUS_V1_PATH + "/values"; private final ApplicationMetricsRetriever metricsRetriever; private final MetricsConsumers metricsConsumers; @@ -57,10 +58,10 @@ public class ApplicationMetricsHandler extends HttpHandlerBase { @Override public Optional<HttpResponse> doHandle(URI requestUri, Path apiPath, String consumer) { - if (apiPath.matches(V1_METRICS)) return Optional.of(resourceListResponse(requestUri, List.of(METRICS_VALUES_PATH))); + if (apiPath.matches(METRICS_V1_PATH)) return Optional.of(resourceListResponse(requestUri, List.of(METRICS_VALUES_PATH))); if (apiPath.matches(METRICS_VALUES_PATH)) return Optional.of(applicationMetricsResponse(consumer)); - if (apiPath.matches(V1_PROMETHEUS)) return Optional.of(resourceListResponse(requestUri, List.of(PROMETHEUS_VALUES_PATH))); + if (apiPath.matches(PROMETHEUS_V1_PATH)) return Optional.of(resourceListResponse(requestUri, List.of(PROMETHEUS_VALUES_PATH))); if (apiPath.matches(PROMETHEUS_VALUES_PATH)) return Optional.of(applicationPrometheusResponse(consumer)); return Optional.empty(); @@ -84,11 +85,12 @@ public class ApplicationMetricsHandler extends HttpHandlerBase { var metricsByNode = metricsRetriever.getMetrics(consumer); - return new TextResponse(200, PrometheusUtil.toPrometheusModel(toGenericApplicationModel(metricsByNode).nodes.stream() - .flatMap(element -> GenericJsonUtil.toMetricsPackets(element).stream() + List<GenericJsonModel> genericNodes = toGenericApplicationModel(metricsByNode).nodes; + List<MetricsPacket> metricsForAllNodes = genericNodes.stream() + .flatMap(element -> toMetricsPackets(element).stream() .map(MetricsPacket.Builder::build)) - .collect(Collectors.toList())) - .serialize()); + .collect(Collectors.toList()); + return new TextResponse(200, toPrometheusModel(metricsForAllNodes).serialize()); } } diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java index cb0178b1aef..46c4af4c1f4 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java @@ -25,7 +25,7 @@ import java.util.concurrent.Executors; import static ai.vespa.metricsproxy.TestUtil.getFileContents; import static ai.vespa.metricsproxy.http.ValuesFetcher.DEFAULT_PUBLIC_CONSUMER_ID; -import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.V1_METRICS; +import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.METRICS_V1_PATH; import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.METRICS_VALUES_PATH; import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; @@ -48,7 +48,7 @@ public class ApplicationMetricsHandlerTest { private static final String HOST = "localhost"; private static final String URI_BASE = "http://" + HOST; - private static final String APP_METRICS_V1_URI = URI_BASE + V1_METRICS; + private static final String APP_METRICS_V1_URI = URI_BASE + METRICS_V1_PATH; private static final String APP_METRICS_VALUES_URI = URI_BASE + METRICS_VALUES_PATH; private static final String TEST_FILE = "generic-sample.json"; |