I think I found it.
It wasn't super clear to me (or my searches, and it might be validated actually to issue warning), but:
management.metrics.distribution.slo.http.server.requests=100ms,500ms,1s,3s
and
management.metrics.distribution.percentiles-histogram.http.server.requests=true
are kinda mutually exclusive. See io.micrometer.core.instrument.distribution.DistributionStatisticConfig#getHistogramBuckets
Specifying 'slo buckets' will actually create them as requested, BUT these will be burried under lots of default ones, which are created upon enabling precentiles-histogram
. There is list of 275 default buckets pre-created and we select subset of them based on expected minimum and maximum duration. By default (io.micrometer.core.instrument.AbstractTimerBuilder#AbstractTimerBuilder) these are 1 millisecond and 30s respectively. Which you can override using org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties.Distribution#minimumExpectedValue
.
I don't understand this sufficiently, and this precision might be needed for some usecase. But if you need just if something is slower than some threshold (and mostly if smth is slower than 1s, it's bad regardless of how much), it might be safer just to specify slo thresholds.
If I'm still missing something or am wrong altogeher, please let me know!