我正在用Spring Boot2编写一个应用程序。我的方法试图产生价值,直到价值是唯一的。每个唯一生成的值都被添加到缓存中。一般来说,它应该在第一次尝试时生成值,但是应用程序运行得越多,生成的值就有越多的机会出现重复,并且需要再次生成。
我想有度量,显示tryToGenerate
值的百分位数。
假设我的代码如下:
public void generateUniqueValue() {
String value;
int tryToGenerate = 0;
do {
tryToGenerate ++
value = generateRandom();
boolean unique = isUniqueValue(value);
} while (!unique);
addGeneratedValueToCache(value);
}
我使用千分尺,但不知道我应该从什么开始。因为为了计算百分位数,我需要存储的不是单个值,而是值的数组
确定isUniqueValue(..)的结果
,您已经存储了使用过的值。您可以使用该存储创建适当的度量。
假设您正在一个名为
usedIds
的列表中存储每个已使用的值。另外,假设您正在生成一个介于0和1000之间的唯一数字。
在这种情况下,您可以编写这样的方法:
public float getPercentageUsed() {
return (float) usedIds.size() / 1000;
}
现在,您可以创建一个
量表
,将该值添加到度量中。假设用于生成唯一值的类称为UniqueValueService
,它是一个合适的Springbean。在这种情况下,您可以创建一个Gauge
bean,如下所示:
@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?