将Spring的健康指标映射到指标

时间:2019-06-21 10:01:10

标签: java spring spring-boot-actuator micrometer

我想将每个春季的健康指标映射到普罗米修斯指标。与http://micrometer.io/docs/guide/healthAsGauge类似,但适用于每个健康指标。我使用弹簧靴2 +千分尺+普罗米修斯。有什么优雅的方法可以做到这一点吗? ID

3 个答案:

答案 0 :(得分:0)

解决方案可以是:

@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;
    }
}

您可以在注册表中绑定所有健康指标。

答案 1 :(得分:0)

这是另一种解决方案。它为每个HealthDindicater创建一个指标,并将指标的名称作为属性值。指标值1表示健康的个体,否则存在问题。

    @Bean
public MeterRegistryCustomizer<MeterRegistry> healthRegistryCustomizer(HealthContributorRegistry healthRegistry) {
    return registry -> healthRegistry.stream().forEach(namedContributor -> registry.gauge("health", Tags.of("name", namedContributor.getName()), healthRegistry, health -> {
        var status = ((HealthIndicator) health.getContributor(namedContributor.getName())).getHealth(false).getStatus();
        return healthToCode(status);
    }));
}

public static int healthToCode(Status status) {
    return status.equals(Status.UP) ? 1 : 0;
}

答案 2 :(得分:0)

这是对之前解决方案的清理。

@Bean
MeterRegistryCustomizer<MeterRegistry> metricsHealthGauge(HealthEndpoint healthEndpoint) {
    log.info("Registering application_health metric gauge");
    return registry ->
        Gauge.builder("application_health", healthEndpoint, e -> e.health().getStatus().equals(Status.UP) ? 1 : 0).register(registry);
}