如何解决应该添加什么代码工具来注册 MeterRegistry 中具有特定标签和分钟值的每个 http 事件事件请求数以百万计
我需要分析一个不应超过 30 分钟的 http 事件值。 & 95% 的事件应该属于这个桶。如果失败发送警报。
我首先关心的是在 /actuator/prometheus 中获得正确的指标
我采取的步骤: 与在每个 http 请求事件中一样,我得到一个名为 eventMinute 的整数值。
使用 micrometer MeterRegistry,我尝试了下面的代码
// MeterRegistry meterRegistry ...
meterRegistry.summary("MINUTES_ANALYSIS",tags);
where tag = EVENT_MINUTE 在每个 http 事件。
但通过这种方式,它会因数百万个事件而导致指标泛滥。
请指导我,我是初学者。谢谢!!
解决方法
最简单的解决方案(我建议您开始使用)是只创建 2 个计数器:
int theThing = //getTheThing()
if(theThing > 30) {
meterRegistry.counter("my.request.counter.abovethreshold").inc()
}
meterRegistry.counter("my.request.counter.total").inc()
您将增加与阈值匹配的计数器和跟踪所有请求的计数器(或重复使用另一个为您执行此操作的仪表)。
然后设置图表或警报很简单:
my_request_counter_abovethreshold/my_request_counter_total < .95
(我没有测试代码。它可能需要一点点调整)
您可以通过设置各种 SLO(我不熟悉它们无法提供一个)来对 DistributionSummary
做类似的事情,但首先从一些简单的事情开始,如果它足够了,您将不需要其他复杂性。
有一些方法可以解决这个问题
1 ;这是一个接收标签、指标名称和值的函数
public void createOrUpdateHistogram(String metricName,Map<String,String> stringTags,double numericValue)
{
DistributionSummary.builder(metricName)
.tags(tags)
//can enforce slo if required
.publishPercentileHistogram()
.minimumExpectedValue(1.0D) // can take this based on how you want your distibution
.maximumExpectedValue(30.0D)
.register(this.meterRegistry)
.record(numericValue);
}
然后它产生像
这样的指标delta_bucket{mode="CURRENT",le="30.0",} 11.0
delta_bucket{mode="CURRENT",le="+Inf",} 11.0
因为 infinte 也包含小于值,所以从 le=+Inf 中减去 le=30
另一种可能是
public void createOrUpdateHistogram(String metricName,double numericValue)
{
Timer.builder(metricName)
.tags(tags)
.publishPercentiles(new double[]{0.5D,0.95D})
.publishPercentileHistogram()
.serviceLevelObjectives(new Duration[]{Duration.ofMinutes(30L)})
.minimumExpectedValue(Duration.ofMinutes(30L))
.maximumExpectedValue(Duration.ofMinutes(30L))
.register(this.meterRegistry)
.record((long)timeDifference,TimeUnit.MINUTES);
}
它只有两个文件,给定的时间和 +inf
它可以根据我们的要求进行更改,也可以为我们提供分位数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。