微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应该添加什么代码工具来注册 MeterRegistry 中具有特定标签和分钟值的每个 http 事件事件请求数以百万计

如何解决应该添加什么代码工具来注册 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 举报,一经查实,本站将立刻删除。