删除 Elasticsearch 中指定日期前的数据

之前已搭建一个ELK+Filebeat 的集群,并收集了 Nginx 的日志信息。在 Elasticsearch 中索引的名字是:nginx-access-log-*,后面的*代表的是日期。

假如,需要删除7天前的数据,可以执行通过以下方法:

复制代码
curl -u elastic:******  -H'Content-Type: application/json' -d'{
  "query": {
    "range": {
      "@timestamp": {
        "lt": "now-4d",
        "format": "epoch_millis"
      }
    }
  }
}

' -XPOST "http://192.168.1.231:9200/nginx-access-log*/_delete_by_query?pretty"
复制代码

其中:

  • -u 是格式为 username:password,使用Basic Auth 进行登录。如果 Elasticsearch 没有使用x-pack进行安全认证登录,则不需要加这个参数。
  • -H 设置请求头,'Content-Type: application/json'文档类型是json格式。
  • -XPOST 是指定用 POST 方式请求
  • -d 是指定发送的 body 内容
  • body 内容解释如下:
    复制代码
    {
      "query": {
        "range": {                  // 范围
          "@timestamp": {           // 时间段
            "lt": "now-4d",         // lt是小于(<),lte是小于等于(<=),gt是大于(>),gte是大于等于(>=),now-7d是当前时间减7天
            "format": "epoch_millis"
          }
        }
      }
    }
    复制代码

    执行语句会返回一些信息:

    复制代码
    {
      "took" : 8822,
      "timed_out" : false,
      "total" : 160821,
      "deleted" : 160821,
      "batches" : 161,
      "version_conflicts" : 0,
      "noops" : 0,
      "retries" : {
        "bulk" : 0,
        "search" : 0
      },
      "throttled_millis" : 0,
      "requests_per_second" : -1.0,
      "throttled_until_millis" : 0,
      "failures" : [ ]
    }
    复制代码

    ElasticSearch 选择返回如此详细的信息是为了让执行者知晓本次删除操作的概况,从返回结果中我们可以得知总共有多少被删除的数据、实际上删除了多少、耗时多久、是否超时等。

          以上方法只会删除数据,不会删除索引文件。如果想删除索引文件,可以使用以下脚本方式进行定时删除:

         

#!/bin/bash
#es_index_delete.sh
USERNAME=elastic
PASSWORD=*****
LAST_DATA=`date -d "-7 days" "+%Y.%m.%d"`
curl -XDELETE http://${USERNAME}:${PASSWORD}@192.168.1.231:9200/nginx-access-log-${LAST_DATA}
  • -7 days 指定7天前的索引时间
  • %Y.%m.%d 指定时间的格式
  • curl -XDELETE http://ip:port/nginx-access-log-${LAST_DATA} 删除索引的命令,ip是索引集群地址,port是索引集群端口,nginx-access-log-${LAST_DATA} 表示删除以nginx-access-log-名字为开头的文件,比如 nginx-access-log-2022.05.25

      原文链接地址:https://www.seafog.cn/archives/318925258

posted @   愤怒的码农  阅读(929)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2015-10-24 centeOS6.5 RPM方式安装MySQL5.6
点击右上角即可分享
微信分享提示