脚本内容删除3个月前一天的数据,每天执行一遍减少合并压力
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob-es-index # 起名 namespace: pot # 指定名称空间 spec: schedule: "* * */1 * *" # 每天执行一次 jobTemplate: spec: template: spec: containers: - name: busybox-container image: xxx # 任意镜像,但是需支持date -d选项(coreutils) command: - "bin/bash" - "-c" - | #!/bin/bash elk_ip=elasticsearch-master # 直接用svc的名称就可以使用 del_data=$(date -d "-3 month -1 day" +"%Y-%m-%d") # 定义三个月之前的一天 remove=() # 定义数组用来存索引 remove[${#remove[*]}]=$(curl -s -XGET "http://${elk_ip}:9200/_cat/indices" | grep "tapd"| grep "log" | awk '{print $3}'| uniq) function del_index(){ # 定义函数 for index in ${remove[@]} # 循环函数内的索引 do a=$(curl -s -XGET "http://${elk_ip}:9200/${index}/_search?pretty" -H 'Content-Type: application/json' -d "{\"query\": {\"match\": {\"@timestamp\" : \"${del_data}\"}}}" | grep -A 1 "value") # 查出来搜索到的有条数的行 sum=$(echo $a | awk '{print $3}' | sed 's/,$//g') # 提取条数 if [ $sum -gt 0 ];then # 当条数等于0时则不执行 curl -s -XPOST "http://${elk_ip}:9200/${index}/_delete_by_query" -H 'Content-Type: application/json' -d "{\"query\": {\"match\": {\"@timestamp\" : \"${del_data}\"}}}" # 把指定时间内的数据打上删除标签,注意这里不会删除数据 curl -XPOST "http://${elk_ip}:9200/${index}/_forcemerge" # 合并,把打上删除标签的数据删除 fi done } del_index restartPolicy: OnFailure startingDeadlineSeconds: 10 # 执行等待时间 concurrencyPolicy: Allow # 支持并行 successfulJobsHistoryLimit: 1 # 保留历史1个