帮我写一个删除elasticsearch三十天外索引数据的shell脚本,不删除索引,只删除索引内的数据...
时间: 2024-05-07 16:22:22 浏览: 193
好的,以下是一个基本的 shell 脚本,可以删除 Elasticsearch 中三十天外的数据:
```bash
#!/bin/bash
# Elasticsearch 配置
ES_HOST="localhost"
ES_PORT="9200"
ES_USER=""
ES_PASS=""
# 删除索引数据的时间范围(以天为单位)
DAYS_AGO=30
# 获取当前时间和删除的时间范围
NOW="$(date -u +%s)"
DELETE_BEFORE="$(($NOW - ($DAYS_AGO * 86400)))"
# 获取所有索引
INDEX_LIST=$(curl -s -u "$ES_USER:$ES_PASS" "http://$ES_HOST:$ES_PORT/_cat/indices?v" | awk '{print $3}')
# 遍历每个索引
for INDEX in $INDEX_LIST; do
# 获取索引的创建时间
CREATE_TIME=$(curl -s -u "$ES_USER:$ES_PASS" "http://$ES_HOST:$ES_PORT/$INDEX" | jq -r '.settings.index.creation_date')
# 将时间转换成时间戳
CREATE_TIME=$(date -d "$CREATE_TIME" +%s)
# 如果索引创建时间早于删除时间范围,则删除索引数据
if [ "$CREATE_TIME" -lt "$DELETE_BEFORE" ]; then
echo "Deleting data in index $INDEX..."
curl -XPOST -u "$ES_USER:$ES_PASS" "http://$ES_HOST:$ES_PORT/$INDEX/_delete_by_query" -H 'Content-Type: application/json' -d '{"query": {"match_all": {}}, "conflicts": "proceed"}'
fi
done
```
你需要根据自己的 Elasticsearch 配置修改脚本中的参数。注意,这个脚本只会删除索引数据,不会删除索引本身。如果你要删除整个索引,可以使用以下命令:
```
curl -XDELETE -u "$ES_USER:$ES_PASS" "http://$ES_HOST:$ES_PORT/$INDEX"
```
阅读全文