天天看點

Elasticsearch索引增量統計及定時郵件實作

0、需求

随着ELKStack在應用系統中的資料規模的急劇增長,每天千萬級别資料量(存儲大小:10000000*10k/1024/1024=95.37GB,假設單條資料10kB,實際遠大于10KB)的累積成為日常需求。

如何以相對簡單的圖形化效果展示資料的增量呢?

本文給出思路和實作。

1、問題分解

1.1 ES叢集的資料量統計

ES自帶的指令行統計舉例:

curl 'localhost:9200/_cat/indices?v'           

1.2 如何實作增量?

簡化思路:

1)每天的固定時間,如早晨0:00統計一次當天的資料量,形成日志檔案存儲如:20180228-08:00.log

2)20180228的增量為:20180229-00:00.log的資料值-20180228-00:00.log的資料量。(下一天-前一天)

1.3 如何實作統計

1)shell腳本擷取每天統計的資料量

2)Excel公式簡單計算增量

1.4 如何實作定時郵件統計

1)java + 郵件程式 + 讀取腳本實作。

2)crontab實作定時任務處理。

2、具體實作

2.1 單日資料量統計

#!/bin/sh
echo "curTime: "`date '+%Y-%m-%d %H:%M:%S'`
rm -f ./tmp.rst
curl -s -XGET '192.168.1.21:9200/_cat/indices?v&pretty' | grep "open" | grep "index_*" | sort -n -k7 | tee ./tmp.rst
echo "total:" `awk '{sum += $7};END {print sum}' ./tmp.rst`
rm -f ./tmp.rst           

傳回結果如下:

2.2 Java讀取Shell腳本

public static String getShellCont(){
String strRst = "";
try {

String shpath="/home/mail_print.sh";
Process ps = Runtime.getRuntime().exec(shpath);

ps.waitFor();

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();

Strig line;
while ((line = br.readLine()) != null) {
//特殊字元替換
line = line.replace("\t", "&nbsp&nbsp");
line = line.replace(" ", "&nbsp&nbsp");
sb.append(line).append("<br>");

}

strRst = sb.toString();
System.out.println(strRst);
}

catch (Exception e) {
e.printStackTrace();
}
return strRst;
}           

2.3 增量資料統計

步驟1:單日資料統計。

Elasticsearch索引增量統計及定時郵件實作

步驟2:增量資料統計。

Elasticsearch索引增量統計及定時郵件實作

步驟1,步驟2資料可以Excel統計得出。

其中單日資料的拷貝shell腳本如下:

cat 20180102-00000*.log | grep count | awk -F "count:" ' { print $2 }'           

步驟3:Excel生成圖表。

Elasticsearch索引增量統計及定時郵件實作

3、難點

4、小結

通過shell腳本+Excel資料統計,簡單實作了資料增量可視化。

通過java+郵件處理+定時任務,實作了資料的定時統計以及定時郵件預警功能。可以,在此基礎上,做更多的擴充應用,比如:

1)叢集監控狀态監控;

2)叢集堆記憶體使用監控;

3)開發中其他相關實體機器記憶體、CPU、磁盤讀寫性能等名額的監控等。

更多ES相關實戰幹貨經驗分享,請掃描下方【銘毅天下】微信公衆号二維碼關注。

(每周至少更新一篇!)