侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

定时清理 ES 索引

zze
zze
2021-04-15 / 0 评论 / 0 点赞 / 420 阅读 / 2399 字

这几天频繁看到 ES 负载、存储容量相关的报警,检查发现是 ES 中创建的索引没有清理,时间久了导致负荷太重。而我这里的 ES 只是存储了一些不重要的日志数据,故写了以下脚本通过 ES 本身的 API 来定时清理。脚本很简单,就不做说明啦。。

#!/bin/bash
#
# desc: 清理 es 中指定天数以前创建的索引
# set -e

#if [ $# !=  2 ];then
#       echo "Usage: 
#               scorll_del_es_index.sh <es_url> <save_days>
#                       es_url: es 实例地址, 例: http://127.0.0.1:9200;
#                       save_days: 保存天数, 例: 3;
#"
#       exit 1
#fi

# 要清理索引的 es 实例地址
#es_url=$1
# 保存时间(天)
#save_days=$2

echo "删除 $save_days 天以前的索引"
index_list_lines=`curl -s "$es_url/_cat/indices?h=i,creation.date.string"`

[ $? -ne 0 ] && echo "获取索引列表失败" && exit 1

week_ago_time=`date -d "$save_days days ago" "+%Y-%m-%d %H:%M:%S"`
week_ago_timestamp=`date -d "$week_ago_time" "+%s"`

delete_index(){
        echo "删除索引: $1, 创建时间: $2"
        curl -s -XDELETE $es_url/$1 > /dev/null && echo "删除成功"
}

IFS=$'\n'
for line in $index_list_lines;do
        index_name=`echo $line | awk '{print $1}'`
        # .kibana 索引不清理
        [ $index_name == ".kibana" ] && continue
        index_create_time=`echo $line | awk '{print $2}'`
        index_create_time=${index_create_time%.*}
        index_create_time=${index_create_time//T/" "}
        index_create_timestamp=`date -d "$index_create_time" "+%s"`
        if [ $index_create_timestamp -lt $week_ago_timestamp ];then
                delete_index $index_name $index_create_time
        fi
done

由于我们的 ES 只有 Kubernetes 集群内部或节点才可以访问到,而节点我又没有权限登录上去部署定时任务,所以我就把上述脚本打包到镜像去了,就利用 Kubernetes 本身的 Cronjob 资源来调度执行这个任务,资源文件内容如下:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scorll-es-index
spec:
  # 每天凌晨一点执行一次
  schedule: "0 1 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          imagePullSecrets:
          - name: longsee-registry
          containers:
          - name: scorll-es-index
            image: zze326/scorll_es_index:1.1
            env:
            - name: es_url
              value: "http://10.0.1.2:9200"
            - name: save_days
              value: "20"
            imagePullPolicy: IfNotPresent
          restartPolicy: OnFailure
0

评论区