[SPRING] Hystrix 대시 보드 용 명령 메트릭 스트림에 연결할 수 없습니다.
SPRINGHystrix 대시 보드 용 명령 메트릭 스트림에 연결할 수 없습니다.
나는 스프링 클라우드 (Spring Cloud)라는 마이크로 서비스 프로젝트를 가지고 있는데, 부모로부터의 스 니펫이다 :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Eureka 서버에서 모든 서비스가 실행 중입니다.
모든 서비스가 잘 돌아갑니다. 우편 배달부와 전화를 걸면 모든 것이 잘됩니다.
나는 Hystrix 대시 보드를 처리하는 별도의 서비스를 가지고 있는데, 이는 pom의 스 니펫이다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
구성 기본 클래스 :
@SpringBootApplication
@EnableHystrixDashboard
public class DashboardApp {
public static void main(String[] args) {
SpringApplication.run(DashboardApp.class, args);
}
}
및 구성 yaml 파일 :
spring:
application:
name: Dashboard
server:
port: 8000
eureka:
client:
fetchRegistry: true
registerWithEureka: false
serviceUrl:
defaultZone: http://localhost:8761/eureka
다음 대시 보드를 찾고 있습니다.
콘솔에서 전체 스택 추적을 볼 수 있습니다. 다음은 일부 스 니펫입니다.
2018-04-12 11:28:25.089 ERROR 15762 --- [qtp295055909-16] ashboardConfiguration$ProxyStreamServlet : Error proxying request: http://localhost:8082/hystrix.stream
java.lang.RuntimeException: org.eclipse.jetty.io.EofException
at org.springframework.cloud.netflix.hystrix.dashboard.HystrixDashboardConfiguration$ProxyStreamServlet.doGet(HystrixDashboardConfiguration.java:208)
....
Caused by: org.eclipse.jetty.io.EofException: null
...
Caused by: java.io.IOException: Broken pipe
...
스프링 액추에이터로 서비스 자체에 접근 가능 :
그것의 조각에서 발췌 :
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
구성 클래스 모양 :
@EnableHystrix
@EnableEurekaClient
@SpringBootApplication
public class TableApp {
public static void main(String[] args) {
SpringApplication.run(TableApp.class, args);
}
}
이 문제를 해결하는 방법?
해결법
-
==============================
1.스프링 부트 2를 사용하는 사람들은 hystrix.stream 엔드 포인트가 /actuator/hystrix.stream으로 이동되었습니다.
스프링 부트 2를 사용하는 사람들은 hystrix.stream 엔드 포인트가 /actuator/hystrix.stream으로 이동되었습니다.
나를 위해이 URL은 작동했습니다.
http://localhost:8082/actuator/hystrix.stream
그리고 예,이 액츄에이터 끝점을 다음 속성을 통해 활성화하십시오 :
management.endpoints.web.exposure.include=hystrix.stream
물론 액추에이터 종속성을 프로젝트에 포함시켜야합니다.
-
==============================
2.Hystrix 대시 보드 자체는 여러 인스턴스를 한 번에 모니터링하는 데 사용할 수 없습니다. 당신이 필요로하는 것은 터빈 + 계기판입니다. 몇 가지 단어에서 터빈은 여러 hystrix 메트릭 스트림에 대한 집합 자입니다.
Hystrix 대시 보드 자체는 여러 인스턴스를 한 번에 모니터링하는 데 사용할 수 없습니다. 당신이 필요로하는 것은 터빈 + 계기판입니다. 몇 가지 단어에서 터빈은 여러 hystrix 메트릭 스트림에 대한 집합 자입니다.
인스턴스 구성 :
management: endpoints: web: exposure: include: hystrix.stream, info, health spring: application: name: WRITING eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka
여기서 중요한 것은 hystix.stream 액추에이터를 노출하는 것입니다. 이 끝점은 터빈에서 메트릭을 읽는 데 사용됩니다. 또한 액추에이터 스타터를 추가하는 것을 잊지 마십시오.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
당신이 모든 것을 올바르게했다면 http : // localhost : 8080 / actuator / hystrix.stream endpoint가 이용 가능해야한다.
터빈 설정은 다음과 같습니다.
server: port: 8888 spring: application: name: TURBINE eureka: client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://localhost:8761/eureka/ turbine: appConfig: WRITING,READING clusterNameExpression: new String('default')
appConfig에서 모니터링 할 서비스 이름을 지정해야합니다.
터빈 로컬 호스트 시작 후 : 8888 / turbine.stream을 사용할 수 있습니다.
이 URL을 대시 보드에 전달하고 발견 된 인스턴스의 hystrix 명령에 대해 집계 된 모든 데이터를 모니터 할 수 있습니다.
Github 프로젝트 예제.
추신. 사용한 종속성은 사용되지 않습니다. 메이븐 레포를 확인하십시오.
-
==============================
3.마지막으로 해결책을 찾았습니다.
마지막으로 해결책을 찾았습니다.
문제는 컨트롤러 API가 HystrixCommand 주석에 의해 출시되어야한다는 것이 었습니다.
설명서의 스 니펫 :
Turbine AMQP by Spring Cloud offers a different model where each application instance pushes the metrics from Hystrix commands to Turbine through a central AMQP broker.
다음과 같이 모든 Controller의 메소드에 매개 변수없이 추가했습니다.
@RestController @AllArgsConstructor public class GuestController { private DinnerService dinnerService; @HystrixCommand @PostMapping("/dinner") public Integer startDinner(@RequestBody List<Integer> menuItems) { return dinnerService.startDinner(menuItems); } @HystrixCommand @DeleteMapping("/dinner/{tableId}") public void finishDinner(@PathVariable Integer tableId) { dinnerService.finishDinner(tableId); } }
그리고 지금은 모두 매력적입니다.
이제 나는 내가 그와 아주 가깝다는 것을 이해한다.
-
==============================
4.Spring-boot-startter-parent 버전 2.0.7.RELEASE 및 spring-cloud-dependencies 버전 Finchley.SR2에 대해이 문제를 해결할 수있었습니다. 아래의 두 속성을 application.properties에 추가합니다.
Spring-boot-startter-parent 버전 2.0.7.RELEASE 및 spring-cloud-dependencies 버전 Finchley.SR2에 대해이 문제를 해결할 수있었습니다. 아래의 두 속성을 application.properties에 추가합니다.
management.endpoints.web.exposure.include=* management.endpoints.web.base-path=/
from https://stackoverflow.com/questions/49792290/unable-to-connect-to-command-metric-stream-for-hystrix-dashboard-with-spring-clo by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] WMQ 용 JMS 연결 풀 구성 (스프링) 구성 방법 (0) | 2019.05.01 |
---|---|
[SPRING] Spring 부트 외부 구성 및 xml 컨텍스트 (0) | 2019.05.01 |
[SPRING] 첫 로그인시 트랜잭션을 위해 Hibernate Session을 열 수 없음 (0) | 2019.05.01 |
[SPRING] Android Gradle APK META-INF에 복사 된 중복 파일 (0) | 2019.05.01 |
[SPRING] Java의 봄 보안 대안 (봄) (0) | 2019.05.01 |