From d88d887a32f791d0670e4e8d5c2fd615126234cf Mon Sep 17 00:00:00 2001 From: Wan Kai Date: Thu, 23 Mar 2023 16:40:05 +0800 Subject: [PATCH] Fix PromQL HTTP API `/api/v1/labels` response missing `service` label. (#10579) --- docs/en/api/promql-service.md | 8 ++++---- docs/en/changes/changes.md | 1 + .../oap/query/promql/handler/PromQLApiHandler.java | 2 +- .../oap/query/promql/rt/PromQLExprQueryVisitor.java | 12 ++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/en/api/promql-service.md b/docs/en/api/promql-service.md index c4f69ae3e6..686b5599c3 100644 --- a/docs/en/api/promql-service.md +++ b/docs/en/api/promql-service.md @@ -2,10 +2,10 @@ PromQL([Prometheus Query Language](https://prometheus.io/docs/prometheus/latest/querying/basics/)) Service exposes Prometheus Querying HTTP APIs including the bundled PromQL expression system. Third-party systems or visualization platforms that already support PromQL (such as Grafana), -could obtain metrics through PromeQL Service. +could obtain metrics through PromQL Service. As SkyWalking and Prometheus have fundamental differences in metrics classification, format, storage, etc. -The PromQL Service supported will be a subset of the complete PromQL +The PromQL Service supported will be a subset of the complete PromQL. ## Details Of Supported Protocol The following doc describes the details of the supported protocol and compared it to the PromQL official documentation. @@ -286,7 +286,7 @@ Result: "status": "success", "data": [ "layer", - "scope", + "service", "top_n", "order", "service_instance", @@ -382,7 +382,7 @@ Result: ## Metrics Type For Query ### Supported Metrics [Scope](../../../oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/enumeration/Scope.java)(Catalog) -All scopes are not supported completely, please check the following table: +Not all scopes are supported for now, please check the following table: | Scope | Support | |-------------------------|---------| diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 3d34aab7cb..1a2ca979c8 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -18,6 +18,7 @@ * Support collect process level related metrics. * Fix K8sRetag reads the wrong k8s service from the cache due to a possible namespace mismatch. * [Breaking Change] Support cross-thread trace profiling. The data structure and query APIs are changed. +* Fix PromQL HTTP API `/api/v1/labels` response missing `service` label. #### UI * Revert: cpm5d function. This feature is cancelled from backend. diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java index ae2063c9e7..04d612b660 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java @@ -459,7 +459,7 @@ public class PromQLApiHandler { Column.ValueDataType dataType) { List labelNames = new ArrayList<>(); labelNames.add(LabelName.LAYER); - labelNames.add(LabelName.SCOPE); + labelNames.add(LabelName.SERVICE); labelNames.add(LabelName.TOP_N); labelNames.add(LabelName.ORDER); if (Column.ValueDataType.LABELED_VALUE == dataType) { diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/rt/PromQLExprQueryVisitor.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/rt/PromQLExprQueryVisitor.java index 8aaf9db95d..7338f70a1a 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/rt/PromQLExprQueryVisitor.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/rt/PromQLExprQueryVisitor.java @@ -179,7 +179,7 @@ public class PromQLExprQueryVisitor extends PromQLParserBaseVisitor try { String metricName = ctx.metricName().getText(); Optional valueColumn = getValueColumn(metricName); - if (!valueColumn.isPresent()) { + if (valueColumn.isEmpty()) { result.setErrorType(ErrorType.BAD_DATA); result.setErrorInfo("Metric: [" + metricName + "] dose not exist."); return result; @@ -261,9 +261,9 @@ public class PromQLExprQueryVisitor extends PromQLParserBaseVisitor LabelName... labelNames) throws IllegalExpressionException { StringBuilder missLabels = new StringBuilder(); int j = 0; - for (int i = 0; i < labelNames.length; i++) { - String labelName = labelNames[i].toString(); - if (labelMap.get(labelNames[i]) == null) { + for (final LabelName name : labelNames) { + String labelName = name.toString(); + if (labelMap.get(name) == null) { missLabels.append(j++ > 0 ? "," : "").append(labelName); } } @@ -335,12 +335,12 @@ public class PromQLExprQueryVisitor extends PromQLParserBaseVisitor MetricsCondition metricsCondition = buildMetricsCondition(metricName, layer, scope, labelMap); Map relabelMap = new HashMap<>(); String queryLabels = labelMap.get(LabelName.LABELS); - List queryLabelList = Collections.EMPTY_LIST; + List queryLabelList = Collections.emptyList(); if (StringUtil.isNotBlank(queryLabels)) { queryLabelList = Arrays.asList(queryLabels.split(Const.COMMA)); String relabels = labelMap.get(LabelName.RELABELS); - List relabelList = Collections.EMPTY_LIST; + List relabelList = Collections.emptyList(); if (StringUtil.isNotBlank(relabels)) { relabelList = Arrays.asList(relabels.split(Const.COMMA)); }