es作为日志分析工具,采集nginx访问日志,项目log日志,心跳检测日志,服务器度量日志等,每天产生大量索引(Index),占用磁盘空间。对于过期数据不一定有用,需要进行删除来释放磁盘空间。
官网有_delete_by_query这个api进行删除,链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html
curl -u 用户名:密码 -H'Content-Type:application/json' -d'{
"query": {
"range": {
"@timestamp": {
"lt": "now-7d",
"format": "epoch_millis"
}
}
}
}
' -XPOST "http://127.0.0.1:9200/*-*/_delete_by_query?pretty"
-u是格式为userName:password,使用Basic Auth进行登录。如果elasticsearch没有使用类似x-pack进行安全登录,则不需要加-u参数
-H是指定文档类型是json格式
-XPOST是指定用POST方式请求
-d是指定body内容 *-*应该是指定了所有索引名称,可以专门指定一个例如 filebeat-1,或者是filebeat开头的如filebeat-*。
{
"query": {
"range": { //范围
"@timestamp": {//时间字段
"lt": "now-7d",//lt是小于(<),lte是小于等于(<=),gt是大于(>),gte是大于等于(>=),now-7d是当前时间减7天
"format": "epoch_millis"//不清楚,但是这个参数所有文章都带了,建议带上
}
}
}
}
可以使用linux自带的定时器执行每天删除 $ crontab -e
- 0 * * * /usr/bin/curl -u username:password -H'Content-Type:application/json' -d'{"query":{"range":{"@timestamp":{"lt":"now-7d","format":"epoch_millis"}}}}' -XPOST "http://127.0.0.1:9200/-/_delete_by_query?pretty" > /tmp/clean.txt
也可以使用自己的定时执行平台。
转载来自:https://anjia0532.github.io/2017/04/06/elasticsearch-delete-indices-by-date/ 上面有另外一个针对大量数据的清理方法,如有需要自己上去获取,这里我暂时用不到,仅做记录。