最近我使用elasticsearch作为日志的存储分析引擎。用来存储团队开发人员的日志。使用es的过程中,索引越来越多,没有及时删除,就导致集群某台实例oom了。
解决办法:
编写一个shell脚本,然后使用linux的crontab,每天0点执行下。
1.寻找索引的规律
我们的日志索引格式如下:

以logstach开头,以年.月.日结尾
于是,我就想到使用正则匹配,即 logstash-*-12.15.11。
2.编写shell脚本
#!/bin/bash
echo "start delete es data"
echo `date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
dateStr=`date -d -32day +%Y.%m.%d`
echo delete time is ${dateStr}
#`curl -XDELETE 'http://10.240.47.81:9200/logstash-v4_insert_log-"${dateStr}'`
echo curl -XDELETE 'http://10.240.47.81:9200/logstash-*-'${dateStr}
result=`curl -XDELETE 'http://10.240.47.81:9200/logstash-*-'${dateStr}`
sleep 3
echo delete result ${result}3.添加linux crontab
vim /etc/crontab
然后在最后加一行
0 0 * * * root sh /data/apps/es/cleanupesdata/cleanup.sh >> /data/apps/es/cleanupesdata/clean.log 4.总结
类似shell,crontab这些知识,es的知识,我们可以不是很精通,但是遇到的时候,最好能写一次。因为,我们不写,没有人能替我们写,除非这个事情有团队帮忙做。带团队不容易,一些小的细节要认真处理。解决一个坑算一个。
补充:
昨天验证了下,脚本是没问题的。为了确保最终的准确性,今天再次验证。没问题。
脚本运行日志:
start delete es data
2018-01-26 00:00:01
delete time is 2017.12.25
curl -XDELETE http://10.240.47.81:9200/logstash-*-2017.12.25
delete result {"acknowledged":true}
es数据确实删除了。这样就能保证我们的es日志集群不至于爆掉。阿弥陀佛。