线上问题
目前线上使用ES,经常会遇到慢查询报警,目前线上查询时间超过30s会触发慢查询报警。这些慢查询有两个特点:
- 查询的时间跨度比较大
- 存在嵌套查询
解决方案
1.ES查询优化
- es force merge
- 把天粒度的索引拆成小时
- 使用filter查询,利用缓存
- 调整查询线程数
- 调整分片数量 分片大小对性能的影响 www.elastic.co/cn/blog/how…
-
- 创建分片慢:Elasticsearch创建分片的速度会随着集群内分片数的增加而变慢。以ES 5.5.2版本、3节点集群为例,在默认配置下,当集群分片数超过1w时,创建index的耗时一般在几十秒甚至以上。
-
- 集群易崩溃:在凌晨触发Elasticsearch自动创建Index时,由于创建速度太慢,容易导致大量写入请求堆积在内存,从而压垮集群。
-
- 写入拒绝:分片过多的场景中,如果不能及时掌控业务变化,可能经常遇到单分片记录超限、写入拒绝等问题。
-
2.proxy对ES查询限制
- 增加查询频率限制
- 使用白名单限制查询权限,由于接口初期开放出去,现在权限很难收回,这个方案没继续
- 对查询时间跨度限制
- 查询超时1分钟返回查询失败
3.grafana对ES查询限制
grafana一个页面上有很多图,每个图都是一个或者多个ES查询。每次打开或者刷新页面会同时进行多个查询,如果配置了定时刷新则会定时进行很多查询。
- 总结出内部人员包括运维,技服等常用的查询
- 根据常用查询对grafana页面进行缩减,包括:删除无用页面,对常用页面中的不常用图进行删除或者使用下拉框收回,grafana查询改为全走proxy