如果所有日志都将收集到 ES,容量增速较快,并且历史日志也不太会关注,为节省容量成本,需要定期清理 ES 的 index 历史数据。通过 crontab 定时任务来处理。
- 创建名为
auto_clear_es_index.sh的shell脚本,内容如下:
#!/bin/bash
# Maintainer: KoalaWang <koala.wangyang@qq.com>
# Usage: auto clear index of ElasticSearch to reduce disk size!
# ES的账户密码
USER='elastic'
PASS='****'
ES_URL='http://es-external-svc:9200/'
# 使用内网 ES 地址
#指定日期(3个月前),使用不同的日期格式
DATE1=`date -d "3 month ago" +%Y.%m.%d`
DATE2=`date -d "3 month ago" +%Y%m%d`
#当前日期
CURRENT_TTIME=`date +%Y.%m.%d--%T`
# 查询 Index
# curl --basic -u ${USER}:${PASS} ${ES_URL}_cat/indices?v
#删除x天前的Index,时间格式为第一种
curl --basic -u ${USER}:${PASS} -XDELETE ${ES_URL}*-${DATE1}
if [ $? -eq 0 ];then
echo "-->${CURRENT_TTIME} Clear index success.." >> /var/log/clear-es-index.log
else
echo "-->${CURRENT_TTIME} Clear index failed.." >> /var/log/clear-es-index.log
fi
#删除x天前的Index,时间格式为第二种
curl --basic -u ${USER}:${PASS} -XDELETE ${ES_URL}*-${DATE2}
if [ $? -eq 0 ];then
echo "--> ${CURRENT_TTIME} Clear index success.. <--" >> /var/log/clear-es-index.log
else
echo "--> ${CURRENT_TTIME} Clear index failed.. <--" >> /var/log/clear-es-index.log
fi
- 创建如下的定时任务,每10个小时清理一次(偶尔会出现清理失败的情况,再执行一次脚本即可,所以设定 10小时,每天最少执行 2 次)。
0 */10 * * * sh /root/crontab/auto_clear_es_index.sh