Spring 引导执行器 - Java 端点

Spring Boot Actuator - Java Endpoint

我们在我们的主要服务中使用的基础设施模型中有一个示例执行器健康检查(将依赖项添加到包、@Import class 名称等)。

我们知道http端点,通过添加后缀 /actuator/health,结果如下:

{
    "status": "UP",
    "components": {
        "com......DbServiceValidator": {
            "status": "UP"
        },
        "com......StorageServiceValidator": {
            "status": "UP"
        },
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 505370734592,
                "free": 362675372032,
                "threshold": 10485760,
                "exists": true
            }
        },
        "ping": {
            "status": "UP"
        }
    }
}

但我们希望通过 java 代码以编程方式获取所有这些数据。 我做了一些研究,但一无所获。

是否可以直接从代码中获取数据(/json)(无需休息等)?

有一些 auto-configured bean 由 Spring Boot 调用 HealthIndicators,完整列表 here

应该可以这样使用:

@Autowired
DiskSpaceHealthIndicator diskSpaceHealthIndicator;

void getDiskStatus() {
    logger.info("Current Disk status {}", diskSpaceHealthIndicator.health().getStatus());
}

编辑:

受@MarkBramnik 的回答启发,我验证了可以注入 HealthEndpoint 并将结果打印为 JSON:

@Autowired
private HealthEndpoint healthEndpoint;

public void printHealthStatus() {
    ObjectMapper mapper = new ObjectMapper();
    log.info(mapper.writeValueAsString(healthEndpoint.health().getStatus()));
    // output is: {"status":"UP"}
}

All-in-all您可以遵循以下策略:

  1. 使用 JMX。 Spring 除了 REST 之外,引导执行器还可以通过 JMX 公开端点。 参见 the documentation。因此,您可以编写代码以编程方式访问“健康”mbean 并获取聚合信息。

  2. 尝试将HealthEndpoint(应该是bean,虽然我自己没试过)注入你的class,获取健康信息通过直接从您的服务器调用该对象(就好像它是一个常规 class)- 您将获得逻辑上代表来自 JSon 的信息的对象。 health端点源代码可用here