当前位置: 首页 > 知识库问答 >
问题:

带Spring Boot和千分尺的百分位数

毕浩渺
2023-03-14

我正在用Spring Boot2编写一个应用程序。我的方法试图产生价值,直到价值是唯一的。每个唯一生成的值都被添加到缓存中。一般来说,它应该在第一次尝试时生成值,但是应用程序运行得越多,生成的值就有越多的机会出现重复,并且需要再次生成。

我想有度量,显示tryToGenerate值的百分位数。

假设我的代码如下:

public void generateUniqueValue() {

  String value;
  int tryToGenerate = 0;
  do {
     tryToGenerate ++
     value = generateRandom();
     boolean unique = isUniqueValue(value);

  } while (!unique);

  addGeneratedValueToCache(value);   
}

我使用千分尺,但不知道我应该从什么开始。因为为了计算百分位数,我需要存储的不是单个值,而是值的数组

共有1个答案

林英锐
2023-03-14

确定isUniqueValue(..)的结果 ,您已经存储了使用过的值。您可以使用该存储创建适当的度量。

假设您正在一个名为usedIds的列表中存储每个已使用的值。另外,假设您正在生成一个介于0和1000之间的唯一数字。

在这种情况下,您可以编写这样的方法

public float getPercentageUsed() {
    return (float) usedIds.size() / 1000;
}

现在,您可以创建一个量表,将该值添加到度量中。假设用于生成唯一值的类称为UniqueValueService,它是一个合适的Springbean。在这种情况下,您可以创建一个Gaugebean,如下所示:

@Bean
public Gauge uniqueValueUsedGauge(MeterRegistry registry, UniqueIdService service) {
    return Gauge
        .builder("unique-values-used", service::getPercentageUsed)
        .baseUnit("%")
        .description("Percentage of possible unique values that have been used")
        .register(registry);
    }

编辑:看来我误解了你的问题。如果要获得tryToGenerate的直方图,要查看在第一次、第二次或第n次尝试中有多少次尝试成功,可以使用分发摘要。例如:

@Bean
public DistributionSummary summary(MeterRegistry registry) {
    return DistributionSummary
        .builder("unique-value-attempts")
        .sla(1, 5, 10)
        .publishPercentileHistogram()
        .register(registry);
}

在本例中,它将统计在第一次、第五次或第十次尝试中成功调用的次数。

在您的服务中,您现在可以自动连接分发摘要,在循环结束时,您可以这样使用它:

do {
    tryToGenerate++
    value = generateRandom();
    boolean unique = isUniqueValue(value);
  } while (!unique);
distributionSummary.record(tryToGenerate); // Add this

现在,您可以使用/执行器/度量/unique-value-attempts.histogram?tag=le: 1查看在第一次尝试中成功调用了多少次。第5次和第10次尝试也可以这样做。

 类似资料:
  • 我正在尝试使用SSL上带有Elasticsearch的测微计。 我在版本1.8.0中使用测微计,在版本7.16.3和OpenJDK 11.0.2中使用Elasticsearch。 因为我知道不可能使用内置配置(链接),所以我尝试注入一个自定义的HttpUrlConnectionSender,如下面的SecureHttpSender类所示: 我注入了Spring启动,所以我可以应用所需的配置,但我得

  • 我对Spring很陌生,正在尝试将我的应用程序连接到麋鹿。该应用程序运行的是Spring boot 1.5.5,因此我使用的是微米遗产。我的pom看起来像这样: 每当我尝试启动我的应用程序时,我都会收到以下错误: 根本原因似乎是类io.micrometer.core.instrument.config.validate.Validated它似乎没有像它应该的那样出现在包中。对此有什么想法吗?

  • 是否有任何方法可以测量实用程序如何使用线程池?我已经浏览了代码,但还没有看到任何直接的选项。

  • 我正在利用dogstatsd方法,使用千分尺将指标发送给datadog。我获得了正常的指标,如计数器和计量器,但我无法生成事件。有办法生成datadog事件吗?

  • 我正在将Spring Cloud Stream应用程序迁移到功能方法。到目前为止,我使用了提供Spring集成的千分尺指标。请参见Spring集成-千分尺集成。 自迁移以来,使用StreamBridge生成的消息不再生成度量。这似乎是因为Spring集成在将通道定义为bean时创建了它的度量,而StreamBridge则动态创建通道。 话虽如此,我的问题是: SCS是否提供任何其他类型的度量? 如

  • 假设我有一个应用程序,其中REST API更新产品的价格。 我想使用微米计来公开新价格作为指标。我无法理解微米计留档应该如何完成。 唯一对我有效的DoubleFunction是在我的ProductService中创建一个新方法来返回它的价格。这似乎是我想公开作为指标的每一条数据的开销。 我这里缺少什么?为什么不足以更新Gauge?