Spring Boot Actuator的/health端点未显示数据库或文件系统信息。

14

我无法在/health端点上显示数据库信息或文件系统信息。我只能获取:

{
  "status": "UP"
}

我的设置和配置细节: - Spring Boot 1.3.3 - 在 JBoss EAP 6.4 上运行 WAR 文件 - 数据源是 JNDI 资源。 - Oracle 是数据库

spring:
  datasource:
    # Must match the datasource name in JBoss standalone.xml
    jndi-name: java:jboss/beautiful-ds
    driver-class-name: oracle.jdbc.driver.OracleDriver
  jpa:
    properties:
      # escapes reserved words used as column names (if any)
      globally_quoted_identifiers: true
    show-sql: true
    hibernate:
        naming_strategy: org.hibernate.cfg.EJB3NamingStrategy

server:
  servlet-path: /*

management:
  health:
    diskspace:
      enabled: true
    db:
      enabled: true
endpoints.health.sensitive: false
我在/configprops找到了一件事,但我不确定它是否相关。
  "spring.datasource.CONFIGURATION_PROPERTIES": {
    "prefix": "spring.datasource",
    "properties": {
      "error": "Cannot serialize 'spring.datasource'"
    }

我曾尝试添加"driver-class-name: oracle.jdbc.driver.OracleDriver",认为可能需要更多详细信息,但这并没有改变情况。

所以,是什么原因呢?我创建了一个基础的示例项目,其中至少展示了文件系统,所以不确定为什么两者都不想在我的“真实”应用程序中显示。请告诉我你伟大而智慧的答案! :)

5个回答

14

默认情况下,Spring将以下属性设置为never。 要能够查看完整的健康详细信息,请将以下属性添加到您的application.properties

management.endpoint.health.show-details=always

一开始我以为是打错字了,因为其他属性都是以 management.endpointS 开头。但你是对的。该属性的另一个有用值是 when-authorized:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html#production-ready-health - volkovs
1
IDEA建议使用属性值when_authorized,这也可以正常工作。 - volkovs

5

如果你正在使用Spring Security,那么默认情况下安全性已经启用了执行器端点,可以在你的yml文件中禁用它 -

management:
    security:
           enabled: false

5
spring-boot 文档中得知:
45.6 健康指标的安全性
由 HealthIndicators 返回的信息通常具有一定的敏感性质。例如,您可能不希望将数据库服务器的详细信息发布给全世界。因此,默认情况下,仅在未经身份验证的 HTTP 连接上公开健康状态。如果您希望始终公开完整的健康信息,则可以将 endpoints.health.sensitive 设置为 false。为了防止“拒绝服务”攻击,还会缓存健康响应。如果要更改默认缓存期(1000 毫秒),请使用 endpoints.health.time-to-live 属性。
确保设置以下属性。
endpoints.health.sensitive=true # Mark if the endpoint exposes sensitive information.
management.health.db.enabled=true # Enable database health check.
management.health.defaults.enabled=true # Enable default health indicators.
management.health.diskspace.enabled=true # Enable disk space health check.

2

据我所知,聚合健康状况显示在/health下,至少对于SpringBoot2而言是这样的。这意味着即使您已经正确配置了所有内容,仅会显示一行。

更新:如果这不是您需要的,请明确要求查看详细信息。请检查以下设置:

management.endpoint.health.show-details=when-authorized
management.endpoint.health.roles=ADMIN

0

您在配置文件中混合使用了YAML和Properties语法。请将最后一行替换为以下内容,应该就可以正常工作:

endpoints:
    health:
        sensitive: false

1
我感谢您的回答,但不管你信不信,我能够使用该属性语法轻松切换该值。将该行更改为YAML格式会产生相同的结果。/heath上没有新的结果。 - jeremy simon
你启用了安全性吗? - dunni
我正在使用Spring Boot的Keycloak适配器。我可以很好地访问所有我的端点。 - jeremy simon
1
我可以看到我的端点,但要获取详细信息,仍需要: management.security.enabled=false - Ninja Code Monkey
这不是答案,代码中的最后一行和建议的代码都会以相同的方式工作。 - sunleo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接