From 8b6cd1c241bee88deb0eacbca0be596434389656 Mon Sep 17 00:00:00 2001 From: Wan Kai Date: Tue, 29 Oct 2024 15:07:53 +0800 Subject: [PATCH] Add more attrs for Service metrics (#12728) --- docs/en/api/metrics-query-expression.md | 4 ++-- .../metrics-additional-attributes.md | 2 +- .../org/apache/skywalking/mqe/rt/grammar/MQELexer.g4 | 1 + .../org/apache/skywalking/mqe/rt/grammar/MQEParser.g4 | 2 +- .../skywalking/oal/rt/parser/DeepAnalysisTest.java | 2 +- .../skywalking/oap/server/core/analysis/meter/Meter.java | 7 +++++++ .../oap/server/core/analysis/meter/MeterEntity.java | 2 ++ .../core/analysis/meter/function/avg/AvgFunction.java | 9 +++++++++ .../analysis/meter/function/latest/LatestFunction.java | 9 +++++++++ .../core/analysis/meter/function/max/MaxFunction.java | 9 +++++++++ .../core/analysis/meter/function/min/MinFunction.java | 9 +++++++++ .../core/analysis/meter/function/sum/SumFunction.java | 9 +++++++++ .../meter/function/sumpermin/SumPerMinFunction.java | 9 +++++++++ .../skywalking/oap/server/core/source/K8SService.java | 4 ++++ .../skywalking/oap/server/core/source/Service.java | 4 ++++ .../skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java | 2 +- 16 files changed, 78 insertions(+), 6 deletions(-) diff --git a/docs/en/api/metrics-query-expression.md b/docs/en/api/metrics-query-expression.md index 8e7833b931..0a734c7aa1 100644 --- a/docs/en/api/metrics-query-expression.md +++ b/docs/en/api/metrics-query-expression.md @@ -235,8 +235,8 @@ top_n(, , , ) - `top_number` is the number of the top results, should be a positive integer. - `order` is the order of the top results. The value of `order` can be `asc` or `des`. - `attrs` optional, attrs is the attributes of the metrics, could be used to filter the topN results. - SkyWalking supports 5 attrs: `attr0`, `attr1`, `attr2`, `attr3`, `attr4`. - The format is `attr0='value', attr1='value'...attr4='value4'`, could use one or multiple attrs to filter the topN results. + SkyWalking supports 6 attrs: `attr0`, `attr1`, `attr2`, `attr3`, `attr4`, `attr5`. + The format is `attr0='value', attr1='value'...attr5='value5'`, could use one or multiple attrs to filter the topN results. **Notice**: The `attrs` only support Service metrics for now and should be added in the metrics first, see [Metrics Additional Attributes](../concepts-and-designs/metrics-additional-attributes.md). For example: diff --git a/docs/en/concepts-and-designs/metrics-additional-attributes.md b/docs/en/concepts-and-designs/metrics-additional-attributes.md index 2a5ad7e459..50de232684 100644 --- a/docs/en/concepts-and-designs/metrics-additional-attributes.md +++ b/docs/en/concepts-and-designs/metrics-additional-attributes.md @@ -6,7 +6,7 @@ A typical case is the `topN` query, when we query the top N services by the metr If we want to filter the services by `Layer` or `Group` or other specific conditions, it is impossible to do this with the current metrics fields. Since 10.2.0, SkyWalking supports the metrics attributes through source decorate. -SkyWalking provides additional attributes(`attr0...attr4`) fields to the metrics and source. +SkyWalking provides additional attributes(`attr0...attr5`) fields to the metrics and source. By default, these fields are empty, we can fill them by set a specific decorate logic for source. According to the difference between the `OAL` and `MAL`, the usage of decorate is different. diff --git a/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQELexer.g4 b/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQELexer.g4 index 3fc984fd03..0ea98355b1 100644 --- a/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQELexer.g4 +++ b/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQELexer.g4 @@ -91,6 +91,7 @@ ATTR1: 'attr1'; ATTR2: 'attr2'; ATTR3: 'attr3'; ATTR4: 'attr4'; +ATTR5: 'attr5'; // Literals INTEGER: Digit+; diff --git a/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQEParser.g4 b/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQEParser.g4 index 1d421e9d7d..92440b3097 100644 --- a/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQEParser.g4 +++ b/oap-server/mqe-grammar/src/main/antlr4/org/apache/skywalking/mqe/rt/grammar/MQEParser.g4 @@ -101,6 +101,6 @@ sort_label_values: SORT_LABEL_VALUES; attributeName: - ATTR0 | ATTR1 | ATTR2 | ATTR3 | ATTR4; + ATTR0 | ATTR1 | ATTR2 | ATTR3 | ATTR4 | ATTR5; attribute: attributeName EQ VALUE_STRING; attributeList: attribute (COMMA attribute)*; diff --git a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java index d4b7b1d4a9..30408c40ef 100644 --- a/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java +++ b/oap-server/oal-rt/src/test/java/org/apache/skywalking/oal/rt/parser/DeepAnalysisTest.java @@ -66,7 +66,7 @@ public class DeepAnalysisTest { Assertions.assertEquals("(long)(1)", method.getArgsExpressions().get(1)); List source = result.getFieldsFromSource(); - Assertions.assertEquals(6, source.size()); + Assertions.assertEquals(7, source.size()); List persistentFields = result.getPersistentFields(); Assertions.assertEquals(4, persistentFields.size()); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/Meter.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/Meter.java index 8ba6878204..f503abae4c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/Meter.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/Meter.java @@ -38,6 +38,7 @@ public abstract class Meter extends Metrics implements WithMetadata { protected static final String ATTR2 = "attr2"; protected static final String ATTR3 = "attr3"; protected static final String ATTR4 = "attr4"; + protected static final String ATTR5 = "attr5"; private MetricsMetaInfo metadata = new MetricsMetaInfo("UNKNOWN", DefaultScopeDefine.UNKNOWN); @@ -66,6 +67,11 @@ public abstract class Meter extends Metrics implements WithMetadata { @Column(name = ATTR4) private String attr4; + @Setter + @Getter + @Column(name = ATTR5) + private String attr5; + /** * @return entity ID to represent this metric object. Typically, meter function should have a String type field, named entityId. * See {@link org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgFunction#getEntityId()} as an example. @@ -101,5 +107,6 @@ public abstract class Meter extends Metrics implements WithMetadata { attr2 = entity.getAttr2(); attr3 = entity.getAttr3(); attr4 = entity.getAttr4(); + attr5 = entity.getAttr5(); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterEntity.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterEntity.java index 073981d36a..1489ff3a5a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterEntity.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterEntity.java @@ -61,6 +61,8 @@ public class MeterEntity { private String attr3; @Setter private String attr4; + @Setter + private String attr5; private MeterEntity() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgFunction.java index 3f96cf79e5..4228c8e63f 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgFunction.java @@ -110,6 +110,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -127,6 +128,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -163,6 +165,10 @@ public abstract class AvgFunction extends Meter implements AcceptableValue if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) { setAttr4(remoteData.getDataStrings(6)); } + + if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) { + setAttr5(remoteData.getDataStrings(7)); + } } @Override @@ -180,6 +186,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue remoteBuilder.addDataStrings(getAttr2() == null ? Const.EMPTY_STRING : getAttr2()); remoteBuilder.addDataStrings(getAttr3() == null ? Const.EMPTY_STRING : getAttr3()); remoteBuilder.addDataStrings(getAttr4() == null ? Const.EMPTY_STRING : getAttr4()); + remoteBuilder.addDataStrings(getAttr5() == null ? Const.EMPTY_STRING : getAttr5()); return remoteBuilder; } @@ -225,6 +232,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue metrics.setAttr2((String) converter.get(ATTR2)); metrics.setAttr3((String) converter.get(ATTR3)); metrics.setAttr4((String) converter.get(ATTR4)); + metrics.setAttr5((String) converter.get(ATTR5)); return metrics; } @@ -242,6 +250,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue converter.accept(ATTR2, storageData.getAttr2()); converter.accept(ATTR3, storageData.getAttr3()); converter.accept(ATTR4, storageData.getAttr4()); + converter.accept(ATTR5, storageData.getAttr5()); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunction.java index 7bf887378b..b741220e89 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/latest/LatestFunction.java @@ -98,6 +98,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -120,6 +121,7 @@ public abstract class MaxFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -154,6 +156,10 @@ public abstract class MaxFunction extends Meter implements AcceptableValue if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) { setAttr4(remoteData.getDataStrings(6)); } + + if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) { + setAttr5(remoteData.getDataStrings(7)); + } } @Override @@ -169,6 +175,7 @@ public abstract class MaxFunction extends Meter implements AcceptableValue remoteBuilder.addDataStrings(getAttr2() == null ? Const.EMPTY_STRING : getAttr2()); remoteBuilder.addDataStrings(getAttr3() == null ? Const.EMPTY_STRING : getAttr3()); remoteBuilder.addDataStrings(getAttr4() == null ? Const.EMPTY_STRING : getAttr4()); + remoteBuilder.addDataStrings(getAttr5() == null ? Const.EMPTY_STRING : getAttr5()); return remoteBuilder; } @@ -204,6 +211,7 @@ public abstract class MaxFunction extends Meter implements AcceptableValue metrics.setAttr2((String) converter.get(ATTR2)); metrics.setAttr3((String) converter.get(ATTR3)); metrics.setAttr4((String) converter.get(ATTR4)); + metrics.setAttr5((String) converter.get(ATTR5)); return metrics; } @@ -219,6 +227,7 @@ public abstract class MaxFunction extends Meter implements AcceptableValue converter.accept(ATTR2, storageData.getAttr2()); converter.accept(ATTR3, storageData.getAttr3()); converter.accept(ATTR4, storageData.getAttr4()); + converter.accept(ATTR5, storageData.getAttr5()); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/min/MinFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/min/MinFunction.java index edbae2b9d2..b4379dfddb 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/min/MinFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/min/MinFunction.java @@ -105,6 +105,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -121,6 +122,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -155,6 +157,10 @@ public abstract class MinFunction extends Meter implements AcceptableValue if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) { setAttr4(remoteData.getDataStrings(6)); } + + if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) { + setAttr5(remoteData.getDataStrings(7)); + } } @Override @@ -170,6 +176,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue remoteBuilder.addDataStrings(getAttr2() == null ? Const.EMPTY_STRING : getAttr2()); remoteBuilder.addDataStrings(getAttr3() == null ? Const.EMPTY_STRING : getAttr3()); remoteBuilder.addDataStrings(getAttr4() == null ? Const.EMPTY_STRING : getAttr4()); + remoteBuilder.addDataStrings(getAttr5() == null ? Const.EMPTY_STRING : getAttr5()); return remoteBuilder; } @@ -205,6 +212,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue metrics.setAttr2((String) converter.get(ATTR2)); metrics.setAttr3((String) converter.get(ATTR3)); metrics.setAttr4((String) converter.get(ATTR4)); + metrics.setAttr5((String) converter.get(ATTR5)); return metrics; } @@ -220,6 +228,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue converter.accept(ATTR2, storageData.getAttr2()); converter.accept(ATTR3, storageData.getAttr3()); converter.accept(ATTR4, storageData.getAttr4()); + converter.accept(ATTR5, storageData.getAttr5()); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumFunction.java index e3004af6f4..ff67146d93 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sum/SumFunction.java @@ -86,6 +86,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -102,6 +103,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -137,6 +139,10 @@ public abstract class SumFunction extends Meter implements AcceptableValue if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) { setAttr4(remoteData.getDataStrings(6)); } + + if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) { + setAttr5(remoteData.getDataStrings(7)); + } } @Override @@ -154,6 +160,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue remoteBuilder.addDataStrings(getAttr2() == null ? Const.EMPTY_STRING : getAttr2()); remoteBuilder.addDataStrings(getAttr3() == null ? Const.EMPTY_STRING : getAttr3()); remoteBuilder.addDataStrings(getAttr4() == null ? Const.EMPTY_STRING : getAttr4()); + remoteBuilder.addDataStrings(getAttr5() == null ? Const.EMPTY_STRING : getAttr5()); return remoteBuilder; } @@ -196,6 +203,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue metrics.setAttr2((String) converter.get(ATTR2)); metrics.setAttr3((String) converter.get(ATTR3)); metrics.setAttr4((String) converter.get(ATTR4)); + metrics.setAttr5((String) converter.get(ATTR5)); return metrics; } @@ -211,6 +219,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue converter.accept(ATTR2, storageData.getAttr2()); converter.accept(ATTR3, storageData.getAttr3()); converter.accept(ATTR4, storageData.getAttr4()); + converter.accept(ATTR5, storageData.getAttr5()); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunction.java index 8a7e278187..ddd5b56af2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/sumpermin/SumPerMinFunction.java @@ -94,6 +94,7 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -110,6 +111,7 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue metrics.setAttr2(getAttr2()); metrics.setAttr3(getAttr3()); metrics.setAttr4(getAttr4()); + metrics.setAttr5(getAttr5()); return metrics; } @@ -145,6 +147,10 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) { setAttr4(remoteData.getDataStrings(6)); } + + if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) { + setAttr5(remoteData.getDataStrings(7)); + } } @Override @@ -162,6 +168,7 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue remoteBuilder.addDataStrings(getAttr2() == null ? Const.EMPTY_STRING : getAttr2()); remoteBuilder.addDataStrings(getAttr3() == null ? Const.EMPTY_STRING : getAttr3()); remoteBuilder.addDataStrings(getAttr4() == null ? Const.EMPTY_STRING : getAttr4()); + remoteBuilder.addDataStrings(getAttr5() == null ? Const.EMPTY_STRING : getAttr5()); return remoteBuilder; } @@ -205,6 +212,7 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue metrics.setAttr2((String) converter.get(ATTR2)); metrics.setAttr3((String) converter.get(ATTR3)); metrics.setAttr4((String) converter.get(ATTR4)); + metrics.setAttr5((String) converter.get(ATTR5)); return metrics; } @@ -221,6 +229,7 @@ public abstract class SumPerMinFunction extends Meter implements AcceptableValue converter.accept(ATTR2, storageData.getAttr2()); converter.accept(ATTR3, storageData.getAttr3()); converter.accept(ATTR4, storageData.getAttr4()); + converter.accept(ATTR5, storageData.getAttr5()); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/K8SService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/K8SService.java index 74b1071ded..44a205dd9b 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/K8SService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/K8SService.java @@ -62,6 +62,10 @@ public class K8SService extends K8SMetrics { @Setter @ScopeDefaultColumn.DefinedByField(columnName = "attr4", isAttribute = true) private String attr4; + @Getter + @Setter + @ScopeDefaultColumn.DefinedByField(columnName = "attr5", isAttribute = true) + private String attr5; @Override public int scope() { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java index 0160c997f3..f4ceea1bc8 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java @@ -104,6 +104,10 @@ public class Service extends Source { @Setter @ScopeDefaultColumn.DefinedByField(columnName = "attr4", isAttribute = true) private String attr4; + @Getter + @Setter + @ScopeDefaultColumn.DefinedByField(columnName = "attr5", isAttribute = true) + private String attr5; public String getTag(String key) { return originalTags.get(key); diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java index b354f2edd6..5368f3cb8f 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/mqe/rt/MQEVisitor.java @@ -129,7 +129,7 @@ public class MQEVisitor extends MQEVisitorBase { if (topN <= 0) { throw new IllegalExpressionException("TopN value must be > 0."); } - String[] attrsCondition = new String[5]; + String[] attrsCondition = new String[6]; if (parent.attributeList() != null) { for (MQEParser.AttributeContext attributeContext : parent.attributeList().attribute()) { String attrName = attributeContext.attributeName().getText();