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

如何根据标签更新千分尺

郎灿
2023-03-14

我在Spring Boot 2应用程序中使用千分尺来跟踪对象的状态。在状态更改时,调用<code>statusArrival()

这是我当前的实现:

public class PrometheusStatusLogger {

    private int currentStatus;

    public void statusArrived(String id, int value) {
        currentStatus = value;
        Tags tags = Tags.of("product_id", id);

        Gauge.builder("product_status",this::returnStatus)
          .tags(tags)
          .strongReference(true)
          .register(Metrics.globalRegistry);
    }

    private int returnStatus(){
        return currentStatus;
    }    
}

这工作得很好,但问题是当调用此方法时,所有仪表值都会更新。我只希望更新具有给定product_id的仪表。

输入:

statusArrived(1, 2);
statusArrived(2, 3);


电流输出:

product_status{product_id=1} 3
product_status{product_id=2} 3

所有仪表均已更新。

期望输出:

product_status{product_id=1} 2
product_status{product_id=2} 3

只有带有给定product_id标签的仪表才会更新。

我如何才能做到这一点?

共有1个答案

欧阳乐生
2023-03-14

由于您的所有仪表都引用相同的< code>currentStatus,因此当新值出现时,所有仪表的源都会改变。相反,使用一个地图来跟踪所有当前状态的id:

java prettyprint-override">public class PrometheusStatusLogger {

    private Map<String, Integer> currentStatuses =  new HashMap<>();

    public void statusArrived(String id, int value) {
        if(!currentStatuses.containsKey(id)) {
            Tags tags = Tags.of("product_id", id);
            Gauge.builder("product_status",currentStatuses, map -> map.get(id))
                    .tags(tags)
                    .register(Metrics.globalRegistry);
        }
        currentStatuses.put(id, value);
    }

}
 类似资料:
  • 这篇题为“测微计:Spring Boot 2的新应用程序度量收集器”的博客文章提到了“维度的重要性”。 但是,它没有包括如何在Spring Boot应用程序中设置关联标签的足够示例。 现在,我正在使用Spring Boot 2的千分尺接口来提供Prometheus就绪输出,而无需进行任何基于Java的配置。例如,设置“主机”标签是否需要我编写一些代码?那会是什么样子? 以下是我的整个配置:

  • 我正试图将普罗米修斯的度量标准迁移到千分尺,但现在我只能做一件事。。。 目前,我有一个普罗米修斯直方图配置如下: 因此,为了切换到测微计,我将其替换为: 好啊让我们看看我想如何使用它。。。此刻我只是打电话 所以我把这个换成了 但现在的问题是,测微计抱怨我之前配置的度量没有这些标签。我当然知道,因为我不知道当时的值。以下是例外情况: 好啊所以我想,然后让我们用呼叫。但这不起作用,因为没有传递这些值的

  • 问题内容: 我们使用詹金斯自动化测试基础架构。要求是使用户能够使用jenkins节点进行私有测试或使用私有jenkins作业进行调试,然后放回标有标签的节点池中。这样就可以在没有干扰的情况下运行其他标记为在特定标签上运行的作业。 我们可以通过允许用户更改标签来实现此目的,但是由于用户(将近50个)正在制作自己的标签名称而没有进行锻炼,因此管理员重新分配节点(甚至使用进程)需要花费时间,并且宝贵的测

  • 问题内容: 我有一个活动,该活动的TabHost包含一组TabSpec,每个TabSpec都有一个listview,其中包含要由该选项卡显示的项目。创建每个TabSpec时,我设置一个图标以显示在选项卡标题中。 TabSpec是通过以下方法创建的,该方法循环创建适当数量的选项卡: 有几个实例,我希望能够更改程序执行过程中每个选项卡中显示的图标。目前,我正在删除所有选项卡,并再次调用上述代码以重新创

  • 当我想用帖子的现有标签编辑帖子时,它只显示一个标签,尽管所选帖子中有更多标签。我还想在后期编辑刀片中输入新标签。 后期创建代码 **post控制器中的post更新代码** **后期编辑刀片的标签代码**

  • 我正在将Spring Boot应用程序从Spring Boot 1(使用Prometheus Simpleclient)转换为Spring Boot 2(使用微米)。 我很难将我们在《春靴1》和《普罗米修斯》中的标签转换为千分尺的概念。例如(普罗米修斯): Micrometer的标签似乎与Prometheus的标签有些不同:所有的值都必须预先声明,不仅仅是键。 可以将普罗米修斯的标签与Spring