ES慢查询分析

489 阅读2分钟

线上问题

目前线上使用ES,经常会遇到慢查询报警,目前线上查询时间超过30s会触发慢查询报警。这些慢查询有两个特点:

  1. 查询的时间跨度比较大
  2. 存在嵌套查询

解决方案

1.ES查询优化

  • es force merge
  • 把天粒度的索引拆成小时
  • 使用filter查询,利用缓存
  • 调整查询线程数
  • 调整分片数量 分片大小对性能的影响 www.elastic.co/cn/blog/how…
      1. 创建分片慢:Elasticsearch创建分片的速度会随着集群内分片数的增加而变慢。以ES 5.5.2版本、3节点集群为例,在默认配置下,当集群分片数超过1w时,创建index的耗时一般在几十秒甚至以上。
      1. 集群易崩溃:在凌晨触发Elasticsearch自动创建Index时,由于创建速度太慢,容易导致大量写入请求堆积在内存,从而压垮集群。   
      1. 写入拒绝:分片过多的场景中,如果不能及时掌控业务变化,可能经常遇到单分片记录超限、写入拒绝等问题。

2.proxy对ES查询限制

  • 增加查询频率限制
  • 使用白名单限制查询权限,由于接口初期开放出去,现在权限很难收回,这个方案没继续
  • 对查询时间跨度限制
  • 查询超时1分钟返回查询失败

3.grafana对ES查询限制

grafana一个页面上有很多图,每个图都是一个或者多个ES查询。每次打开或者刷新页面会同时进行多个查询,如果配置了定时刷新则会定时进行很多查询。

  • 总结出内部人员包括运维,技服等常用的查询
  • 根据常用查询对grafana页面进行缩减,包括:删除无用页面,对常用页面中的不常用图进行删除或者使用下拉框收回,grafana查询改为全走proxy