Elasticsearch 数据删除 (delete_by_query 插件安装使用)
在许多项目中,用户提供的数据存储盘大小有限,在运行一段时间后,大小不够就需要删除历史的 Elasticsearch 数据。
我们的 UEBA7.0 版本开始使用了 Elasticsearch5.x 版本,之前版本使用了 Elasticsearch2.X 版本,这 2 个版本在使用 delete_by_query 这个插件上是有区别的。
一、Elasticsearch2.x 版本的 delete_by_query 插件安装
Elasticsearch2.x 版本默认是不带 delete_by_query 插件的,需要自己安装。因为客户环境都是内网,所有我们需要自己下载,然后把相关内容拷贝到 Elasticsearch 目录下的plugin
里面 ( 这边我提供下载地址:Elasticsearch -plugin-delete-by-query):
注意文件权限
安装完成要重启 Elasticsearch
二、Elasticsearch2.x 版本数据删除方法:
2.x 使用要注意 2 个地方,一个是_query
, 一个是DELETE
在 _query 后面一定要加上?wait_for_completion=false
参数
三、Elasticsearch5.x 版本和新版本数据删除方法:
5.x 以后的版本使用要注意 2 个地方,一个是_delete_by_query
, 一个是POST
在 _delete_by_query 后面一定要加上?wait_for_completion=false
参数
四、不管哪个版本删除, 删除后都有一个 Task 编号
这个编号一定要记录下来, 因为上面的操作都是异步删除, 如果数据量大的话,elastic 不会立即删除全部数据, 而是缓慢删除, 磁盘也不会立即释放, 它是一个缓慢释放过程, 这个就是执行过程的编号, 我们可以通过 api 来获得当前删除任务的状态
http://192.168.0.16:6200/_tasks/qaCz2SGvQGe-ZCUXR6oRKg:130231
可以看到目前这个删除任务已经完成, 一共删除 10 条记录, 删除开始时间戳也有, 持续时长也有
这个执行语句执行特别慢,在平安客户现场,删除 30 万条数据,需要等待 30-50 分钟不等。释放空间很小,有没有其他删除方式?