코알못

5분 안에 구축하는 hystrix - Turbine 본문

JAVA

5분 안에 구축하는 hystrix - Turbine

코린이s 2022. 1. 30. 23:53
728x90

일단 클러스터로 모니터링하기위해서는 2개의 애플리케이션이 필요한데 인스턴스들을 집계할 Eureka 애플리케이션과 그 Eureka 클라이언트들의 Hystrix 모니터링을 집계할 Turbine 애플리케이션이다. 유레카 애플리케이션부터 설정을 시작해보자.

eureka 클라이언트(hystrix 서버) > eureka 서버 > turbine 서버 (통합 UI)

1. eureka 서버 셋팅

# build.gradle

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:3.0.4' // eureka

# application.yml

server:
  port: 9091
eureka:
  client:
    service-url:
      defaultZone: "http://localhost:9091/eureka"
    fetch-registry: false # eureka 서버도 client 역할을 할 수 있기에 false 로 하여 비활성화 한다.
    register-with-eureka: false # eureka 서버도 client 역할을 할 수 있기에 false 로 하여 비활성화 한다.

# application

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

# 기동 (eureka 화면이 나온다!)

2. eureka client 설정 (hystrix 서버)

- springboot 버전에 맞는 라이브러리 버전 설치 해야 오류 나지 않습니다.

dependencies {
	...
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:2.2.9.RELEASE'
}
@EnableDiscoveryClient
...
public class HystrixApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }

}
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9091/eureka # eureka 서버 주소

- eureka server URL 접속(http://localhost:9091/) > 해당 app가 정상적으로 연동된것을 볼 수 있다. (app name 설정한대로 표기)

3. turbine 서버 설정

dependencies {
    ...
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-turbine:2.2.9.RELEASE' //turbine
}
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9091/eureka
turbine:
  cluster-name-expression: new String('default')
  app-config: hystrix
server:
  port: 9092
spring:
  application:
    name: TURBINE
@EnableDiscoveryClient
@EnableTurbine
@SpringBootApplication
public class TurbineApplication {

    public static void main(String[] args) {
        SpringApplication.run(TurbineApplication.class, args);
    }

}

- eureka server URL 접속(http://localhost:9091/) > turbine 도 정상적으로 연동 되었다.

 

4. hystrix dashboard(http://localhost:9000/hystrix) 접속하여 turbine 주소(http://localhost:9092/turbine.stream) 입력후 통합 모니터링을 한다

 



한개의 어플리케이션에만 적용한 상태로 하나의 어플리케이션(HYSTRIX02)을 더 추가하여 본다.

- eureka 서버 화면 (정상적으로 추가 되었다.)

추가시에는 아래와 같이 turbine 서버의 모니터링할 어플리케이션명 설정에 추가 해야 한다. (예제는 hystrix02를 추가 하였다.)

turbine:
  app-config: hystrix,hystrix02

- hystrix dashboard 확인하면 추가한 서버에서 적재된 정보도 한 화면에서 볼 수 있다.

끝 !!

:: https://github.com/works-code/hystrix

 

GitHub - works-code/hystrix: hystrix 간단 프로젝트 (with spring boot)

hystrix 간단 프로젝트 (with spring boot). Contribute to works-code/hystrix development by creating an account on GitHub.

github.com

:: https://github.com/works-code/hystrix-dashboard

 

GitHub - works-code/hystrix-dashboard: hystrix dashboard 간단 구현

hystrix dashboard 간단 구현. Contribute to works-code/hystrix-dashboard development by creating an account on GitHub.

github.com

:: https://github.com/works-code/eureka

 

GitHub - works-code/eureka: eureka

eureka. Contribute to works-code/eureka development by creating an account on GitHub.

github.com

:: https://github.com/works-code/turbine

 

GitHub - works-code/turbine: turbine

turbine. Contribute to works-code/turbine development by creating an account on GitHub.

github.com

# 참고 사항

2021-12-18 18:57:00.676 ERROR 8233 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configDataContextRefresher' defined in class path resource [org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.refresh.ConfigDataContextRefresher] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

원인 : springboot 버전과 사용하는 springcloud 라이브러리 버전이 맞지않아 생긴 이슈

해결 방안 : 맞는 버전 사용 (https://spring.io/projects/spring-cloud)

 

728x90
Comments