ELK
多是現現在最爲流行,而且更新速度最快的開源大數據產品,由elastic
公司維護並徹底開源。java
ELK分別爲:linux
Elasticsearch
: 核心中的核心組件,基於著名的全文檢索引擎lucence
的一個分佈式版本。因爲擴展成分佈式,容量和性能獲得極大的提高,使得Elasticsearch
得以成爲目前許多大數據產品和大數據架構的核心組件。Logstash
: 一個靈活的數據傳輸和處理系統,在beats出來以前,還負責進行數據收集。Logstash
的任務,就是將各類各樣的數據,通過配置轉化規則,統一化存入Elasticsearch
。使用Ruby
開發的Logstash
在靈活性上,確實很是出色。不過性能一直是被詬病的問題。Kibana
: 展現組件,基於angularjs
。從Elasticsearch
中讀取數據並展現。具備強大並且靈活的界面配置。因爲Logstash
在數據收集上並不出色,並且做爲agent,性能並不達標。elastic
發佈了beats
系列輕量級採集組件。至此,elastic
造成了一個完整的生態鏈和技術棧,成爲大數據市場的佼佼者。本文咱們重點來談一談beats
。git
beats是一組輕量級採集程序的統稱,這些採集程序包括並不限於:angularjs
以上是elastic
官方支持的5種beats,事實上,偉大的開源力量早已創造出大大小小几十甚至上百中beats,只有你沒想到的,沒有beats作不到的。github
爲何說beats是輕量級的呢?主要是beats在數據收集層面上並不進行過於複雜的數據處理,只是將數據簡單的組織並上報給上游系統。另外一方便,因爲beats採用go語言開發,go是一種系統編程語言,具備併發友好以及部署方便的特色,可以在不依賴虛擬機的狀況下運行,包大小一般也比較小。在跨平臺上方面,beats與go語言保持一致支持linux,windows,freebsd和macos。beats的性能,明顯好於大哥Logstash
,一個設計良好的go語言程序基本能夠達到甚至超過java程序。macos
beats之因此有如此強大的開源支持,一個很大的緣由是設計良好的代碼框架。編程
libbeat
是beats的核心包,其中封裝一個輸出模塊(Publisher
),輸出模塊能夠負責將收集到的數據發送給Logstash
或者Elasticsearch
。因爲go語言設計有channel,收集數據的邏輯代碼與Publisher
都是經過channel通訊的,耦合度的最低的。所以,開發一個收集器,徹底不須要知道Publisher
的存在,程序運行的時候天然就「神奇」的把數據發往服務端了。除此以外,還封裝了配置文件處理、日誌處理、守護化等功能,方便開發者拓展beats的能力。windows
beats的官方維護能夠說很是活躍的,筆者跟蹤beats很長時間,也作過代碼貢獻,對此深有體會。因此beats有一個很是健康的生態系統。網絡
被官方收錄,但官方不負責維護的beat,稱爲Community beats,目前有幾十種,皆爲開源貢獻的。還有許多散落在社區的beat。架構