springboot集成ES报Elasticsearch health check failed问题解决

2,451 阅读1分钟

项目采用springboot构建,在集成es后,会偶尔出现有es健康检查失败的错误

image.png 根据网上的解决方法配置了[spring.elasticsearch.rest.uris]也无济于事

根据抛出的堆栈信息,找到了位于org.springframework.boot.actuate.elasticsearch包下面的ElasticsearchHealthIndicator类,

报错位置在如下图所示

image (1).png 此处应该是spring 调用es的http接口,获取es节点信息,判断es是否存活,结果在actionGet方法处抛出异常。

在此次打断点,重启项目,发现这里的responseTimeout参数只有100毫秒,也就是说只要网络稍微不稳定,或者es节点来不及处理,响应延迟,就会抛出异常。

那接下来就得寻找这个类的100毫秒是从哪里设置的。

在此类的构造方法打断点,重启项目。

image (2).png 在idea的断点堆栈中可以看到此处的properties

image (3).png 从此处的properties中点进去可以看到如下的类

image (4).png 问题就出现在此处,项目没有配置management.health.elasticsearch.response-timeout参数,这里默认值只有100,那问题就很好解决了,我们在配置文件中加上这个配置,management.health.elasticsearch.response-timeout=5000,这里暂定设置为5s。

重启项目发现配置生效,观察一段时间,没有发现此异常抛出,问题解决!