diff --git a/CHANGES.md b/CHANGES.md index 236694d88c..b4afded10b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -58,6 +58,7 @@ Release Notes. * Support datasource metric analysis. * [Break Change] Keep the endpoint avg resp time meter name the same with others scope. (This may break 3rd party integration and existing alarm rule settings) * Add Python FastApi component ID(7014). +* Support all metrics from MAL engine in alarm core, including Prometheus, OC receiver, meter receiver. #### UI 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 new file mode 100644 index 0000000000..7ce449157a --- /dev/null +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/Meter.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.oap.server.core.analysis.meter; + +import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics; +import org.apache.skywalking.oap.server.core.analysis.metrics.MetricsMetaInfo; +import org.apache.skywalking.oap.server.core.analysis.metrics.WithMetadata; +import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine; + +/** + * Meter is the abstract parent for all {@link org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction} annotated functions. + * It provides the {@link WithMetadata} implementation for alarm kernal. + * + * @since 9.0.0 + */ +public abstract class Meter extends Metrics implements WithMetadata { + private MetricsMetaInfo metadata = new MetricsMetaInfo("UNKNOWN", DefaultScopeDefine.UNKNOWN); + + /** + * @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. + */ + public abstract String getEntityId(); + + /** + * This method is called in {@link MeterSystem#create} process through dynamic Java codes. + * + * @param metricName metric name + * @param scopeId scope Id defined in {@link DefaultScopeDefine} + */ + public void initMeta(String metricName, int scopeId) { + this.metadata.setMetricsName(metricName); + this.metadata.setScope(scopeId); + } + + public MetricsMetaInfo getMeta() { + // Only read the id from the implementation when needed, to avoid uninitialized cases. + this.metadata.setId(this.getEntityId()); + return metadata; + } +} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java index 5ea1e70e8e..3e0344091c 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/MeterSystem.java @@ -225,7 +225,9 @@ public class MeterSystem implements Service { metricsClass.addMethod(CtNewMethod.make( "" + "public org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue createNew() {" - + " return new " + METER_CLASS_PACKAGE + className + "();" + + " org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue meterVar = new " + METER_CLASS_PACKAGE + className + "();" + + " ((org.apache.skywalking.oap.server.core.analysis.meter.Meter)meterVar).initMeta(\"" + metricsName + "\", " + type.getScopeId() + ");" + + " return meterVar;" + " }" , metricsClass)); } catch (CannotCompileException e) { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java index e6ee54ef18..157e737786 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/HistogramFunction.java @@ -27,6 +27,7 @@ import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable; import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics; @@ -42,7 +43,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @MeterFunction(functionName = "histogram") @Slf4j @ToString -public abstract class HistogramFunction extends Metrics implements AcceptableValue { +public abstract class HistogramFunction extends Meter implements AcceptableValue { public static final String DATASET = "dataset"; @Setter diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java index 2b670477e0..562c342300 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/PercentileFunction.java @@ -30,6 +30,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.metrics.DataTable; import org.apache.skywalking.oap.server.core.analysis.metrics.IntList; @@ -47,7 +48,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; */ @MeterFunction(functionName = "percentile") @Slf4j -public abstract class PercentileFunction extends Metrics implements AcceptableValue, MultiIntValuesHolder { +public abstract class PercentileFunction extends Meter implements AcceptableValue, MultiIntValuesHolder { public static final String DATASET = "dataset"; public static final String RANKS = "ranks"; public static final String VALUE = "value"; 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 85f128d463..f613646657 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 @@ -27,6 +27,7 @@ import lombok.ToString; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction; @@ -42,7 +43,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @MeterFunction(functionName = "avg") @ToString -public abstract class AvgFunction extends Metrics implements AcceptableValue, LongValueHolder { +public abstract class AvgFunction extends Meter implements AcceptableValue, LongValueHolder { protected static final String SUMMATION = "summation"; protected static final String COUNT = "count"; protected static final String VALUE = "value"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java index f2bfc39c8a..3110a12f0e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramFunction.java @@ -27,6 +27,7 @@ import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.BucketedValues; @@ -52,7 +53,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @MeterFunction(functionName = "avgHistogram") @Slf4j @ToString -public abstract class AvgHistogramFunction extends Metrics implements AcceptableValue { +public abstract class AvgHistogramFunction extends Meter implements AcceptableValue { public static final String DATASET = "dataset"; protected static final String SUMMATION = "summation"; protected static final String COUNT = "count"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java index 1dd353f5e1..69e4cfb2f5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgHistogramPercentileFunction.java @@ -34,6 +34,7 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction; @@ -63,7 +64,7 @@ import static java.util.stream.Collectors.mapping; */ @MeterFunction(functionName = "avgHistogramPercentile") @Slf4j -public abstract class AvgHistogramPercentileFunction extends Metrics implements AcceptableValue, MultiIntValuesHolder { +public abstract class AvgHistogramPercentileFunction extends Meter implements AcceptableValue, MultiIntValuesHolder { private static final String DEFAULT_GROUP = "pD"; public static final String DATASET = "dataset"; public static final String RANKS = "ranks"; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java index 5e11958bd3..76990f5c72 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/meter/function/avg/AvgLabeledFunction.java @@ -28,6 +28,7 @@ import lombok.ToString; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction; @@ -40,7 +41,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @MeterFunction(functionName = "avgLabeled") @ToString -public abstract class AvgLabeledFunction extends Metrics implements AcceptableValue, LabeledValueHolder { +public abstract class AvgLabeledFunction extends Meter implements AcceptableValue, LabeledValueHolder { protected static final String SUMMATION = "summation"; protected static final String COUNT = "count"; protected static final String VALUE = "value"; 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 29a14a6e7a..07741a995e 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 @@ -27,6 +27,7 @@ import lombok.ToString; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction; @@ -41,7 +42,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @MeterFunction(functionName = "latest") @ToString -public abstract class LatestFunction extends Metrics implements AcceptableValue, LongValueHolder { +public abstract class LatestFunction extends Meter implements AcceptableValue, LongValueHolder { protected static final String VALUE = "value"; @Setter 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 7436696a47..bb208d5cb5 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 @@ -27,6 +27,7 @@ import lombok.ToString; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.UnexpectedException; import org.apache.skywalking.oap.server.core.analysis.manual.instance.InstanceTraffic; +import org.apache.skywalking.oap.server.core.analysis.meter.Meter; import org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity; import org.apache.skywalking.oap.server.core.analysis.meter.function.AcceptableValue; import org.apache.skywalking.oap.server.core.analysis.meter.function.MeterFunction; @@ -41,7 +42,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column; @ToString @MeterFunction(functionName = "sum") -public abstract class SumFunction extends Metrics implements AcceptableValue, LongValueHolder { +public abstract class SumFunction extends Meter implements AcceptableValue, LongValueHolder { protected static final String VALUE = "value"; @Setter diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java index 78d70aef46..443bbd9d86 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java @@ -38,6 +38,11 @@ public class DefaultScopeDefine { *

* If you want to extend the scope, recommend to start with 10,000. */ + + /** + * @since 9.0.0 + */ + public static final int UNKNOWN = 0; public static final int ALL = 0; public static final int SERVICE = 1; public static final int SERVICE_INSTANCE = 2; @@ -58,7 +63,9 @@ public class DefaultScopeDefine { public static final int SERVICE_INSTANCE_CLR_THREAD = 21; public static final int ENVOY_INSTANCE_METRIC = 22; public static final int ZIPKIN_SPAN = 23; + @Deprecated public static final int JAEGER_SPAN = 24; + @Deprecated public static final int HTTP_ACCESS_LOG = 25; public static final int PROFILE_TASK = 26; public static final int PROFILE_TASK_LOG = 27;