帮我写一个删除elasticsearch三十天外索引数据的shell脚本,不删除索引,只删除索引内的数据
时间: 2023-03-03 15:00:15 浏览: 171
当然,我可以帮你编写一个删除 Elasticsearch 中三十天以前的索引数据的 Shell 脚本。
这里是一个简单的脚本,它将删除 Elasticsearch 中三十天以前的数据,而不是整个索引:
```
#!/bin/bash
# 设置要删除的日期
delete_date=$(date -d "30 days ago" +%Y.%m.%d)
# 获取 Elasticsearch 中所有索引
indices=$(curl -s -XGET 'http://localhost:9200/_cat/indices?v' | awk '{print $3}')
# 遍历每个索引并删除其数据
for index in $indices
do
# 检查索引是否以 logstash 开头,因为我们只想删除日志数据
if [[ "$index" == logstash-* ]]; then
# 检查索引的日期是否在要删除的日期之前
index_date=$(echo $index | awk -F '-' '{print $2"."$3"."$4}')
if [[ "$index_date" < "$delete_date" ]]; then
# 删除索引数据
curl -XDELETE "http://localhost:9200/$index/_query?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"range": {
"@timestamp": {
"lt": "now-30d"
}
}
}
}'
echo "Deleted data from index: $index"
fi
fi
done
echo "Done."
```
脚本将获取 Elasticsearch 中所有索引的列表,然后遍历每个索引。对于以 logstash 开头的索引,脚本将检查索引的日期是否在三十天前,并删除该索引中在该日期之前的所有数据。请注意,该脚本假定索引名称遵循 logstash-yyyy.mm.dd 的格式。
如果您使用不同的索引名称格式,请相应地修改该脚本。另外,请确保将 Elasticsearch 的 URL 替换为您的实际 URL。
阅读全文