2016-10-24 13 views
2

не в состоянии интегрировать Hystrix панель с Spring загрузки АдминистраторКак сделать Spring загрузки Администратор Hystrix-Dashboard Интеграция

Вот мой ПОМ:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.example</groupId> 
<artifactId>demo</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>demo</name> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.1.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> 
</properties> 

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

    <dependency> 
     <groupId>de.codecentric</groupId> 
     <artifactId>spring-boot-admin-server</artifactId> 
     <version>1.4.3</version> 
    </dependency> 

    <dependency> 
     <groupId>de.codecentric</groupId> 
     <artifactId>spring-boot-admin-server-ui</artifactId> 
     <version>1.4.3</version> 
    </dependency> 

    <dependency> 
     <groupId>de.codecentric</groupId> 
     <artifactId>spring-boot-admin-server-ui-hystrix</artifactId> 
     <version>1.4.3</version> 
    </dependency> 

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

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


</project> 

Я следовал инструкциям, как указано в http://codecentric.github.io/spring-boot-admin/1.4.3/#_hystrix_ui_module.

Я добавил пользовательский админ-клиент Spring Spring и зависимость от hystrix в моем клиенте и использовал @EnableHystrix и поместил @HystricCommand на мои конечные точки, но я не могу видеть потоки hystrix в пользовательском интерфейсе Spring Boot Admin.

Что мне не хватает?

Может кто-нибудь, пожалуйста, сообщите мне правильные шаги, если я что-то упустил.

Добавление клиента ПОМ:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.demo.client</groupId> 
<artifactId>democlient</artifactId> 
<version>0.0.1</version> 
<packaging>jar</packaging> 

<name>democlient</name> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.1.RELEASE</version> 
    <relativePath /> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
</properties> 

<dependencies> 

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

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

    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-hystrix</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>de.codecentric</groupId> 
     <artifactId>spring-boot-admin-starter-client</artifactId> 
     <version>1.4.3</version> 
    </dependency> 

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

</dependencies> 

<build> 

    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>build-info</goal> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

</build> 

Client Код:

@SpringBootApplication 
@RestController 
@EnableHystrix 
public class DemoClient { 

public static void main(String[] Args) { 

SpringApplication.run(DemoClient.class, Args); 
} 

@RequestMapping(value = "/hello") 
@HystrixCommand 
public ResponseEntity<String> hello() { 

    return new ResponseEntity<String>("Client Test", HttpStatus.OK); 
} 
} 

администратора application.properties:

spring.boot.admin.routes.endpoints= env,metrics,trace,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,hystrix.stream,turbine.stream 

Клиент application.properties:

spring.boot.admin.url=http://localhost:8080 
spring.boot.admin.auto-registration= true 
spring.boot.admin.auto-deregistration = true 

После запуска приложения конечные точки регистрируются в журналах в Admin Server, но я получаю следующее предупреждение, и я не вижу поток hystrix в пользовательском интерфейсе администратора. администратора журналы:

