복붙노트

[SPRING] 스프링 웹 애플리케이션 상태 점검

SPRING

스프링 웹 애플리케이션 상태 점검

Amazon의 Beanstalk 플랫폼에 Spring 기반의 웹 애플리케이션을 배치하고 있으며, 애플리케이션에 대한 "healthcheck"URL 경로를 설정하는 옵션을 제공합니다.

아이디어는 배포 후에 응용 프로그램이 성공적으로 시작되었는지 확인하기 위해 해당 플랫폼이 해당 URL에 대한 요청을 수행한다는 것입니다. 요청이 HTTP 200이되면 응용 프로그램이 정상적으로 작동합니다. 그러나 HTTP 500 또는 그 밖의 다른 것이 발생하면 플랫폼은 애플리케이션에 문제가 있음을 알고 있습니다.

그래서 스프링 애플리케이션 컨텍스트가 성공적으로 초기화되었는지 아닌지를 체크하는 일종의 서블릿을 개발하여 플랫폼에 적절한 HTTP 응답 코드를 제공 할 수 있기를 바란다.

아무도 이런 식으로 시도한 적이 있습니까? 비슷한 목적으로?

나는 Spring이 이미 이것에 대한 우아한 해결책을 제공하는지 궁금해.

해결법

  1. ==============================

    1.Metrics의 상태 확인 기능을 사용하는 것이 좋습니다. HealthCheck 클래스를 확장하고 check () 메소드를 구현하는 여러 클래스를 설정할 수 있습니다. 이러한 상태 확인 구현은 스프링 관리 bean 자체 일 것이며 Spring bean을 autowire하고 유효성 검증 할 수 있습니다. 그런 다음 HealthCheckServlet을 구성하여 응용 프로그램 상태를 모니터링합니다. 또한 metrics-spring 프로젝트를 확인하십시오. Spring과 Metrics 통합이 더 간단해질 것입니다.

    Metrics의 상태 확인 기능을 사용하는 것이 좋습니다. HealthCheck 클래스를 확장하고 check () 메소드를 구현하는 여러 클래스를 설정할 수 있습니다. 이러한 상태 확인 구현은 스프링 관리 bean 자체 일 것이며 Spring bean을 autowire하고 유효성 검증 할 수 있습니다. 그런 다음 HealthCheckServlet을 구성하여 응용 프로그램 상태를 모니터링합니다. 또한 metrics-spring 프로젝트를 확인하십시오. Spring과 Metrics 통합이 더 간단해질 것입니다.

    Java Spring 구성을 사용하는 경우 metrics-spring에서 MetricsConfigurerAdapter를 확장하는 이와 같은 Metrics 구성을 가질 수 있습니다.

    @Configuration
    @EnableMetrics
    public class MetricsConfig extends MetricsConfigurerAdapter { }
    

    그런 다음 @Import (value = {MetricsConfig.class})를 Spring 구성에 가져옵니다.

    또한 HealthCheckServlet과 Spring을 연결하기 위해 ServletContextListener가 필요하고 구현되어야합니다. 이 HealthCheckContextListener는 web.xml에 추가되어야합니다.

    public class HealthCheckContextListener extends
        HealthCheckServlet.ContextListener implements ServletContextListener {
    
        private WebApplicationContext context;
    
        public HealthCheckContextListener(WebApplicationContext context) {
            this.context = context;
        }
    
        public HealthCheckContextListener() {}
    
        @Override
        public void contextInitialized(ServletContextEvent event) {
            this.context = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext()); 
            event.getServletContext().setAttribute(HealthCheckServlet.HEALTH_CHECK_REGISTRY,
                context.getBean(HealthCheckRegistry.class));
        }
    
        @Override
        protected HealthCheckRegistry getHealthCheckRegistry() {
            return (HealthCheckRegistry) context.getBean(HealthCheckRegistry.class);
        }
    }
    
  2. ==============================

    2.건강한 앱을 구성하는 요소 (예 : 서블릿 계층, JMS 대기열, FTP 서버 등)를 검토하고 상태 확인을 통해 해당 서비스의 가용성을 확인해야합니다. 분명히 건강 검진은 자주 실행 될 것이므로 반복해서 값 비싼 작업을 시작하고 싶지는 않습니다.

    건강한 앱을 구성하는 요소 (예 : 서블릿 계층, JMS 대기열, FTP 서버 등)를 검토하고 상태 확인을 통해 해당 서비스의 가용성을 확인해야합니다. 분명히 건강 검진은 자주 실행 될 것이므로 반복해서 값 비싼 작업을 시작하고 싶지는 않습니다.

    스프링 부트는 컨피규레이션 대신 컨벤션을 선호함으로써 스프링 개발을 간소화하는 것을 목표로하는 새로운 프로젝트입니다. 그들은 액추에이터 추가 기능 모듈을 통해 프로젝트에 추가 할 수있는 "상태 확인"기능을 구현했습니다.

    다음은 상태 확인 구현에 대한 참조입니다. 컨트롤러 클래스를 사용하여 "ok"를 반환하고 데이터 소스가있는 경우 쿼리를 실행하여 데이터베이스에 액세스 할 수 있는지 확인하려고합니다 ( "SELECT .. from dual "오라클 구문).

  3. ==============================

    3.가장 간단한 방법은 다음과 같습니다.

    가장 간단한 방법은 다음과 같습니다.

    @Controller
    class HealthCheckController {
    
        @ResponseStatus(OK)
        @RequestMapping(value = "/ping", method = HEAD) {
        public void ping() {
        }
    }
    

    특정 콩, 데이터 소스 등을 테스트 할 수 있도록 확장 가능

  4. from https://stackoverflow.com/questions/21439101/spring-web-application-healthchecks by cc-by-sa and MIT license