背景介绍: 公司使用Kibana对ES集群的索引数据进行可视化的业务分析,在使用的过程中,随着ES索引量的不断扩大,在Kibana页面进行可视化查询或聚合查询等操作时,耗时不断增加而引发出一系列的页面请求超时及未知异常的问题,故全面记录问题解决方式,避免再次踩坑!
本博客中使用的ES及Kibana版本皆为7.2.0,实际操作索引的文档数量超过6亿并不断增加,在kibana页面进行可视化操作时随着时间范围的不断扩大,请求时间不断增加,最大的请求时间超过5 min;
问题描述: 1. Kibana 页面出现请求超时 30000ms 的问题;
2. Kibana页面加载超过 120s 出现Unkonwn Error 的问题;
原因分析及解决方案:
# 问题1. 原因分析:
Kibana 配置中默认的 elasticsearch.requestTimeout 的时间为 30000 ms,也就是说等待ES响应的最大 时间为30s,超时会有异常抛出;
解决方案:
根据使用场景,配置 elasticsearch.requestTimeout 的时间为一个合适的值;
# 问题2. 原因分析:
Kibana在120s 内无法获取到ES的响应会出现Unknown Error。ES默认的timeout设置为false,故定位该 问题一定和kibana相关,而Kibana中已经将requestTimeout设置到比120s更大的值依然不起作用,经过 查阅文档及github(问题参考),发现该超时异常是和Kibana运行基于的node.js超时相关;默认的配置 socket的超时时间 server.socketTimeout / server.keepaliveTimeout为120000 ms;
问题延伸:
Kibana当前的版本7.2.0中是不可以直接设置上述提供的两个参数,会出现报错:
ValidationError: child "server" fails because ["socketTimeout" is not allowed
经查看js文件发现该版本中不支持上述参数(实际版本修改参考),故需要升级;
解决方案:
升级Kibana及ES的7.2.0版本到7.4.0,并根据需要合理设置各项超时参数;(解决方式参考)
如有任何问题,欢迎指正讨论,谢谢!