# ES-自动删除7天前索引日志

* 自动获取ES所有索引，排除以 . 开头的索引
* 删除7天前的索引日志数据



```bash
#!/bin/bash

# Elasticsearch 配置
ES_HOST="http://localhost:9200"  # Elasticsearch 的主机和端口
DELETE_DAYS=7
LOG_FILE="/tmp/delete_old_indices.log"  # 日志文件路径


# 计算删除日期（7 天前的日期）
DELETE_DATE=$(date -d "7 days ago" +%Y-%m-%d)

# 列出所有索引
INDEX_LIST=$(curl -s -X GET "$ES_HOST/_cat/indices?h=index")

# 记录开始时间到日志文件
echo "Start deleting indices on $CURRENT_DATE" >> "$LOG_FILE"

# 遍历索引并删除符合条件的索引
for INDEX in $INDEX_LIST; do
  # 检查索引名称是否不以 . 开头
  if [[ "$INDEX" != .* ]]; then
    # 提取索引名称的日期部分（假设索引名称格式为 YYYY.MM.DD）
    INDEX_DATE=$(echo $INDEX | grep -oP '\d{4}\.\d{2}\.\d{2}' || echo "")

    # 将索引日期格式转换为 YYYY-MM-DD
    INDEX_DATE_CONVERTED=$(echo $INDEX_DATE | sed 's/\./-/g')

    # 判断索引日期是否早于删除日期
    if [[ -n "$INDEX_DATE_CONVERTED" && "$INDEX_DATE_CONVERTED" < "$DELETE_DATE" ]]; then
      echo "Deleting index: $INDEX"  | tee -a "$LOG_FILE"
      curl -s -X DELETE "$ES_HOST/$INDEX"
    fi
  fi
done


# 记录结束时间到日志文件
echo "Finished deleting indices on $(date +%Y-%m-%d)" >> "$LOG_FILE"
```



* crontab

<pre class="language-bash"><code class="lang-bash"><strong>0 2 * * * sh /data/script/auto-clean-es-log.sh 
</strong></code></pre>
