起因
elk同事插入大量数据,导致短时间内的请求次数过多引起ES内存超过限制,报错 429 _TOO_MANY_REQUESTS_请求过多。
一、优化 es
首先排查如下两点
- 检查硬件资源如 cpu 和内存是否已经跑满
- es 的存储空间是否跑满(特别是虚拟机)
上面两点排除之后,再用如下方案:
注意:适用于cpu和内存占用都很低,然后就报错了,或者跑一会就报错。
我喜欢用 elasticsearch-head这个工具。
PUT _all/_settings
{
"index.blocks.read_only_allow_delete": null
}
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.disk.watermark.low": "90%",
"cluster.routing.allocation.disk.watermark.high": "95%",
"cluster.routing.allocation.disk.watermark.flood_stage": "97%"
}
}
PUT */_settings?expand_wildcards=all
{
"index.blocks.read_only_allow_delete": null
}
二、优化 logstash
编辑配置文件logstash.yml,配置插入速度,如下配置根据具体情况调整
pipeline.workers: 4
pipeline.batch.size: 50