我正在尝试构建一个脚本,该脚本可查看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
答案 0 :(得分:0)
如果您不介意,建议您使用Elastic ILM(索引生命周期管理)。 您可以在kibana管理中或使用API进行操作。
创建您的政策
curl -XPUT "http://localhost:9200/_ilm/policy/your_policy" -H 'Content-Type: application/json' -d'{ "policy": { "phases": { "delete": { "min_age": "60d", "actions": { "delete": {} } } } }}'
将您的政策编入索引
curl -XPUT "http://localhost:9200/filebeat*/_settings" -H 'Content-Type: application/json' -d'{ "index.lifecycle.name": "your_policy"}'
运行启动或停止策略
curl -XPOST "http://localhost:9200/_ilm/start"
或
curl -XPOST "http://localhost:9200/_ilm/stop"
它将策略设置为filebeat *,并且将其翻转60天后将其删除。
可能有帮助(^^)