簡體   English   中英

Spring Boot Actuator - Java 端點

[英]Spring Boot Actuator - Java Endpoint

我們在我們的主要服務中使用的基礎設施模型中有一個示例執行器健康檢查(向包添加依賴項,@Import 類名等)。

我們知道 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)(無需休息等)?

Spring Boot 有一些自動配置的 bean,稱為HealthIndicators ,完整列表在這里

應該可以像這樣使用它:

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

總而言之,您可以遵循以下策略:

  1. 使用 JMX。 除了 REST,Spring Boot 執行器還可以通過 JMX 公開端點。 請參閱文檔 因此,您可以編寫一個代碼,以編程方式訪問“健康”mbean 並獲取聚合信息。

  2. 嘗試將HealthEndpoint (它應該是一個 bean,雖然我自己從未嘗試過)注入您的類並通過直接從您的服務器調用對象來獲取有關健康的信息(就像它是一個常規類) - 你將從 JSon 中獲取邏輯上表示信息的對象。 健康端點的源代碼可在此處獲得

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM