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

如何使用千分尺创建桶

程峻
2023-03-14

我对千分尺的理解仍然相当小,所以我将首先介绍我真正想要实现的目标。

目的

  • 鉴于我在数据库表中有记录,每条记录都包含一个“creation_date”。
  • 给定客户端调用 API 来获取这些记录
  • 我想记录记录记录的访问次数,按其创建日期分组(仅月和年)

示例结果

  • 在过去的6小时内,访问了2021年1月创建的10条记录
  • 在过去的12小时内,访问了2021年2月创建的15条记录
  • 在上周一和上周二之间,访问了2021年2月创建的5条记录

我所想到的

  • 每个月/年组合的计数器,每当访问同一月/年创建日期的记录时,该计数器就会递增

如果我没弄错的话,这种方法的问题是必须为过去和未来创建的计数器数量。

我在想,是否可以有一种直径在微米以内的桶支架,就像:

    < li >如果访问的记录是在2021年1月创建的-

我不确定我是否朝着正确的方向来实现这一目标。谢谢!

共有1个答案

狄钧
2023-03-14

检查文件,阅读关于维度和标签:https://micrometer.io/docs/concepts

如果我正确理解您的问题,您希望计数器有一个标记(标签),显示访问的月份,下面是一个示例:

public class TagsDemo {
    private static final SimpleMeterRegistry registry= new SimpleMeterRegistry();

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            Counter accessCounter = Counter.builder("accessed")
                    .tag("year", getAccessedYear())
                    .tag("month", getAccessedMonth())
                    .register(registry);
            accessCounter.increment();
        }

        System.out.println(registry.getMetersAsString());
    }

    private static String getAccessedYear() {
        return "202" + (int)(Math.random() * 2); // 2020, 2021
    }

    private static String getAccessedMonth() {
        return "0" + ((int)(Math.random() * 2) + 1); // 01, 02
    }
}

这产生了4个时间序列(2020-01,2020-02,2021-01,2021-02):

accessed(COUNTER)[month='01', year='2021']; count=1.0
accessed(COUNTER)[month='02', year='2021']; count=3.0
accessed(COUNTER)[month='01', year='2020']; count=4.0
accessed(COUNTER)[month='02', year='2020']; count=2.0

在您的后端,您可以查询(因为我不知道您的注册表,所以我编写了一种查询语言):

  • 总数是多少:sum(访问)
  • 2021年总数是多少:sum(访问WHERE年份=2021)
  • 2021-01年的总数是多少:sum(访问WHERE年=2021年和月=01)

当然,您可以只添加一个标签,如 .tag(“日期”,getAccessedDate())2021-01) 并查询:总和(访问 WHERE DATE=2021-01),但这可能会导致您无法分别查询年份和月份。

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

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

  • 我写了一个spring boot应用程序,我想把自定义的度量暴露给普罗米修斯与千分尺。下面是一个代码片段,我正在递增一个计数器(这起作用),并尝试设置几个量规(这不起作用): 完整的源代码在这里:https://github.com/alexwoolford/htu21dlogger/tree/master/htu21d-logger-spring 对象中的字段是一个。量表存在于输出中,但值为(即

  • 我正在利用dogstatsd方法,使用千分尺将指标发送给datadog。我获得了正常的指标,如计数器和计量器,但我无法生成事件。有办法生成datadog事件吗?

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

  • 我有一个Spring Boot应用程序,我现在正在迁移到Micrometer。 我想实现的是,随着时间的推移计算特定对象的调用。 让我们假设我有一个创建某些品牌的汽车的功能。然后我想测量一下我在过去一分钟内创造了多少辆福特,斯柯达,大众等。特别是,如果在 之间没有创建斯柯达,则指标应返回 0。 文档声明我不应该使用计数器,因为在运行应用程序时,创建的汽车数量可能会无限增长。计时器也不太合适,因为我