Micrometer Timer.start/stop 和 Timer.record 之间的区别

Difference between Micrometer Timer.start/stop and Timer.record

我想检查数据库命中(多个数据库)和请求处理的延迟。 Timer.SampleTimer.record 哪个更好?

我正在使用以 Prometheus 为基础的 Micrometer。

主要区别是manually stop录音

添加了选项

You may also store start state in a sample instance that can be stopped later. The sample records a start time based on the registry’s clock. After starting a sample, execute the code to be timed and finish the operation by calling stop(Timer) on the sample.

当您计算出事件持续时间时,使用Timer.record。

default void record(Duration duration)

当您想要传递示例以确定发布指标的点时,您通常会使用 Timer.Sample,不一定在完全相同的位置。您还可以更精细地控制使用 Timer 对象发布的内容。 这是一个两步过程。

  1. 在活动开始前创建样本到return样本对象使用

    static Sample start(Clock clock) {..}
    
  2. 停止示例并在 activity 使用 Sample.stop

    完成后推送指标
    public long stop(Timer timer) {..}
    

例如 TimedAspect -

    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));
    }