ES日志索引清除

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

0 0 * * 6 es_del.sh

猜你喜欢

转载自blog.csdn.net/qq_52497256/article/details/129156426