INFO 15220 --- [nio-8245-exec-8] d.c.b.a.registry.ApplicationRegistry  [register:81] : New Application Application [id=8e14fbfe, name=democlient, managementUrl=http://localhost:8086, healthUrl=http://localhost:8086/health, serviceUrl=http://localhost:8086] registered 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/health/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/env/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/metrics/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/trace/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/dump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/jolokia/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/info/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/configprops/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/logfile/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/refresh/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/flyway/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/liquibase/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/heapdump/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/hystrix.stream/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
INFO 15220 --- [nio-8245-exec-1] o.s.c.n.zuul.web.ZuulHandlerMapping  [registerHandler:354] : Mapped URL path [/api/applications/8e14fbfe/turbine.stream/**] onto handler of type [class de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController] 
WARN 15220 --- [nio-8245-exec-2] o.s.c.n.z.filters.post.SendErrorFilter [run:70] : Error during filtering 

java.net.SocketTimeoutException: Read timed out 
     at java.net.SocketInputStream.socketRead0(Native Method) 
     at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
     at java.net.SocketInputStream.read(SocketInputStream.java:170) 
     at java.net.SocketInputStream.read(SocketInputStream.java:141) 
     at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) 
     at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) 
     at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282) 
     at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140) 
     at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57) 
     at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) 
     at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) 
     at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:167) 
     at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) 
     at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) 
     at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271) 
     at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) 
     at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) 
     at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) 
     at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117) 
     at de.codecentric.boot.admin.zuul.filters.route.SimpleHostRoutingFilter.forwardRequest(SimpleHostRoutingFilter.java:349) 
     at de.codecentric.boot.admin.zuul.filters.route.SimpleHostRoutingFilter.forward(SimpleHostRoutingFilter.java:311) 
     at de.codecentric.boot.admin.zuul.filters.route.SimpleHostRoutingFilter.run(SimpleHostRoutingFilter.java:186) 
     at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) 
     at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:197) 
     at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:161) 
     at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:120) 
     at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96) 
     at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116) 
     at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81) 
     at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:157) 
     at org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequestInternal(ZuulController.java:43) 
     at de.codecentric.boot.admin.zuul.OptionsDispatchingZuulController.handleRequest(OptionsDispatchingZuulController.java:52) 
     at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 

Клиентские журналы:

INFO 6764 --- [gistrationTask1] d.c.b.a.services.ApplicationRegistrator [register:82] : Application registered itself as {managementUrl=http://localhost:8086, healthUrl=http://localhost:8086/health, serviceUrl=http://localhost:8086, name=democlient, id=8e14fbfe, statusInfo={status=UNKNOWN, timestamp=1477856166713}} 
WARN 6764 --- [nio-8248-exec-4] o.s.web.servlet.PageNotFound    [handleHttpRequestMethodNotSupported:215] : Request method 'HEAD' not supported 
+0

Вы добавили конечную точку hystrix.stream к spring.boot.admin.routes.endpoints на сервере администратора, как описано в документах? – joshiste

+0

@joshiste да я добавил, но имя ключа spring.boot.admin.routes.routes весной загрузки 1.4, и я добавил все конечные точки, как в документах. Как это: - spring.boot.admin.routes.routes = env, метрики, трассировка, дамп, jolokia, информация, configprops, трассировка, лог-файл, обновление, пролет, жидкостная камера, heapdump, hystrix.stream, turbine.stream – Kiba

+0

no it's 'spring.boot.admin.routes.endpoints' – joshiste

ответ

0

иногда вы не видите direclty вкладку Hystrix на странице приложения в Спринг загрузки администратора сервера (SBAS), вы должны перейти на страницу приложения (от SBAS) и напрямую получить доступ (например, http://localhost:8080/#/applications/f78fi52c/hystrix).

я думаю, что это то, что @joshiste пытался очистить, когда он говорит: проверить, что hystrix.stream на клиенте является достижимым для сервера администратора

Позже, вы увидите вкладку Hystrix Application page in SBAS

Другое дело, прежде чем проверять вкладку Hystrix, сделать некоторые запросы на клиенте (которые реализуют Hystrix) для некоторых показателей

1

Имел ту же проблему и решался с обновлениями.

Это показывает вверх, что проблема была spring-cloud-dependencies версии (Камдентаун RT) на клиенте, который имел некоторые проблемы, показывающие /hystrix.stream (упомянутые here).

Обновление до Dalston RT решается вопрос с /hystrix.stream доступности (Sidenote - для функциональности Hystrix на симулировать, вы должны включить его в явном виде через feign.hystrix.enabled=true, потребовалось некоторое время, чтобы обнаружить). Поскольку SBA 1.5.x полагается на Dalston, я также обновил SBA до 1.5.4 на сервере.

Теперь я могу получить доступ к SBAS с динамически разрешенной панелью гильз.

Надеюсь, кто-то может воспользоваться этим ответом.