傳統的Web開發中,日誌可能並不被重視,只有應用出現問題後,纔會適時性的去看一眼。並且日誌的儲存方式也很簡單,直接寫入一個文本文件或者扔到數據庫中就了事了。這樣對於單機應用來講沒有什麼不能夠的,但是當系統架構分佈式後,官網、論壇、社交、交易等各個大大小小的子系統愈來愈多,再加上操做系統、應用服務、業務邏輯等等,日誌的管理與查看就愈加的麻煩,面對大量的日誌數據並且又是分佈在各個不一樣的機器甚至不一樣的機房,若是咱們仍是按照傳統的方式登陸到某一臺機器上去查看日誌,而後再彙總起來,再作個跨機房的排序,那這樣感受就太糟糕了。因此一套集中式的實時日誌分析平臺就顯得很是重要了,而一套日誌分析平臺至少要包括一下幾個特色:docker
其實市面上的日誌分析產品不少,簡單的Rsyslog
,商業化的Splunk
,開源的Scribe
,Apache
的Flume
,Cloudera
的ELK
。這裏採用的是ELK這個體系架構,ELK(Elasticsearch, Logstash, Kibana)
通過這麼多年的發展,一直到如今的6.0.0
版本。可以發展這麼快,其中確定有他的緣由所在。簡單介紹一下這三個軟件的特色:數據庫
Web
平臺,用來查詢分析以及生成各類報表經過架構圖能夠看到,總體日誌平臺的原理其實並不難,日誌的生產者做爲Shipper
產生各類各樣的日誌,而後傳輸到Kafka
中,這裏傳輸也是從生產者中讀取而後傳輸經過 Logstash 到 Kafka, 再者Logstash
經過讀取Kafka
中的日誌數據,儲存到ElasticSearch
。只在中間再增長了Kafka
作爲緩衝層,由於Logstash
會同步把日誌傳輸到Elasticsearch
,一旦ElasticSearch
掛掉數據就有可能會丟失。因而,咱們考慮利用Kafka
做爲緩衝區。架構
這裏選擇
Kafka
的緣由是由於與大多數消息系統比較,Kafka
有更好的吞吐量,內置分區,副本和故障轉移,這有利於處理大規模的消息,由於互聯網應用日誌基本上都是海量的。分佈式
Docker
算是雲計算時代擁有劃時代意義的項目了,關於Docker
的介紹與資料很是多。特別是docker-compose
至關於給Docker
插上了翅膀。Docker
相對於傳統的虛擬化技術,Docker
應用運行於宿主內核,無需啓動完整的操做系統,能夠作到秒級、甚至毫秒級的啓動時間,大大的節約了開發、測試、部署的時間。而且確保了運行環境的一致,「這段代碼在我機器上沒問題啊」這一些的問題不再會出現。測試