ElasticSearch 定时批量删除N天前的数据

Posted geekswg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch 定时批量删除N天前的数据相关的知识,希望对你有一定的参考价值。

描述:

之前我已经完成了使用ElasticSearch、kibana、filebeat、三个工具完成分布式集群收集 分布在各个ip地址上的微服务日志,这样就可以统一的在一个服务器上查看了所有的微服务产生的日志了,避免了一个个通过工具远程linux服务器去查看日志,极大提高了日志查看分析的效率了。当时目前我只是完成收集和查看所有日志,那么时间一长我们就会遇到问题,日志一直发到elastic服务器上,日志越来越多,我就需要一个定时删除过期的日志数据的办法。

功能需求:

需要定时删除elasticSearch指定过期数据,比如只保留N天数据,超过N天前的数据,直接删除。

解决方案:

通过王能的百度搜索,找到了解决方案,这里我们就比如,定时删除30天前收集的日志文件。

步骤1、在kibana控制台完成删除N天数据的命令。

学习kibana 命令 查增删该

官方学习地址:https://www.elastic.co/guide/cn/kibana/current/console-kibana.html

igure 1. 控制台用户界面

控制台可以解析像 cURL 命令这样的语句。例如以下控制台命令

GET /_search
{
  "query": {
    "match_all": {}
  }
}

是 Elasticsearch _search API 的简单 GET 请求。下面是同样效果的 cURL 命令。

curl -XGET "http://localhost:9200/_search" -d‘
{
  "query": {
    "match_all": {}
  }
}‘

实际上,您可以复制粘贴上面的命令到控制台,它会自动转换成控制台语句。

当敲入一行命令,控制台会给出上下文相关的提示。这些提示可以帮助您探索每条 API 参数,或者用于提高输入速度。控制台会提示 APIs 、索引和字段名。技术图片

Figure 2. API 提示

一旦您在左边的面板中敲入命令,您可以点击 URL 行边上的绿色小三角提交这条请求到 Elasticsearch。注意,当您移动光标的时候,会跟随着您。我们把这个叫做动作菜单。您也可以选择写多条请求并一起提交它们。

Figure 3. 动作菜单

当请求响应后,您可以在侧面的面板中看到它:

Figure 4. 输出面板

控制台用户界面

在这个章节中会有更多关于控制台界面的详细描述。控制台章节只介绍了基础的用户界面部分

我们当然主要学习删除命令 

下面是demo代码

POST /filebeat-*/_delete_by_query
{
  "query": {
    "range": {
      "@timestamp": {
        "lt": "now-300d",
        "format": "epoch_millis"
      }
    }
  }
}

其中 "lt": "now-300d", 参数表示 删除 300天前的数据,如需指定N天前,我们只要修改 指定天数即可

下面是执行结果

技术图片

 

 

 

步骤2、将改命令转换成脚本

步骤如图:

技术图片

 

代码:

curl -XPOST "http://127.0.0.1:9200/filebeat-*/_delete_by_query" -H ‘Content-Type: application/json‘ -d‘{
"query": {
"range": {
"@timestamp": {
"lt": "now-300d",
"format": "epoch_millis"
}
}
}
}‘

将说明代码复制后:

windows下脚本

windows下制作成 dos 批处理文件:新建txt,修改文件后缀名为.bat 后将上面代码拷入后保存

注意 windows 下执行 curl命令 需要安装 环境:https://curl.haxx.se/windows/

linux下 编写脚本

linux下新建 .sh 脚本文件 

#!/bin/bash
curl -XPOST "http://127.0.0.1:9200/filebeat-*/_delete_by_query" -H ‘Content-Type: application/json‘ -d‘{
"query": {
"range": {
"@timestamp": {
"lt": "now-300d",
"format": "epoch_millis"
}
}
}
}‘

 

步骤3、将脚本做成定时任务

到此就完成了定时批量删除过期的 elastic 日志文件的功能。

总结 : 其实 elasticserch 可以比如类似 mysql 数据库,kibana 类似 可视化 操作数据库的第三方软件 如 Navicat、PL/SQL工具。

以上是关于ElasticSearch 定时批量删除N天前的数据的主要内容,如果未能解决你的问题,请参考以下文章

定时删除超过N天前的日志文件

Windows 定时删除指定路径下N天前的日志文件

shell脚本定时删除指定几天前的文件

使用Python批量删除windows下特定目录的N天前的旧文件实战:Windows下批量删除旧文件清除缓存文件解救C盘拒绝C盘爆炸

linux定时删除N天前的文件(文件夹)

Windows自动删除n天前的文件的批处理脚本