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

Spring Boot-MeterBinder的指标从未注册

汤飞翮
2023-03-14

情况:您通过MeterBinder在Spring Boot中注册了一个指标。也许它是自动配置的指标之一,如jvm.gc.pause1,或者它可能是您自己的自定义指标。但是有一天,您启动应用程序时,它丢失了。它没有报告,也没有显示在执行器中,它就这样消失了。

根本原因:可能是您的代码或您正在使用的库正在注入计量注册。这样做有很多正当理由,所以不要责怪自己。但是注入计量注册意味着它将在创建所有豆子(包括可能的计量标记)之前创建和初始化。

也有可能没有注入MeterRegistry,但Spring出于其他原因决定在MeterBinders之前创建它。无论如何,MeterBinders将停止为您工作,您对此无能为力。

共有1个答案

元胡媚
2023-03-14

我的解决方案是创建自己的后处理器:

@Component
class FixMeterBinders implements BeanPostProcessor {

    @Autowired
    ObjectProvider<MeterRegistry> meters;

    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if(bean instanceof MeterBinder) {
            ((MeterBinder)bean).bindTo(meters.getObject());
        }
        return bean;
    }
}

这种方法有一个很大的缺点:如果Spring的后处理器按预期工作,每个MeterBinder将运行两次,因此您需要确保它们所做的工作是幂等的。

 类似资料:
  • 我已经为我的spring boot应用程序配置了测微计和prometheus,我可以在endpoint/执行器/prometheus处看到以下指标(使用计时器生成): 但当我在Grafana中运行其中一个查询(针对prometheus实例配置)时,我没有看到任何结果。 这需要任何配置吗?

  • 我在尝试执行此代码时遇到以下错误。 java.lang.IllegalArgumentException:在“com.app.aggregatorappaconfiguration”上找不到ConfigurationProperties注释。在org.springframework.util.assert.NotNull(assert.java:115)~[spring-core-4.3.2.re

  • 我现在收到的每一条消息都会出现以下错误: 1437425804:未注册标识符为“未找到默认值”的图标 仅当后端用户登录时,才会发生此错误。对于刚刚访问网站(没有后端用户登录会话)的用户来说,网站工作正常。 我不知道有一个带有标识符的图标,也不知道从哪里开始调试。扩展扫描仪看起来不错。有人给我一个提示吗? 编辑 这是错误的回溯: Fri,19 Mar2021 12:28:52 0100[关键]请求=

  • 我想发送自定义指标使用io.micrometer.datadog.DatadogMeter注册表到datadog.下面是代码片段的方法,我在其中发出指标到Datadog. 我可以看到日志“metric sent successfully”,没有错误,但这个自定义指标没有显示在Datadog UI的metrics summary下。我错过什么了吗?

  • 我引用了Spring boot-inject map from application.yml来从application.yml文件中注入map 下面是我的application.yml代码段 属性文件如下所示 但是,我发现只有当setter和getter的格式正确时才会发生值注入,即getPairMap和setPairMap。在使用getPairs或setpairs时不是这种行为的原因是什么