starter initializr actuator spring-boot

initializr - spring-boot-starter-actuator maven



Actuador de la bota de primavera (7)

Cuando accedo al punto final /health desde mi aplicación Spring Boot (1.2.4.RELEASE), está devolviendo un estado de DOWN :

{ status: "DOWN" }

¿Hay proyectos o bibliotecas de inicio que se sabe que sobrescriben el estado? ¿Hay alguna otra razón (además de escribir una personalizada) por la que se devolvería DOWN ?


Agregué estas 2 propiedades

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

Sin uso, el estado todavía está abajo las application.properties son las siguientes

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

¿Alguna pista por favor?

El estado se devuelve como abajo siempre

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

Mi pom.xml es el siguiente

<?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>


Conseguí esto arreglado usando el código de abajo.

Escribió un controlador que acepta la asignación "/ private / health" (en su lugar puede usar / 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(); } }

Debajo de la clase es opcional En lugar de devolver HealthStatusDto en el controlador anterior, puede devolver cualquier otro mensaje como una cadena.

import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Data @AllArgsConstructor @Builder public final class HealthStatusDto { private final String status; }

Agregue la siguiente configuración en application.yml

# actuator # Disable Spring security management: security: enabled: false # Disable actuators endpoints: actuator: enabled: false enabled: false

Espero que esto ayude


En mi caso, necesitaba ambas propiedades para obtener más detalles:

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

De lo contrario, todo lo que estaba obteniendo era un estado ABAJO.

Tuve un problema con la conexión RabbitMQ: mi aplicación no la está utilizando todavía, pero hemos comenzado a cablear algunos códigos relacionados con ella. La aplicación funciona bien, pero obtuvimos un estado de salud ABAJO, que fue bastante desconcertante: Spring Boot es sorprendentemente silencioso en los registros, ya que no aparece ningún error en el inicio (probablemente deba cambiar mi configuración para hacerlo más detallado)


En sus propiedades Spring, establezca endpoints.health.sensitive = false . El punto final /health luego devolverá la lista de varios indicadores de salud y puede depurar desde allí.

Para un entorno de producción, debe habilitar la seguridad alrededor del punto final /health .

Editar

Como señala Vincent a continuación, también necesitará management.security.enabled = false si el punto final de salud está protegido, lo que parece ser el predeterminado en las versiones más recientes de Spring Boot.

Un problema común que he visto con Spring Boot fuera de la caja es que configura automáticamente Solr y, sin configuración adicional, el punto final /health indica que Solr está DOWN . Una manera fácil de solucionar esto es deshabilitar la configuración automática de Solr en su Application.java con esta anotación: @SpringBootApplication(exclude={SolrAutoConfiguration.class})



Si la URL de estado muestra "ABAJO" o HTTP 503 - Error de servicio no disponible, intente agregar la propiedad a continuación en application.properties

URL - http://localhost:8080/actuator/health

management.endpoint.health.show-details=always

Ahora la url debería mostrar más que solo ABAJO. Si no se puede acceder al host de Solr, ignore la comprobación de Solr utilizando la siguiente exclusión:

@SpringBootApplication(exclude = { SolrAutoConfiguration.class })

Ahora la salud debería subir. La comprobación de estado básicamente valida la comprobación de estado predefinida internamente (Ejemplo: DataSourceHealthIndicator, DiskSpaceHealthIndicator, CassandraHealthIndicator , etc.).

Si uno de los indicadores de estado está inactivo, el estado estará inactivo y podrá ver el error como respuesta después de agregar la propiedad mencionada anteriormente a application.properties.