如何跟踪缓慢的Elasticsearch查询?

时间:2019-02-24 22:20:22

标签: elasticsearch elastic-cloud

我需要一些有关如何诊断Elasticseach慢查询的建议。

设置

  • ElasticCloud中的1个节点集群(1个主分片,0个副本)。注意:ElasticCloud =没有慢日志。 (也是,我知道我应该有更多的节点..但这只是DEV)
  • 使用NEST库通过我的Azure .NET Web App与群集进行交互

行为

  • 我的网络服务器的大多数响应时间是50-80毫秒
  • ES中
  • 所有查询时间(例如用时)<5ms。
  • 我的Web服务器与ElasticCloud之间的网络延迟约为15毫秒

问题 -有时,响应时间会在100-200毫秒之间跳跃,但是所需的时间仍然是1毫秒。我也能够在本地复制此行为(使用ElasticSearch泊坞窗)。

这是我捕获的Fiddler的踪迹,这是我的应用程序对Elasticsearch的调用:

ClientConnected:            17:28:44.325 
ClientBeginRequest:    17:34:34.953 
GotRequestHeaders:    17:34:34.953 
ClientDoneRequest:    17:34:34.953 
Determine Gateway:    0ms 
DNS Lookup:         0ms 
TCP/IP Connect:            0ms 
HTTPS Handshake:    0ms 
ServerConnected:       17:34:27.538 
FiddlerBeginRequest:    17:34:34.953 
ServerGotRequest:    17:34:34.953 
ServerBeginResponse:    17:34:35.171 
GotResponseHeaders:  17:34:35.171 
ServerDoneResponse:    17:34:35.172 
ClientBeginResponse:  17:34:35.172 
ClientDoneResponse:    17:34:35.178

因此,上面说的是Elasticsearch集群花了218ms来处理请求。但是花费的时间是1毫秒。

我如何跟踪这个缓慢的请求?显然,这不是查询速度(因为使用率较低),因此它一定是集群中的某个东西。

有什么建议吗?

编辑

这是来自Kibana的一些数据,在15分钟的负载测试中,我做了: enter image description here

所以..根据我的愚蠢分析,那里看上去还不错。

  • 搜索延迟/延迟快速(<5毫秒)
  • JVM堆似乎很好
  • CPU正常
  • 没有过多的GC

这是我从负载测试工具中看到的内容: enter image description here

以下是我的性能监控工具中的统计信息。您可以清楚地看到峰值和缓慢的异常值: enter image description here

不确定从这里还能去哪里?我应该寻找其他指标吗?

1 个答案:

答案 0 :(得分:-1)

只是要弄清楚took(从Elastic Discuss复制而来)中没有的内容:

  • 在客户端上将请求序列化为JSON
  • 通过网络发送请求
  • 在服务器上反序列化来自JSON的请求
  • 在服务器上将响应序列化为JSON
  • 通过网络发送响应
  • 反序列化客户端上JSON的响应

由于took太低,因此查询或响应本身可能没什么问题。此外,您从Elasticsearch发布的所有统计数据看起来都很不错。我想知道这可能是网络还是序列化中的某个东西?

PS:我认为这不是真的,您只需要通过API而不是配置文件来启用它。但是由于您的took太低,因此您在这里找不到任何相关内容。

  

注意:ElasticCloud =没有慢日志