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

如何使用千分尺测量随时间的调用

丁宏盛
2023-03-14

我有一个Spring Boot应用程序,我现在正在迁移到Micrometer。

我想实现的是,随着时间的推移计算特定对象的调用。

让我们假设我有一个创建某些品牌的汽车的功能。然后我想测量一下我在过去一分钟内创造了多少辆福特,斯柯达,大众等。特别是,如果在 now()-1 和 now() 之间没有创建斯柯达,则指标应返回 0。

文档声明我不应该使用计数器,因为在运行应用程序时,创建的汽车数量可能会无限增长。计时器也不太合适,因为我只会在构造函数调用之前和之后启动计时器。

我尝试了一个量规,但这只给了我绝对的数字:

Arrays.stream(brand).forEach(brand -> metricNames.stream().forEach(name -> {
      String id = METRIC_PREFIX + METRIC_SEPARATOR + brand + name;
      AtomicInteger summary = Metrics.gauge(id, new AtomicInteger(0));
      summary.getAndIncrement();
    }));

在dropwizard中有米,但在微米中的等价物是什么?

共有1个答案

卞昀
2023-03-14

你需要一个计数器:

    MeterRegistry metrics...

    private final Counter nikeBrandCounter = metrics.counter("brands", "brand", "Nike");

    Arrays.stream(brand).forEach(brand -> metricNames.stream().forEach(name -> {
        if(name == "Nike") {
            nikeBrandCounter.increment();
        }
    }));
 类似资料:
  • 我们有一个限制实现,基本上可以归结为: 我想收集关于信号量对方法的整体响应时间的影响的指标。例如,我想知道等待获取的线程数量,等待的时间等等。我想,我正在寻找的是一种也能捕捉时间信息的量规。 如何测量Semphore统计数据?

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

  • 我想测量使用WebFlux进行的一些异步调用的长度。我已经阅读了各种来源,因为我了解到注释与AspectJ一起工作,基本上只是在方法调用之前启动计时器,然后停止。这显然不适用于异步方法。 是否有任何针对WebFlux的解决方案,或者我唯一能做的就是传递执行时间戳,使我的应用程序逻辑混乱?

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

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

  • 我想测量处理某些数据需要多长时间:我的应用程序以固定速率从给定源读取该数据。在每个圆圈之前,我存储。我读取数据,将单个时间戳添加到每个条目中。数据被存储,转换,就在我通过WebSockets发送它之前,我想测量和初始时间戳之间的持续时间。 我试过了 但是可视化这一点只允许我使用<code>processingDuration_seconds_count、<code>_max和<code>_ sum