定时删除elasticsearch索引
从去年搭建了日志系统后,就没有去管它了,最近发现大半年各种日志的index也蛮多的,就想着写个脚本定时清理一下,把一些太久的日志清理掉。
脚本思路:通过获取index的尾部时间与我们设定的过期时间进行对比,如果是属于过期时间那么就进行删除,并写入日志。如果不是则不进行处理。
完整的脚本:(今天准备写个,翻下笔记发现去年就已经写好了)
#!/bin/bash ###################################################### # $Name: clean_amazon_index.sh # $Version: v1.0 # $Function: clean amazon log index # $Author: djx # $Create Date: 2017-10-18 # $Description: shell ###################################################### #本文未加文件锁,需要的可以加 #脚本的日志文件路径 CLEAN_LOG="/var/log/clean_amazon_index.log" #索引前缀 INDEX_PRFIX="amazon-mysql-log" #elasticsearch 的主机ip及端口 SERVER_PORT=192.168.1.123:9200 #取出已有的索引信息 INDEXS=$(curl -s "${SERVER_PORT}/_cat/indices?v" |grep "${INDEX_PRFIX}"|awk '{print $3}') #删除多少天以前的日志,假设输入10,意味着10天前的日志都将会被删除 DELTIME=10 # seconds since 1970-01-01 00:00:00 seconds SECONDS=$(date -d "$(date +%F) -${DELTIME} days" +%s) #判断日志文件是否存在,不存在需要创建。 if [ ! -f "${CLEAN_LOG}" ] then touch "${CLEAN_LOG}" fi #删除指定日期索引 echo "----------------------------clean time is $(date +%Y-%m-%d_%H:%M:%S) ------------------------------" >>${CLEAN_LOG} for del_index in ${INDEXS} do indexDate=$( echo ${del_index} |cut -d "-" -f 4,5,6 ) #根据索引的名称的长度进行切割,不同长度的索引在这里需要进行对应的修改 indexSecond=$( date -d ${indexDate} +%s ) if [ $(( $SECONDS- $indexSecond )) -gt 0 ] then echo "${del_index}" >>${CLEAN_LOG} #取出删除索引的返回结果 delResult=`curl -s -XDELETE "${SERVER_PORT}/"${del_index}"?pretty" |sed -n '2p'` #写入日志 echo "clean time is $(date)" >>${CLEAN_LOG} echo "delResult is ${delResult}" >>${CLEAN_LOG} fi done
然后将脚本添加到定时任务定期执行即可(crontab)。
作者:理想三旬
本人承接各种项目维护和python项目开发, 如果觉得文章写得不错,或者帮助到您了,请点个赞,加个关注哦。运维学习交流群:544692191
本文版权归作者所有,欢迎转载,如果文章有写的不足的地方,或者是写得错误的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。谢谢。