【问题标题】:ElasticSearch health check failed every time when spring boot start up每次spring boot启动时ElasticSearch健康检查失败
【发布时间】:2018-07-11 05:51:48
【问题描述】:

我正在使用 Java 传输客户端库在 Spring boot 1.5.8.RELEASE 上使用 Elastic Search 5.5.0。

弹性搜索使用 docker 部署在一个容器中。它运作良好。我的 java 应用程序的查询也运行良好。

问题是几乎每次从我的本地计算机启动 Spring 启动时,Elasticsearch 健康检查都会失败,如下面的异常所示。我没有在我的应用程序中明确调用任何健康检查。

如何在每次启动时删除健康检查,或者有什么方法可以通过健康检查?

谢谢。

20180201 09:04:12.499 [restartedMain] INFO c.k.a.Application - Log info On 
20180201 09:04:12.499 [restartedMain] WARN c.k.a.Application - Log warn On 
20180201 09:04:12.499 [restartedMain] ERROR c.k.a.Application - Log error On 
20180201 09:04:15.628 [RMI TCP Connection(9)-10.10.20.187] WARN o.s.b.a.h.ElasticsearchHealthIndicator - Health check failed 
org.elasticsearch.ElasticsearchTimeoutException: java.util.concurrent.TimeoutException: Timeout waiting for task.
    at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:71)
    at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:58)
    at org.springframework.boot.actuate.health.ElasticsearchHealthIndicator.doHealthCheck(ElasticsearchHealthIndicator.java:52)
    at org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:43)
    at org.springframework.boot.actuate.health.CompositeHealthIndicator.health(CompositeHealthIndicator.java:68)
    at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:85)
    at org.springframework.boot.actuate.endpoint.HealthEndpoint.invoke(HealthEndpoint.java:35)
    at org.springframework.boot.actuate.endpoint.jmx.DataEndpointMBean.getData(DataEndpointMBean.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor178.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1252)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1246)
    at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1085)
    at org.springframework.jmx.export.SpringModelMBean.invoke(SpringModelMBean.java:90)
    at javax.management.modelmbean.RequiredModelMBean.getAttribute(RequiredModelMBean.java:1562)
    at org.springframework.jmx.export.SpringModelMBean.getAttribute(SpringModelMBean.java:109)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1445)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
    at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:639)
    at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.TimeoutException: Timeout waiting for task.
    at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.get(BaseFuture.java:232)
    at org.elasticsearch.common.util.concurrent.BaseFuture.get(BaseFuture.java:67)
    at org.elasticsearch.action.support.AdapterActionFuture.actionGet(AdapterActionFuture.java:69)
    ... 47 common frames omitted

【问题讨论】:

    标签: docker spring-boot elasticsearch


    【解决方案1】:

    您可以通过将以下行添加到您的 application.xml 文件来禁用 Elasticsearch 健康检查

    management.health.elasticsearch.enabled: false
    

    【讨论】:

      【解决方案2】:

      禁用健康指示器自动配置

      @SpringBootApplication(exclude = {        
          ElasticSearchRestHealthIndicatorAutoConfiguration.class
      })
      public class YourApplication
      

      【讨论】:

      • SpringBoot 2.2.2.RELEASE 不再包含 ElasticSearchRestHealthIndicatorAutoConfiguration。怎么处理?
      • 2.2.0.RELEASE开始我们需要使用ElasticSearchRestHealthContributorAutoConfiguration
      【解决方案3】:

      当我深入研究 sprint 启动应用程序中发生的相同问题时,我发现 elasticsearch 运行状况检查使用 org.elasticsearch.client.RestClient 但我使用的是 org.elasticsearch.client.RestHighLevelClient 并为此创建了 Bean。

      如果您想保留循环弹性搜索的运行状况检查,
      使用正确的主机和端口为RestClient 创建一个Bean。

      或在应用配置 yml/xml 中添加以下条目以删除运行状况检查本身:

      management.health.elasticsearch.enabled: false
      

      【讨论】:

        猜你喜欢
        • 2021-05-07
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2018-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多