spring Sping Boot 2迁移后未导出健康端点指标

f0brbegy  于 2023-05-27  发布在  Spring
关注(0)|答案(1)|浏览(174)

我的团队将我们的微服务从Sping Boot 1迁移到版本2,由于执行器发生了变化,我们通过prometheus jmx导出器导出的健康端点指标不再起作用。
通常的/actuator/health按预期工作,但prometheus-jmx-exporter不会拾取它,尽管尝试了以下几种方法:

  • 我更改了exporter-config.yaml中的元信息,以反映 Boot 2中的名称更改
  • 我将io.micrometer:micrometer-registration-prometheus添加到我们的build.gradle中,以查看这是否是问题所在
  • 我根据Sping Boot 2文档公开了web和jmx端点

所以现在我的想法用完了,并会感谢任何提示oyu可能能够给予我
旧的prometheus-jmx-exporter exporter-config.yaml:

---
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames: ["org.springframework.boot:type=Endpoint,name=healthEndpoint"]
rules:
- pattern: 'org.springframework.boot<type=Endpoint, name=healthEndpoint><(.*, )?(.*)>(.*):'
  name: health_endpoint_$1$3
  attrNameSnakeCase: true

新建prometheus-jmx-exporter exporter-config.yaml:

---
lowercaseOutputName: true
lowercaseOutputLabelNames: true
whitelistObjectNames: ["org.springframework.boot:type=Endpoint,name=Health"]
rules:
- pattern: 'org.springframework.boot<type=Endpoint, name=Health>'
  name: health_endpoint_$1$3
  attrNameSnakeCase: true

关于执行器端点的当前应用程序属性:

management.endpoints.web.exposure.include=info, health, refresh, metrics, prometheus
management.endpoints.jmx.exposure.include=health, metrics, prometheus

在Sping Boot 1中,使用旧的exporter-config.yaml,我会得到这样的结果:

# HELP health_endpoint_hystrix_status Invoke the underlying endpoint (org.springframework.boot<type=Endpoint, name=healthEndpoint><hystrix, status>status)
# TYPE health_endpoint_hystrix_status untyped
health_endpoint_hystrix_status 1.0
# HELP health_endpoint_status Invoke the underlying endpoint (org.springframework.boot<type=Endpoint, name=healthEndpoint><status>status)
# TYPE health_endpoint_status untyped
health_endpoint_status 1.0

但是随着所有的变化和在Sping Boot 2中,我什么也没得到。

nnsrf1az

nnsrf1az1#

您可以配置自己的健康值并将其添加到Prometheus Metrics端点:

@Configuration
public class HealthMetricsConfiguration {

    @Bean
    public MeterRegistryCustomizer prometheusHealthCheck(HealthEndpoint healthEndpoint) {
        return registry -> registry.gauge("health", healthEndpoint, HealthMetricsConfiguration::healthToCode);
    }

    public static int healthToCode(HealthEndpoint ep) {
        Status status = ep.health().getStatus();

        return status.equals(Status.UP) ? 1 : 0;
    }
}

相关问题