Add more attrs for Service metrics (#12728)

This commit is contained in:
Wan Kai 2024-10-29 15:07:53 +08:00 committed by GitHub
parent 25b2be13af
commit 8b6cd1c241
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 78 additions and 6 deletions

View File

@ -235,8 +235,8 @@ top_n(<metric_name>, <top_number>, <order>, <attrs>)
- `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:

View File

@ -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.

View File

@ -91,6 +91,7 @@ ATTR1: 'attr1';
ATTR2: 'attr2';
ATTR3: 'attr3';
ATTR4: 'attr4';
ATTR5: 'attr5';
// Literals
INTEGER: Digit+;

View File

@ -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)*;

View File

@ -66,7 +66,7 @@ public class DeepAnalysisTest {
Assertions.assertEquals("(long)(1)", method.getArgsExpressions().get(1));
List<SourceColumn> source = result.getFieldsFromSource();
Assertions.assertEquals(6, source.size());
Assertions.assertEquals(7, source.size());
List<DataColumn> persistentFields = result.getPersistentFields();
Assertions.assertEquals(4, persistentFields.size());

View File

@ -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();
}
}

View File

@ -61,6 +61,8 @@ public class MeterEntity {
private String attr3;
@Setter
private String attr4;
@Setter
private String attr5;
private MeterEntity() {

View File

@ -110,6 +110,7 @@ public abstract class AvgFunction extends Meter implements AcceptableValue<Long>
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<Long>
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<Long>
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<Long>
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<Long>
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<Long>
converter.accept(ATTR2, storageData.getAttr2());
converter.accept(ATTR3, storageData.getAttr3());
converter.accept(ATTR4, storageData.getAttr4());
converter.accept(ATTR5, storageData.getAttr5());
}
}

View File

@ -98,6 +98,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
metrics.setAttr2(getAttr2());
metrics.setAttr3(getAttr3());
metrics.setAttr4(getAttr4());
metrics.setAttr5(getAttr5());
return metrics;
}
@ -114,6 +115,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
metrics.setAttr2(getAttr2());
metrics.setAttr3(getAttr3());
metrics.setAttr4(getAttr4());
metrics.setAttr5(getAttr5());
return metrics;
}
@ -149,6 +151,10 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
if (StringUtil.isNotEmpty(remoteData.getDataStrings(6))) {
setAttr4(remoteData.getDataStrings(6));
}
if (StringUtil.isNotEmpty(remoteData.getDataStrings(7))) {
setAttr5(remoteData.getDataStrings(7));
}
}
@Override
@ -165,6 +171,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
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;
}
@ -199,6 +206,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
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;
}
@ -214,6 +222,7 @@ public abstract class LatestFunction extends Meter implements AcceptableValue<Lo
converter.accept(ATTR2, storageData.getAttr2());
converter.accept(ATTR3, storageData.getAttr3());
converter.accept(ATTR4, storageData.getAttr4());
converter.accept(ATTR5, storageData.getAttr5());
}
}

View File

@ -104,6 +104,7 @@ public abstract class MaxFunction extends Meter implements AcceptableValue<Long>
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<Long>
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<Long>
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<Long>
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<Long>
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<Long>
converter.accept(ATTR2, storageData.getAttr2());
converter.accept(ATTR3, storageData.getAttr3());
converter.accept(ATTR4, storageData.getAttr4());
converter.accept(ATTR5, storageData.getAttr5());
}
}

View File

@ -105,6 +105,7 @@ public abstract class MinFunction extends Meter implements AcceptableValue<Long>
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<Long>
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<Long>
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<Long>
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<Long>
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<Long>
converter.accept(ATTR2, storageData.getAttr2());
converter.accept(ATTR3, storageData.getAttr3());
converter.accept(ATTR4, storageData.getAttr4());
converter.accept(ATTR5, storageData.getAttr5());
}
}

View File

@ -86,6 +86,7 @@ public abstract class SumFunction extends Meter implements AcceptableValue<Long>
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<Long>
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<Long>
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<Long>
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<Long>
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<Long>
converter.accept(ATTR2, storageData.getAttr2());
converter.accept(ATTR3, storageData.getAttr3());
converter.accept(ATTR4, storageData.getAttr4());
converter.accept(ATTR5, storageData.getAttr5());
}
}

View File

@ -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());
}
}

View File

@ -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() {

View File

@ -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);

View File

@ -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();