带有Spring Boot的千分尺添加自定义指标以计算用户注册

问题描述

添加计数用户注册自定义指标的最佳方法是什么? 这是这种情况:

class Registration {
   Long id;
   boolean activated;
}

及其存储库

interface RegistrationRepository extends JpaRepository<Registration,Long> { 
    Long countByActivated(boolean isActivated);
}

访问http://localhost:8080/actuator/metrics/user.registrations

我想要3个指标:

1-使用registrationRepository.count()

的所有注册指标

2-使用registrationRepository.countByActivated(true):通过http://localhost:8080/actuator/metrics/user.registrations?tag=activated:true

用于激活注册的指标

3-使用registrationRepository.countByActivated(false)通过http://localhost:8080/actuator/metrics/user.registrations?tag=activated:false的未激活注册的度量标准

问题是我无法使用io.micrometer.core.instrument.Counter接口,因为在重新启动应用程序时计数器会重置为0。

解决此问题的最佳方法是什么?

解决方法

您可以使用io.micrometer.core.instrument.FunctionCounter

您可以在FunctionCounter.Builder中提供回调:


FunctionCounter counter FunctionCounter.builder(name,meterBean,MeterBean::getValue)
                    .description(description)
                    .baseUnit(unit)
                    .tags(tags)
                    .register(meterRegistry)
        }

MeterBean可以是一个简单的bean,例如:


public interface MeterBean {

    private double value;

    public double getValue() { return this.value };

    public void setValue() { this.value = callTheMethodUWantToSetTheValue() }

}

在部署新版本的应用程序时,该值仍会重置为0,但是您可以在应用程序引导时设置此bean的值。因此,应避免使用千分尺报告0。