0
点赞
收藏
分享

微信扫一扫

elasticsearch(es)定时删除7天前索引

Resin_Wu 2023-03-17 阅读 91

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/ 上面有另外一个针对大量数据的清理方法,如有需要自己上去获取,这里我暂时用不到,仅做记录。

举报

相关推荐

0 条评论