/** * Returns a newly-registered {@link Timer} with percentile publication configured. * @deprecated Use {@link #newTimer(MeterRegistry, String, Iterable)}. */ @Deprecated public static Timer timerWithDefaultQuantiles(MeterRegistry registry, String name, Iterable<Tag> tags) { requireNonNull(registry, "registry"); requireNonNull(name, "name"); requireNonNull(tags, "tags"); return Timer.builder(name) .tags(tags) .publishPercentiles(PERCENTILES) .register(registry); }
/** * Returns a newly-registered {@link Timer} configured by {@link #distributionStatisticConfig()}. */ public static Timer newTimer(MeterRegistry registry, String name, Iterable<Tag> tags) { requireNonNull(registry, "registry"); requireNonNull(name, "name"); requireNonNull(tags, "tags"); final Duration maxExpectedValue = Optional.ofNullable(distStatCfg.getMaximumExpectedValue()) .map(Duration::ofNanos).orElse(null); final Duration minExpectedValue = Optional.ofNullable(distStatCfg.getMinimumExpectedValue()) .map(Duration::ofNanos).orElse(null); return Timer.builder(name) .tags(tags) .maximumExpectedValue(maxExpectedValue) .minimumExpectedValue(minExpectedValue) .publishPercentiles(distStatCfg.getPercentiles()) .publishPercentileHistogram(distStatCfg.isPercentileHistogram()) .distributionStatisticBufferLength(distStatCfg.getBufferLength()) .distributionStatisticExpiry(distStatCfg.getExpiry()) .register(registry); }
@Bean public MetricCollectingServerInterceptor metricCollectingServerInterceptor(final MeterRegistry registry, final Collection<BindableService> services) { final MetricCollectingServerInterceptor metricCollector = new MetricCollectingServerInterceptor(registry, counter -> counter.tag("type", "counter"), timer -> timer.tag("type", "timer").publishPercentiles(0.5, 0.9, 0.99), OK, UNKNOWN); log.debug("Pre-Registering custom service metrics"); for (final BindableService service : services) { log.debug("- {}", service); metricCollector.preregisterService(service); } return metricCollector; }
Timer timer = Timer.builder(name + ".latency") .publishPercentiles(0.5, 0.9, 0.95, 0.99) .tags(tags) .register(registry);
timerBuilder = timerBuilder.publishPercentiles(timed.percentiles());
timerBuilder = timerBuilder.publishPercentiles(0.5, 0.95) .publishPercentileHistogram();
builder.publishPercentiles(percentiles);
private Object timedProceed(ProceedingJoinPoint pjp, Timed timed) throws Throwable { if (timed.value().isEmpty()) { return pjp.proceed(); } Timer.Sample sample = Timer.start(registry); try { return pjp.proceed(); } finally { sample.stop( Timer.builder(timed.value()) .description(timed.description().isEmpty() ? null : timed.description()) .tags(timed.extraTags()) .tags(tagsBasedOnJoinpoint.apply(pjp)) .publishPercentileHistogram(timed.histogram()) .publishPercentiles(timed.percentiles().length == 0 ? null : timed.percentiles()) .register(registry)); } } }
public MicrometerTimer(MeterRegistry meterRegistry, MetricId id) { super(id); timer = io.micrometer.core.instrument.Timer.builder(id.getName()) .description(id.getDescription()) .tags(id.getTags().stream().map(tag -> Tag.of(tag.getKey(), tag.getValue())) .collect(Collectors.toList())) .publishPercentiles(0.5, 0.75, 0.98, 0.99, 0.999) .register(meterRegistry); }
@Test @DisplayName("meters with synthetics can be removed without causing deadlocks") void removeMeterWithSynthetic(MeterRegistry registry) { Timer timer = Timer.builder("my.timer") .publishPercentiles(0.95) .sla(Duration.ofMillis(10)) .register(registry); registry.remove(timer); }
@Deprecated @Test default void percentiles(MeterRegistry registry) { Timer t = Timer.builder("my.timer") .publishPercentiles(1) .register(registry); t.record(1, TimeUnit.MILLISECONDS); assertThat(t.percentile(1, TimeUnit.MILLISECONDS)).isEqualTo(1, Offset.offset(0.3)); assertThat(t.percentile(0.5, TimeUnit.MILLISECONDS)).isEqualTo(Double.NaN); }
@Test public void testServerCustomization() { log.info("--- Starting tests with server customization ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingServerInterceptor mcsi = new MetricCollectingServerInterceptor(meterRegistry, counter -> counter.tag("type", "counter"), timer -> timer.tag("type", "timer").publishPercentiles(0.5, 0.9, 0.99), OK, UNKNOWN); mcsi.preregisterService(new TestServiceImpl()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 10, meterRegistry.getMeters().size()); final Counter counter = meterRegistry.find(METRIC_NAME_SERVER_REQUESTS_RECEIVED).counter(); assertNotNull(counter); assertEquals("counter", counter.getId().getTag("type")); final Timer timer = meterRegistry.find(METRIC_NAME_SERVER_PROCESSING_DURATION).timer(); assertNotNull(timer); assertEquals("timer", timer.getId().getTag("type")); log.info("--- Test completed ---"); }
@Test public void testClientCustomization() { log.info("--- Starting tests with client customization ---"); final MeterRegistry meterRegistry = new SimpleMeterRegistry(); assertEquals(0, meterRegistry.getMeters().size()); final MetricCollectingClientInterceptor mcci = new MetricCollectingClientInterceptor(meterRegistry, counter -> counter.tag("type", "counter"), timer -> timer.tag("type", "timer").publishPercentiles(0.5, 0.9, 0.99), OK, UNKNOWN); mcci.preregisterService(TestServiceGrpc.getServiceDescriptor()); MetricTestHelper.logMeters(meterRegistry.getMeters()); assertEquals(METHOD_COUNT * 10, meterRegistry.getMeters().size()); final Counter counter = meterRegistry.find(METRIC_NAME_CLIENT_REQUESTS_SENT).counter(); assertNotNull(counter); assertEquals("counter", counter.getId().getTag("type")); final Timer timer = meterRegistry.find(METRIC_NAME_CLIENT_PROCESSING_DURATION).timer(); assertNotNull(timer); assertEquals("timer", timer.getId().getTag("type")); log.info("--- Test completed ---"); }
public Sample start(MeterRegistry registry) { if (longTask) { LongTaskTimer.Sample sample = LongTaskTimer.builder(name) .description(description) .tags(tags) .register(registry) .start(); return () -> sample.stop(); } Timer.Sample sample = Timer.start(registry); Timer timer = Timer.builder(name) .description(description) .tags(tags) .publishPercentileHistogram(histogram) .publishPercentiles(percentiles) .register(registry); return () -> sample.stop(timer); }