当我从Spring Boot应用程序(1.2.4.RELEASE)访问/health
端点时,它返回状态DOWN
:
{
status: "DOWN"
}
是否有任何已知的初始项目或库会覆盖状态?是否还有其他原因(除了编写自定义原因)为什么会返回DOWN
?
答案 0 :(得分:25)
在Spring属性中,设置endpoints.health.sensitive = false
。然后/health
端点将返回各种运行状况指示器的列表,您可以从那里进行调试。
对于生产环境,您应该在/health
端点周围启用安全性。
修改强>
正如Vincent在下面指出的那样,如果健康端点是安全的,那么您还需要management.security.enabled = false
,这似乎是更新版Spring Boot的默认设置。
我在Spring Boot中看到的一个常见问题是它自动配置Solr,如果没有其他配置,/health
端点表明Solr为DOWN
。解决此问题的一种简单方法是使用此批注禁用Application.java中的Solr自动配置:
@SpringBootApplication(exclude={SolrAutoConfiguration.class})
答案 1 :(得分:15)
在我的情况下,我需要两者这些属性才能获得更多详细信息:
endpoints.health.sensitive: false
management.security.enabled: false
否则,我得到的只是一个DOWN状态。
我遇到了RabbitMQ连接的问题:我的应用程序还没有使用它,但是我们已经开始连接一些与之相关的代码。该应用程序工作正常,但我们得到DOWN健康状态,这是非常令人费解的:Spring Boot在日志中出乎意料地保持沉默,因为启动时没有显示错误(我可能需要更改我的配置以使其更详细)
答案 2 :(得分:9)
如果运行状况URL显示“ DOWN”或HTTP 503-服务不可用错误,则尝试在 application.properties
中添加以下属性URL-http://localhost:8080/actuator/health
management.endpoint.health.show-details=always
现在,URL应该显示的不仅仅是DOWN。 如果无法访问Solr主机,则使用以下排除项-
忽略Solr检查@SpringBootApplication(exclude = { SolrAutoConfiguration.class })
现在身体应该好了。健康检查基本上是在内部验证预定义的健康检查(示例-DataSourceHealthIndicator, DiskSpaceHealthIndicator, CassandraHealthIndicator
等)。
如果运行状况指示器之一关闭,则运行状况将关闭,并且将上述属性添加到 application.properties。 后,您可以看到错误作为响应。 >
答案 3 :(得分:3)
你的家伙可能正在使用Consul 1.0。在使用Consul 1.0的Spring Can Consul 1.1.0中有一个已知问题。见到这一点 - https://github.com/spring-cloud/spring-cloud-consul/issues/365和此 - https://github.com/hashicorp/consul/issues/3635
你必须升级到Spring Can Consul 1.3.0.RELEASE。
答案 4 :(得分:2)
我在Springboot 2.1.0中存在相同的问题,其中/ actuator / health
{
status: "DOWN"
}
即使应用程序启动了。
新增中
management.health.defaults.enabled=false
属性文件中的问题已解决。
答案 5 :(得分:1)
根据此链接:https://github.com/indrabasak/spring-consul-example/blob/master/client/README.md,我们应严格使用以下属性以避免出现以下错误。
management.security.enabled=false
management.health.consul.enabled=false
答案 6 :(得分:1)
对于springboot 2.3.2及更高版本,只需添加
答案 7 :(得分:0)
我使用下面的代码解决了这个问题。
编写一个接受“ / private / health”映射的控制器(您可以改用/ health)。
import io.swagger.annotations.Api;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
@Api(value = "Heath Service Health", description = "Heath Service Health")
public class HeathController {
@GetMapping(value = "/private/health")
@ResponseStatus(HttpStatus.OK)
HealthStatusDto healthCheck() {
return HealthStatusDto.builder().status("UP").build();
}
}
下面的类是可选的。代替在上面的控制器中返回HealthStatusDto,您可以将任何其他消息作为String返回。
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@Data
@AllArgsConstructor
@Builder
public final class HealthStatusDto {
private final String status;
}
在application.yml中的配置下面添加
# actuator
# Disable Spring security
management:
security:
enabled: false
# Disable actuators
endpoints:
actuator:
enabled: false
enabled: false
希望这会有所帮助
答案 8 :(得分:0)
我构建了一个过滤器,以记录运行状况响应失败时的运行状况。
package br.gov.go.sspj.k9.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
public class BadHealthCheckLogFilter implements Filter {
private @Autowired HealthMvcEndpoint hme;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (req.getRequestURI().endsWith("/health") && res.getStatus() != 200)
log.error(hme.invoke(req, null).toString());
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
答案 9 :(得分:0)
如果您刚刚添加了端点并且它已关闭检查,则默认检查可能已关闭,请参见link以查看默认检查的内容。就我而言,我忘记运行弹性,因此运行状况检查报告为“下降”,正如Rashmi指出的那样,您可以通过management.health.defaults.enabled=false
禁用默认值,但是最好查找
答案 10 :(得分:0)
management.endpoint.health.show-details =,它总是有助于调试Health处于DOWN的原因,这有助于我解决问题。
答案 11 :(得分:0)
将应用程序从Spring Boot 1.5升级到2.3.5.RELEASE时,我遇到了同样的问题。
添加endpoints.health.sensitive
和其他application.properties
答案中提到的其他属性对我来说不起作用。
我通过排除RabbitAutoConfiguration
解决了该问题。
@EnableAutoConfiguration(exclude = { RabbitAutoConfiguration.class })
答案 12 :(得分:0)
就我而言,Spring (v2.1.5.RELEASE)
endpoints.actuator.enabled=true management.health.defaults.enabled=false
添加上述属性解决了我的问题。
给予状态“UP”