diff --git a/CHANGES.md b/CHANGES.md index 9262598c7..8c8e02908 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -113,6 +113,8 @@ Release Notes. new timeout mechanism is designed for avoiding this specific case. * Fix Kafka transport topics are created duplicated with and without namespace issue * Fix possible version_conflict_engine_exception in bulk execution. +* Fix PrometheusMetricConverter may throw an `IllegalArgumentException` when convert metrics to SampleFamily +* Filtering NaN value samples when build SampleFamily #### UI diff --git a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/SampleFamily.java b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/SampleFamily.java index f38887bf6..bfacea461 100644 --- a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/SampleFamily.java +++ b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/SampleFamily.java @@ -74,6 +74,7 @@ public class SampleFamily { static SampleFamily build(RunningContext ctx, Sample... samples) { Preconditions.checkNotNull(samples); + samples = Arrays.stream(samples).filter(sample -> !Double.isNaN(sample.getValue())).toArray(Sample[]::new); Preconditions.checkArgument(samples.length > 0); return new SampleFamily(samples, Optional.ofNullable(ctx).orElseGet(RunningContext::instance)); } diff --git a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/prometheus/PrometheusMetricConverter.java b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/prometheus/PrometheusMetricConverter.java index 54a40d621..c2d4bb140 100644 --- a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/prometheus/PrometheusMetricConverter.java +++ b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/prometheus/PrometheusMetricConverter.java @@ -88,7 +88,7 @@ public class PrometheusMetricConverter { return metricStream .peek(metric -> log.debug("Prom metric to be convert to SampleFamily: {}", metric)) .flatMap(this::convertMetric) - .filter(t -> t != NIL) + .filter(t -> t != NIL && t._2.samples.length > 0) .peek(t -> log.debug("SampleFamily: {}", t)) .collect(toImmutableMap(Tuple2::_1, Tuple2::_2, (a, b) -> { log.debug("merge {} {}", a, b);