1. 程式人生 > >定製化刪除ES索引資料

定製化刪除ES索引資料

我們有一臺ES伺服器,設定了每天02:00執行一次清理索引資料的定時任務,但這兩天總是出現磁碟空間抖動,一線一看見超了閾值,就打電話報警,可能整晚要被叫幾次,ES作為日誌平臺的一部分,只是為了方便我們檢索日誌,不影響實際業務,這就比較煩了。

除了掛起報警,一種暴力的方法,就是再設定一些定時作業時間點,簡單是簡單,但弊端就是有可能到點兒了,空間還有,不需要刪除,但仍執行了刪除,可見的資料就少了,而且如果間隔時間設定不合理,很有可能還會超閾值。

今兒單位值班,就簡單思考一下,既然報警是有閾值的,那麼執行刪除的操作,是不是可以參考執行?

以下實現採用了shell指令碼,簡單的方式,當然你用python,甚至重一些的java,都可以實現類似的功能,實現原理相同,實現方式不同,無傷大雅。我們一步一步拆解來看,如何實現這一個功能。

如下是執行df -h回顯,

這裡我要監控的是/opt/app路徑,要做的判斷就是如果此路徑空間使用率超過90%,則執行刪除ES索引資料的操作。

首先需要獲取/opt/app的空間使用率,df -h中第四列,已經給出了使用率百分比,為了獲取這個值,可以使用awk命令,來擷取這個值。awk接收df -h的輸出,作為輸入,$4表示列印第四列(空格或者TAB隔開),


我其實只是需要/opt/app對應的資訊,df -h指定/opt/app路徑,


再進一步,我只需要百分比資料,只檢索包含/opt/app這行,


這裡是百分比,我需要數字進行閾值比較,因此需要刪除%,用了sed做值替換,即將%換為空,


現在我們得到了當前使用率,要和閾值進行比較了,其中CURRENT是當前使用率,THRESHOLD是閾值,如果CURRENT>=THRESHOLD,則執行curl -XDELETE $URL操作,進行ES索引資料的清理工作,


可以將其中的變數,設為引數,便於統一管理,還可以log一些資訊,


以上指令碼加入crontab中,定時10分鐘執行一次,就可以實現,根據磁碟空間閾值,來做索引資料刪除的操作。一個比較簡單的功能需求,涉及了awk、管道、sed這些常用的指令,用起來就可以慢慢理解了。

完整的shell指令碼可以從GitHub上來下載,

https://github.com/bisal-liu/oracle/blob/master/crontab_es_del.sh

如果您覺得此篇文章對您有幫助,歡迎關注微信公眾號:bisal的