问题描述
我正在使用千分尺度量标准来监视Vertx服务中的Http_max_response_time。 (使用Prometheus配置指标)。
在测试时,我在 13:15:16 发送一个超时为3秒的请求,并且度量标准返回正确的值约为Http_max_response_time(3s)。但是在该请求之后,没有任何超时时间为3秒的请求发送到服务器,量表指标仍返回Http_max_response_time = 3秒,直到 13:17:51 ,然后将新值Http_max_response_time减小为更少超过3秒。我认为它需要更频繁地更新。
我的问题在这里
- 仪表度量标准更新新值多长时间或保持当前值多久?
- 衡量指标Http_max_response_time执行哪种逻辑?它只是更新一个全局值并在有观察时返回它吗?
如果我的问题不清楚,请发表评论,我将显示更多细节。 预先感谢,
解决方法
已更新:
Vertx千分尺度量标准使用 Timer 度量标准来响应时间,并使用TimeWindowMax更新最高值。
基本计时器实现(例如CumulativeTimer)的Max,StepTimer是一个时间窗口最大值(TimeWindowMax)。这意味着它的值是一个时间窗口内的最大值。如果没有记录新的时间窗口长度值,则当新的时间窗口开始时,最大值将重置为0。除非DistributionStatisticConfig中的有效期明确设置为其他值,否则时间窗口大小将是电表注册表的步长。之所以使用时间窗口最大值,是为了在资源压力过大触发延迟并阻止度量标准发布之后的后续时间间隔中捕获最大延迟。
因此,我们可以根据需要将 DistributionStatisticConfig 中的默认到期配置更改为较小的值。
这里是我的代码,用于将包含responseTime的指标的TimeWindowMax更改为2秒:
registry.config().meterFilter(
new MeterFilter() {
@Override
public DistributionStatisticConfig configure(Meter.Id id,DistributionStatisticConfig config) {
if(id.getName().contains("responseTime")) {
return DistributionStatisticConfig.builder()
.expiry(Duration.ofSeconds(5))
.build()
.merge(config);
}
return config;
}
});
而且有效。