大數據日誌分析系統-介紹 二-整體架構介紹

 

2018年02月25日 08:55:26 朋好友5 閱讀數:634 標籤: 大數據日誌分析系統 更多

 

    首先說:技術爲了需求而服務,公司的需求就是進行日誌分析。

    

    公司現狀:CDN公司(可以百度一下),邊緣節點服務器會產生很多用戶請求日誌,要對日誌進行各種分析和原始日誌打包,最終分析結果進行收費、讓客戶可以獲取請求日誌各種分析結果、爲客戶進行原始日誌按域名按天按小時分割打包。

 

    先說滿足這樣的大數據實時計算需要的幾個基本組件(一定要注意版本問題,java大數據機器間通信用的是RPC 而不是restful_api,如果版本不對應很可能出現版本間的兼容問題):

1.日誌收集    -從CDN邊緣節點服務器進行日誌收集

2.日誌緩存    -收集上來的日誌存儲到一個緩存設備

3.數據計算    -對收集的日誌進行計算,域名請求數分析、地區統計等等

4.計算結果存儲    -對各種分析結果進行存儲,要方便查找

5.日誌打包結果存儲    

 

 

首先說公司剛開始的日誌系統分佈:

logstash-forward (邊緣節點日誌收集,上傳到有logstash的機器)       -》

kafka  強大的數據緩存組建          (由logstash收集日誌到kafka)    -》

elasticsearch (分佈式、可擴展、實時的搜索與數據分析引擎)  (用logstash從kafka取出數據存到es)  ->

spark(大規模數據計算引擎,從es取出原始日誌然後通過spark計算結果)    -》

elasticsearch (進行計算結果數據存儲),hadoop(原始日誌打包存儲) -》

nginx  + django服務  進行反向代理、負載均衡、地址隱藏            django進行界面展示-》

可客戶直接訪問觀看

說一下版本(zookeeper 3.4.7        kafka_2.11-0.8.2.1   logstash-2.2.2    elasticsearch-2.4.6   hadoop-2.6.4  spark-1.6.1)

       現在這樣的系統由於經常出現問題,es報紅,或者計算有問題等,這是由於剛開始一個人做完還沒完全穩定就直接撤人了,轉了幾次到了我手裏(因爲我懂java,android但是部門基本上是以python爲主)。到我手裏了是個挑戰也是一個機遇嘛,然後就開始了填坑之旅。。。。。。。。。。。。

        還有一點是這樣不能夠很好的保持數據的實時性。

 

再次說公司原技術上改進:

    簡短几句心酸路程,剛開始接手什麼也不懂:不懂spark hadoop 還有 scala(線上的spark統計用scala寫的).

    其中遇到也解決了各種問題,就舉例最主要的兩個。

    1.線上的客戶投訴獲取不到原始日誌,沒那麼多時間弄懂了再改進所以解決是 --》 寫python腳本(到了這家公司開始用與部門統一的python)---》功能是從elasticsearch獲取到某個域名原始日誌然後寫入本地文件(雖然不會寫,但是這麼多年編程scala的大概對日誌的處理邏輯還是能看懂的),本地壓縮,然後python調用hadoop本地命令行將日誌上傳到hadoop,先臨時解決了問題

    2.elasticsearch報紅、kafka堆積

    不知道怎樣解決,只能看日誌了,嘗試用elasticsearch升級到了5.5.2,發現不會出現這樣的問題。  但是又出現了新的問題:spark不能兼容這樣的es版本,  給老大反映情況(提了 我傾向的用python腳本計算這一條路和對es降級嘗試的路),聽命於領導就先對原來的elasticsearch-2.4.6進行了配置改動-但是發現還是偶爾會出現es報紅的情況。    只能用另一條路用python腳本代替spark,使用es自身的聚合功能進行計算,這樣就解決了問題。

    總結:所以最後的解決辦法是 去掉spark        先用python腳本直接聚合統計方式請求es獲取結果,這樣也滿足線上要求,就先這樣了。

 

 

logstash-forward (邊緣節點日誌收集,上傳到有logstash的機器)       -》

kafka  強大的數據緩存組建          (由logstash收集日誌到kafka)    -》

elasticsearch (分佈式、可擴展、實時的搜索與數據分析引擎)  (用logstash從kafka取出數據存到es)  ->

python腳本(調用elasticsearch的resultful_api獲取統計結果,同時打包原始日誌到本地上傳到hadoop)    -》

elasticsearch (進行計算結果數據存儲),hadoop(原始日誌打包存儲) -》

nginx  + django服務  進行反向代理、負載均衡、地址隱藏            django進行界面展示-》

客戶直接訪問觀看

說一下版本(zookeeper 3.4.7        kafka_2.11-0.8.2.1   logstash-2.2.2    elasticsearch-5.5.2      hadoop-2.6.4   python以及python elasticsearch庫)

 

最後再說一種現在的架構:

    公司在我剛開始接手的同時已經公司招聘了一個大數據人員(但不是本部門的),本部門也要有新項目有更大的數據量要計算需要跟他對接,但是等了好幾個月仍然沒有啥成果,老大忍不住了讓我去看看他的大數據代碼、提改進建議催進度(他主要用spark最終結果存到hbase,java寫的代碼),然後發現代碼寫的比較爛(因爲java基本的靜態變量 方法封裝 繼承多態等一看就是新手),業務邏輯也有點問題-跟老大反映,但是不同部門管不着也不能說啊,細節不說了,最終又開始了新架構的嘗試之旅。

 

1.filbeat 邊緣節點日誌收集,上傳到有logstash的機器(或者可以用flume)    -》

2.kafka  強大的數據緩存組建          (由logstash收集日誌到kafka)    -》

3.spark(大規模數據計算引擎,從kafka取出日誌,通過scala編寫的spark代碼把計算結果存入es)    -》

4.elasticsearch (進行計算結果數據存儲) -》 

5.nginx + django   界面展示或接口讓客戶獲取服務

 

同時並行的原始日誌打包   (剛開始日誌打包考慮到了用spark或者flume直接上傳到hadoop,但是後來發現現有機器這樣的速度趕不上實際需要,)

3.flume(自定義sink插件,filter插件 從kafka的另一個topic中獲取日誌數據,把日誌按域名,按小時打包到本地)     -》

4.python 調用hadoop命令行上傳本地打包好的日誌到hadoop ->

5.nginx + django   界面展示或接口讓客戶獲取服務

 

版本信息

apache-flume-1.6.0-bin  hadoop-2.6.4   kafka_2.11-1.0.0  spark-1.6.1-bin-hadoop2.6
elasticsearch-5.5.2     hbase         jdk1.8.0_144  logstash-6.1.1    zookeeper-3.4.5

jdk1.7.0_45(剛開始hadoop使用 後來spark要求更高就用了1.8版本) 

 

當然每個階段都需要增加監控,這裏用的是zabbix監控配合腳本監控

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章