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", "  ");
line = line.replace(" ", "  ");
sb.append(line).append("<br>");
}
strRst = sb.toString();
System.out.println(strRst);
}
catch (Exception e) {
e.printStackTrace();
}
return strRst;
}
2.3 增量資料統計
步驟1:單日資料統計。
步驟2:增量資料統計。
步驟1,步驟2資料可以Excel統計得出。
其中單日資料的拷貝shell腳本如下:
cat 20180102-00000*.log | grep count | awk -F "count:" ' { print $2 }'
步驟3:Excel生成圖表。
3、難點
無
4、小結
通過shell腳本+Excel資料統計,簡單實作了資料增量可視化。
通過java+郵件處理+定時任務,實作了資料的定時統計以及定時郵件預警功能。可以,在此基礎上,做更多的擴充應用,比如:
1)叢集監控狀态監控;
2)叢集堆記憶體使用監控;
3)開發中其他相關實體機器記憶體、CPU、磁盤讀寫性能等名額的監控等。
更多ES相關實戰幹貨經驗分享,請掃描下方【銘毅天下】微信公衆号二維碼關注。
(每周至少更新一篇!)