Elastic Search运行一段时间后返回null问题求助
自托管Elasticsearch集群Go客户端请求返回null的问题排查与解决需求
我搭建了自托管Elasticsearch集群,使用Go客户端向其发送请求。运行一段时间后,Elasticsearch开始返回null响应。
调试后我推测可能是连接不安全,于是修改Go客户端,确保每次API请求都与Elasticsearch建立安全连接,客户端代码如下:
func getResponseFromElastic(payload string) Response { tr := &http.Transport{ TLSClientConfig: getTLSConfig(ConfigStruct.ElasticStruct.CaCert), Proxy: nil, } data := strings.NewReader(payload) client := &http.Client{Transport: tr} elasticUrl := ConfigStruct.ElasticStruct.ElasticUrl elasticIndex := ConfigStruct.ElasticStruct.Index httpUrl := elasticUrl + elasticIndex + "/_search" req, err := http.NewRequest("GET", httpUrl, data) var response Response = Response{} if err != nil { ErrorLogger.Println(err) return response } req.Header.Set("Content-Type", "application/json") req.SetBasicAuth(ConfigStruct.ElasticStruct.ElasticUsername, ConfigStruct.ElasticStruct.ElasticPassword) resp, err := client.Do(req) if err != nil { ErrorLogger.Println(err) return response } defer func() { err := resp.Body.Close() if err != nil { ErrorLogger.Println(err) } }() bodyText, err := io.ReadAll(resp.Body) if err != nil { ErrorLogger.Println(err) return response } }
getTLSConfig函数代码如下:
func getTLSConfig(caCertFile string) *tls.Config { var caCert []byte var err error var caCertPool *x509.CertPool caCert, err = ioutil.ReadFile(caCertFile) if err != nil { ErrorLogger.Fatal("Error opening cert file", caCertFile, ", error ", err) } caCertPool = x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) return &tls.Config{ InsecureSkipVerify: false, RootCAs: caCertPool, } }
我的ConfigStruct.ElasticStruct.ElasticUrl配置为:
"https://self-hostedes001:9200/",
已尝试的解决措施:
- 增大Elasticsearch节点的JVM堆大小,避免因内存占用过高阻塞请求;
- 在API请求中添加CA证书,确保ES可识别合法用户;
- 临时解决方案:重启ES集群后恢复正常,但一段时间后又会返回null。
现寻求该问题的根本解决方法。
内容的提问来源于stack exchange,提问作者Tarun Datwani
相关产品推荐
相关产品推荐

