fbpx

自動刪除 ElasticSearch 過期的 Logstash Index

elastic-search logo

ElasticSearch Logstash 循環機制

以前都用 MongoDB 儲存 Log,MongoDB 有一個 capped 功能可以自動刪除以前的資料,達到 Log 循環的功能。由於我很懶惰,凡事能夠自動化最好了,每天已經寫很多 Bug 製造工作機會了,系統管理的事就盡量自動化吧。但是最近 (其實很久了...),都開始改用 ElasticSearch 實現 Log Server,雖然 ELK 很好用但是就是少了循環的功能,只好硬幹寫了支 Script 來處理。

Script 程式已經放在 (GitHub),可以調整 KEEP_DAYS 來改變要保留 Log 的天數,如下:

#/bin/bash

KEEP_DAYS=30
ELASTICSEARCH_HOST='http://elasticsearch:9200'
DATE_THRESHOLD=`date -d "${KEEP_DAYS} days ago" +%Y/%m/%d`
TIME_THRESHOLD=`date -d "${DATE_THRESHOLD}" +%s`

INDEX_LIST=`curl -s -k ${ELASTICSEARCH_HOST}/_cat/indices?s=index | grep 'logstash' | awk '{print$3}'`

echo "DATE_THRESHOLD=${DATE_THRESHOLD}"

for INDEX_NAME in ${INDEX_LIST}
do
    INDEX_DATE=`echo "${INDEX_NAME}" | sed -e 's/\./\//g' | sed -e 's/logstash-//g'`
    INDEX_TIME=`date -d "${INDEX_DATE}" +%s`
    if [ ${TIME_THRESHOLD} -gt ${INDEX_TIME} ]; then
        echo "Remove Index: ${INDEX_NAME}"
        curl -XDELETE -k ${ELASTICSEARCH_HOST}/${INDEX_NAME}
    fi
done

有需要的請自行服用...