Skip to content

Commit

Permalink
Prometheus percentiles histograms add a +Inf bucket (issue micrometer…
Browse files Browse the repository at this point in the history
  • Loading branch information
jkschneider committed Sep 14, 2017
1 parent 43b0d83 commit 44ec768
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ default Duration timerPercentilesMax() {
*/
default Duration timerPercentilesMin() {
String v = get(prefix() + ".timerPercentilesMin");
// default is 0.1 ms
return v == null ? Duration.ofNanos(100000) : Duration.parse(v);
return v == null ? Duration.ofMillis(10) : Duration.parse(v);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ private <T> Histogram<T> buildHistogramIfNecessary(Histogram.Builder<T> builder)
double max = (double) prometheusConfig.timerPercentilesMax().toNanos() / 1e9;
double min = (double) prometheusConfig.timerPercentilesMin().toNanos() / 1e9;

percentileHist.filterBuckets(BucketFilter.clampMax(max));
BucketFilter<Double> clampMax = BucketFilter.clampMax(max);
percentileHist.filterBuckets(b -> b.getTag() == Double.POSITIVE_INFINITY || clampMax.shouldPublish(b));
percentileHist.filterBuckets(BucketFilter.clampMin(min));
}
if(hist instanceof DoubleHistogram) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import io.micrometer.core.instrument.*;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
import io.micrometer.core.instrument.stats.hist.Histogram;
import io.micrometer.core.instrument.stats.quantile.GKQuantiles;
import io.prometheus.client.Collector;
import io.prometheus.client.CollectorRegistry;
Expand All @@ -28,6 +29,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

import static java.util.Collections.emptyList;
Expand Down Expand Up @@ -122,6 +124,23 @@ void namingConventionOfCustomMeters() {
.contains("my_custom");
}

@Test
void percentileTimersContainPositiveInfinity() {
Timer timer = Timer.builder("my.timer").histogram(Histogram.percentilesTime()).register(registry);
timer.record(1, TimeUnit.MILLISECONDS);

assertThat(registry.scrape()).contains("le=\"+Inf\"");
}

@Test
void percentileTimersAreClampedByDefault() {
Timer timer = Timer.builder("my.timer").histogram(Histogram.percentilesTime()).register(registry);
timer.record(1, TimeUnit.MILLISECONDS);

assertThat(Arrays.stream(registry.scrape().split("\n")).filter(l -> l.contains("le=")))
.hasSize(62);
}

private Condition<Enumeration<Collector.MetricFamilySamples>> withNameAndTagKey(String name, String tagKey) {
return new Condition<>(m -> {
while (m.hasMoreElements()) {
Expand Down

0 comments on commit 44ec768

Please sign in to comment.