删除旧索引的索引生命周期策略

时间:2020-08-09 08:31:54

标签: elasticsearch elk

我已阅读以下教程:

https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index-lifecycle-management.html

在经历了好几次它的阶段之后,我仍然停留在遇到相同的错误上。 我想自动删除具有一定年龄的旧索引。

我在AWS上有几个实例,每个实例都在弹性搜索中写入自己的索引,例如: 索引名称-

filebeat-log-centralization-ds-test-2020.08.09

已映射到索引模板的

{
  "filebeat-template" : {
    "order" : 0,
    "index_patterns" : [
      "filebeat-*"
    ],
    "settings" : {
      "index" : {
        "lifecycle" : {
          "name" : "logs-deletion-policy",
          "rollover_alias" : "filebeat"
        },
        "number_of_shards" : "1",
        "number_of_replicas" : "0"
      }
    },
    "mappings" : {
      "_meta" : { },
      "_source" : { },
      "properties" : { /*** some mappings ***/
    "aliases" : { }
  }
}

ILM政策:

PUT _ilm/policy/logs-deletion-policy
{
  "policy": {
    "phases": {
      "hot": {                      
        "actions": {
          "rollover": {
            "max_size": "50GB",     
            "max_age": "1m"
          }
        }
      },
      "delete": {
        "min_age": "0d",           
        "actions": {
          "delete": {}              
        }
      }
    }
  }
}

我已经引导了过渡别名索引:

PUT filebeat-000001
{
  "aliases": {
    "filebeat": {
      "is_write_index": true
    }
  }
}

filebeat-0000N索引(我刚刚创建的过渡别名索引)正在翻转并被删除, 但是"filebeat-log-centralization-ds-test-2020.08.09"显示错误:

illegal_argument_exception: index.lifecycle.rollover_alias [filebeat] 
does not point to index [filebeat-log-centralization-ds-test-2020.08.09]

我不知道我在做什么错,并尝试重复该教程,但没有成功。 我想念什么?

编辑:

我尝试将filebeat别名添加到索引模板。

GET /filebeat-log-centralization-ds-test-2020.08.09/_alias/
{
  "filebeat-log-centralization-ds-test-2020.08.09" : {
    "aliases" : {
      "filebeat" : { }
    }
  }
}

这会导致filebeat-log-centralization-ds-test-2020.08.09索引错误

illegal_argument_exception: Rollover alias [filebeat] can point to multiple indices, found duplicated alias [[filebeat]] in index template [filebeat-template]

2 个答案:

答案 0 :(得分:1)

我无法解决此问题,但是确实使用curator解决了这个问题,因为我的主要目标是删除旧索引。

创建一个名为config.yml的文件

client:
  hosts:
    - 127.0.0.1
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False
  http_auth: username:password
  timeout: 30
  master_only: False

logging:
  loglevel: INFO
  logfile:  /var/log/curator/curator.log
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']


Curator需要一个操作文件。创建一个名为delete_indices.yml

的文件
actions:
  1:
    action: delete_indices
    description: >-
      Delete indices with age greater than 4 days(based on index name), for filebeat-*
      prefixed indices.
    options:
      ignore_empty_list: True
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: filebeat-
    - filtertype: age
      source: creation_date
      direction: older
      unit: days
      unit_count: 4

上述配置会删除所有年龄超过4天的索引

现在您可以使用以下命令运行它-

curator --config config.yml delete_indices.yml

由于我的配置需要自动删除旧索引,因此我正在使用crontab运行它。

运行

crontab -e

这将打开您的个人crontab(cron配置文件)。

添加以下代码-

* * * * * /usr/local/bin/curator --config {config.yml location} {delete_indices.yml location} >/dev/null 2>&1

答案 1 :(得分:0)

alias创建的filebeat似乎没有指向要删除的索引,该索引在异常消息中突出显示。

index.lifecycle.rollover_alias [filebeat]不指向索引 [filebeat-log-centralization-ds-test-2020.08.09]

您可以使用GET alias API进行确认,如果没有链接use update alias API,则可以将filebeat别名链接到filebeat-log-centralization-ds-test-2020.08.09