Подтвердить что ты не робот

Spring Возврат загрузочного привода DOWN

Когда я получаю доступ к конечной точке /health из моего приложения загрузки Spring (1.2.4.RELEASE), он возвращает статус DOWN:

{
    status: "DOWN"
}

Существуют ли стартовые проекты или библиотеки, которые, как известно, перезаписывают статус? Есть ли другая причина (помимо написания пользовательской), почему она вернет DOWN?

4b9b3361

Ответ 1

В свойствах Spring установите endpoints.health.sensitive = false. Конечная точка /health затем вернет список различных индикаторов работоспособности, и вы сможете отлаживать оттуда.

Для рабочей среды вы должны включить защиту вокруг конечной точки /health.

Edit

Как указал Винсент ниже, вам также понадобится management.security.enabled = false, если конечная точка работоспособности будет защищена, что по умолчанию используется в более поздних версиях Spring Boot.

Общей проблемой, которую я видел с помощью Spring Boot из коробки, является то, что она автоматически настраивает Solr, и без дополнительной настройки конечная точка /health указывает, что Solr DOWN. Легкий способ исправить это - отключить автокорреляцию Solr в приложении Application.java с помощью этой аннотации: @SpringBootApplication(exclude={SolrAutoConfiguration.class})

Ответ 2

в моем случае мне понадобилось и эти свойства, чтобы получить более подробную информацию:

endpoints.health.sensitive: false
management.security.enabled: false

В противном случае все, что я получал, было статусом DOWN.

У меня возникла проблема с соединением RabbitMQ: мое приложение еще не использует его, но мы начали подключать какой-то код, связанный с ним. Приложение работает нормально, но мы получили статус здоровья DOWN, который был довольно озадачивающим: Spring Загрузка в журналах удивительно бесшумна, так как при запуске ошибка не отображается (мне, вероятно, придется изменить мою конфигурацию, чтобы сделать ее более подробной )

Ответ 3

Если URL-адрес работоспособности показывает "ВНИЗ" или HTTP 503 - ошибка недоступна службе, попробуйте добавить свойство ниже в application.properties

URL - http://localhost: 8080/привод/здоровье

management.endpoint.health.show-details=always

Теперь URL должен показывать больше, чем просто ВНИЗ. Если хост Solr недоступен, игнорируйте проверку Solr, используя приведенное ниже исключение:

@SpringBootApplication(exclude = { SolrAutoConfiguration.class })

Теперь здоровье должно подняться. Проверка работоспособности в основном DataSourceHealthIndicator, DiskSpaceHealthIndicator, CassandraHealthIndicator внутреннюю проверку предварительно определенной проверки работоспособности (пример - DataSourceHealthIndicator, DiskSpaceHealthIndicator, CassandraHealthIndicator и т.д.).

Если один из индикаторов работоспособности не работает, работоспособность будет ухудшаться, и вы сможете увидеть ошибку как ответ после добавления свойства, упомянутого выше, в application.properties.

Ответ 4

У меня была та же проблема с Springboot 2.1.0, где/привод/здоровье вернулся { status: "DOWN" } даже если приложение было. Добавление management.health.defaults.enabled=false в файле свойств исправлена проблема.

Ответ 7

Я добавил эти 2 свойства

endpoints.health.sensitive = false
management.security.enabled = false

Не использовать статус по-прежнему ниже application.properties, как показано ниже

server.port=8098
server.host=localhost
spring.application.name=school-service
spring.cloud.consul.host=http://dockerhost
spring.cloud.consul.port=8500
endpoints.health.sensitive=false
management.security.enabled=false
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.discovery.register=true
endpoints.restart.enabled= true
endpoints.shutdown.enabled=true

Любые просьбы?

Статус возвращается как всегда

{"status":"DOWN","diskSpace":{"status":"UP","total":241207078912,"free":63632199680,"threshold":10485760},"refreshScope":{"status":"UP"},"consul":{"status":"DOWN","services":{"consul":[],"school-service":[],"student-service":[]},"error":"java.lang.IllegalArgumentException: Value must not be null"},"hystrix":{"status":"UP"}}

Мой pom.xml находится ниже

<?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd" >   4.0.0

<groupId>com.example.howtodoinjava</groupId>
<artifactId>spring-cloud-consul-school</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-cloud-consul-school</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Camden.SR7</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>


</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Ответ 8

Я получил это исправлено с помощью кода ниже.

Написал контроллер, который принимает отображение "/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 в вышеприведенном контроллере вы можете вернуть любое другое сообщение в виде строки.

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

Надеюсь это поможет

Ответ 9

Я построил фильтр для регистрации реакции на состояние здоровья при сбое.

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() {
  }
}

Ответ 10

Если вы только что добавили конечную точку, и она не проверена, может быть, что-то из проверок по умолчанию не работает, см. ссылку link, чтобы увидеть, что проверено по умолчанию. в моем случае я забыл запустить эластичный, поэтому проверка работоспособности показала "вниз", поскольку Рашми указал, что вы можете отключить настройки по умолчанию management.health.defaults.enabled=false, но лучше найти реальную причину, почему