Caused by: io.micrometer.core.instrument.config.InvalidConfigurationException: Invalid distribution configuration: expiry (1ms) / bufferLength (3) must be greater than 0.
at io.micrometer.core.instrument.distribution.AbstractTimeWindowHistogram.rejectHistogramConfig(AbstractTimeWindowHistogram.java:129)
at io.micrometer.core.instrument.distribution.AbstractTimeWindowHistogram.<init>(AbstractTimeWindowHistogram.java:82)
at io.micrometer.core.instrument.distribution.TimeWindowPercentileHistogram.<init>(TimeWindowPercentileHistogram.java:41)
at io.micrometer.core.instrument.AbstractTimer.<init>(AbstractTimer.java:89)
at io.micrometer.prometheus.PrometheusTimer.<init>(PrometheusTimer.java:65)
at io.micrometer.prometheus.PrometheusMeterRegistry.newTimer(PrometheusMeterRegistry.java:324)
at io.micrometer.core.instrument.MeterRegistry.lambda$timer$2(MeterRegistry.java:318)
at io.micrometer.core.instrument.MeterRegistry.getOrCreateMeter(MeterRegistry.java:618)
at io.micrometer.core.instrument.MeterRegistry.registerMeterIfNecessary(MeterRegistry.java:570)
at io.micrometer.core.instrument.MeterRegistry.timer(MeterRegistry.java:316)
at io.micrometer.core.instrument.Timer$Builder.register(Timer.java:400)
at io.lettuce.core.metrics.MicrometerCommandLatencyRecorder.firstResponseTimer(MicrometerCommandLatencyRecorder.java:125)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
at io.lettuce.core.metrics.MicrometerCommandLatencyRecorder.recordCommandLatency(MicrometerCommandLatencyRecorder.java:80)
at io.lettuce.core.protocol.CommandHandler.recordLatency(CommandHandler.java:914)
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:771)
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:659)
at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:833)
这个问题是因为 durationBetweenRotatesMillis <= 0 导致,如下图所示:
在yml加上以下参数:
management:
metrics:
distribution:
expiry:
lettuce: 10ms
这样就保证durationBetweenRotatesMillis不小于0: