ES在ELK系统当中起着查询和存储功能,如果不删除ES数据,长时间将会导致ES存储的数据越来越多,磁盘满了之后将无法写入新的数据。这时可以使用脚本定时删除过期数据。
以下为脚本内容:
vim es_del.sh
chmod +x es_del.sh
#!/bin/bash
#description: Clear n days ago!
##ES日志清理##
source /etc/profile
# 停服可按实际情况决定,因filebeat,metricbeat,heartbeat所加载的索引在删除后需重新加载kibana仪表盘且在服务运行时删除索引后启用加载仪表板命令会报错,故此为保障以上三个索引状态的正常,在删除索引之前先进行停服
systemctl stop filebeat metricbeat heartbeat
ES_ip=192.x.x.x
#定义删除7天以前的函数
del_log(){
check_day=`date -d '-7 days' '+%F'`
index_day=$1
#将日期转换为时间戳
checkday_timestamp=`date -d "$check_day" +%s`
indexday_timestamp=`date -d "$index_day" +%s`
#当索引的时间戳值小于当前日期7天前的时间戳时,删除此索引
if [ ${index_day_timestamp} -lt ${check_day_timestamp} ];then
#转换日期格式
format_date=`echo $1 | sed 's/-/\./g'`
echo $format_date
curl -XDELETE -u elastic:123456 http://${ES_ip}:9200/*$format_date
# -u elastic:123456为es登录账号和密码,按自己的实际环境而定
fi
}
curl -XGET -u elastic:123456 http://${ES_ip}:9200/_cat/indices?v |awk -F" " '{print $3}'|grep -vE '^\.|index'|awk -F"-" '{print $NF}'|sort|uniq|sed 's/\./-/g'|while read LINE
do
echo "#######"
del_log $LINE
done
cd /data/ELK/metricbeat/ && ./metricbeat setup
cd /data/ELK/filebeat/ && ./filebeat setup
cd /data/ELK/heartbeat && ./heartbeat setup #加载仪表板
sleep 5s
systemctl start filebeat heartbeat metricbeat
#优化日志索引
curl -u elastic:123456 -X PUT "192.128.X.X:9200/_settings" -H 'Content-Type: application/json' -d'{"number_of_replicas":0}'
# 若不考虑filebeat,metricbeat,heartbeat索引所加载的kibana仪表板,则删除停止f,h,m服务和重新启动与加载
# 若在有F,M,H三服务情况下,不停服便执行删除索引日志虽然会导致索引在加载kibana仪表板时报错,无法加载可视化仪表盘,但索引仍然重新加载,日志正常接收,此功能不受影响。
添加定时任务方便后续自动执行
crontab -e文章来源:https://www.toymoban.com/news/detail-502958.html
0 0 * * 6 es_del.sh文章来源地址https://www.toymoban.com/news/detail-502958.html
到了这里,关于ES日志索引清除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!