如何使用bash脚本从Elasticsearch删除索引?

时间:2019-06-27 09:42:14

标签: bash elasticsearch

我正在尝试构建一个脚本,该脚本可查看Elasticsearch中的所有索引,然后获取索引名称并从中删除日期并将其拖放到/ root目录中的文件中。之后,脚本会将文件中的日期与60天之前的日期进行比较,并清除旧索引。

我可以将日期从索引名称中删除到/ root目录中的文件中,但是当我尝试将其与60天前的日期进行比较时,则不起作用。

#!/bin/bash

#storing all the dates that currently in logstash in a file

show_logs=$(curl 'localhost:9200/_cat/indices?v'| grep filebeat |cut -d"-" -f2 $)
echo result has been stored in a file
# storing the date we want to check aginst in a variable

Date6DaysAgo=$(date +%Y.%m.%d --date='6 day ago' >/root/DateAgo.logstash)
echo date 60 days ago is stored in a file
while read p
do
if [ $(date +%s -r /root/DateAgo.logstash) -ge $(date +%s -r /root/CurrentDates)
echo this date is newer than 6 days ago
fi
done < /root/CurrentDates.logstash

我的预期结果是该脚本将能够删除超过60天的索引(日期出现在文件名中),但是由于某些原因,由于某些原因,代码的输出显示所有这些文件可以使用(出于测试目的,我用了6天)。

当前结果:

this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago
this date is newer than 6 days ago

1 个答案:

答案 0 :(得分:0)

如果您不介意,建议您使用Elastic ILM(索引生命周期管理)。 您可以在kibana管理中或使用API​​进行操作。

  1. 创建您的政策

    curl -XPUT "http://localhost:9200/_ilm/policy/your_policy" -H 'Content-Type: application/json' -d'{ "policy": { "phases": { "delete": { "min_age": "60d", "actions": { "delete": {} } } } }}'
    
  2. 将您的政策编入索引

    curl -XPUT "http://localhost:9200/filebeat*/_settings" -H 'Content-Type: application/json' -d'{ "index.lifecycle.name": "your_policy"}'
    
  3. 运行启动或停止策略

    curl -XPOST "http://localhost:9200/_ilm/start"
    

    curl -XPOST "http://localhost:9200/_ilm/stop"
    

它将策略设置为filebeat *,并且将其翻转60天后将其删除。

可能有帮助(^^)