web 系統是典型的分佈式部署,由此對其運行情況,硬件運轉狀況監控也顯得尤其重要,這些監控數據表面上對業務運行沒有多大的用處(屬於基礎數據),但正是這些基礎數據造成了業務「流」。好比,用戶搜索愛好,瀏覽商品愛好,購買愛好、分佈,用戶成員之間的關係(在推薦系統中比較常見)。java
如今成熟的web監控系統,有logstash—開源免費,splunk—不開源,有免費的版本但數據大小有限制,如今對比下這兩個系統,我跳過這兩個系統安裝步奏。python
LogStashweb
一、定義: 時間+事件=日誌;redis
二、語言實現:windows
客戶端用ruby實現,依賴JRuby等,嵌入了elasticsearch,造成logstash-1.2.2-flatjar.jar 大約20M的包,我的而言很不喜歡這種方式,在生產環境中是不會把存儲和蒐集放到一個地方的,但官方卻加入了es且你不能修改配置。後端
三、體系架構: ruby
能夠看出這是典型的:數據源+Broker+存儲+webUI,這套體系很是靈活從數據採集到數據輸出均可以自定義,尤爲是後端的Search 使用ES,ES這個搜索引擎鼎鼎大名,我很是喜歡他查詢DSL,呵呵。架構
四、input ,output配置:elasticsearch
這是個最簡單的日誌監控了,結果輸出到es中,固然也能夠輸出到redis中,這裏的輸出位置能夠配置是個很討人喜歡的功能;其input的type是ES的存儲索引表,這個能夠自定義,其餘filter也是能夠配置的這樣能夠只收集須要的信息,很是靈活,(splunk也可自定義的,下面我再分析)(題外話,logstash在windows安裝有點麻煩,要仔細點),咱們看看官方提供的配置,以下分佈式
這裏我只截了部分圖,能夠說很是齊全,具體的能夠參考http://logstash.net/docs/1.2.2/
五、ES 存儲:
這裏存儲也是能夠配置的,我配置爲3個片,2個副本,其實日誌屬於內部使用,訪問量很小,因此能夠節約點用存儲成本,從上面能夠看出索引名是系統自動生成的好處是很明顯一天一個日誌類別,很差的是若是我想某個域下的日誌放到一塊兒,是不能自定義的。
能夠看出其日誌蒐集是一行一行讀取的,若是你在記事本寫一大塊日誌信息而存儲到ES中,可能回出現多行日誌的錯覺,這個不是很重要
六、web UI:
logstash 1.2.2版本使用了全新的webUI 大體是htm5+JS構成,這樣能夠搭建個獨立web Ui 而沒必要像以前的版本那樣」粘「在一塊兒。這個UI和splunk UI有點相似,但其功能遠沒有splunk UI豐富
七、事件預警:
logstash 能夠執行script,exec程序達到預警的做用(本人沒有使用這個功能)
八、外部接口:
ES rest風格接口很是強大,徹底能夠定製化
基於上面幾個方面的對比,logstash 這套系統,配置靈活,天生融入ES引擎,webUI 就我我的來講其體驗很差,單調繁瑣,可能之後的版本的會改進吧。若是你有時間徹底可使用其數據源服務,後端存儲使用ES,WEbUI 本身寫
Splunk
一、定義:IT數據收集,分析器 。範圍挺廣的
二、語言:C/C++,Python
三、架構:
splunk 不開源,其關鍵模塊index,我猜測可能爲luncen C++版本吧(現成的不要,難道從頭至尾寫搜索引擎?)
四、input,output 配置:
splunk配置更爲強大,提供了默認的全局配置(default),及個性化定製(local),收集的數據頗多
從配置能夠看出Index 這個關鍵配置,filter也是能夠配置的,是能夠把數據按需分別存儲的,這個比logstash 靈活,其中host是機器名,推薦手寫,不然splunk 自動收集未必是你想要的
五、服務端存儲:
增長indexes.conf配置,默認全部數據存儲到main索引中,推薦數據分開存儲,因爲其不開源,因此沒法看到內部數據存儲具體樣式,固然能夠看到存儲文件路徑的
六、web UI
幾個關鍵字段,index,host,sourcetype這幾個最好自定義處理,splunk 提供如下幾個很是有用的功能
1)、是「字段提取」,這樣達到靈活日誌切割,而logStash是沒有這個功能的,可是splunk 的字段提取是在蒐集以後執行的,若是在收集數據時就執行這個功能,那性能應該比收集完後提供高
2)、splunk 提供了job配置功能,這個相似數據存儲過程了,很是強大,如圖。(我手動執行的這個job,統計30秒內日誌中錯誤,按類別,host,因爲Job太多因此不貼圖了)
3)、splunk 提供了權限管理,這個也很棒的
4)、能夠把除日誌以外的數據手動上傳到splunk,splunk實現分析,統計
5)、splunk支持集羣搜索
6)、支持UI端索引操做
7)、五花八門的報表,這個有點花俏了—我的觀點
七、外部接口
支持REST風格的python,java,C#客戶端
八、預警功能
預警功能是我本身開發的一個子程序,很簡單,項目內部使用RX net EDA驅動和TASK協做實現,支持郵件,短信,只需配置就幾個文件就好了,報警形式大體 如:
「時段:xx,機器:xx,類別:xx,數量:xx」,項目結構以下:
九、splunk 提供的功能五花八門,經常使用的就那麼幾個
十、splunk其餘功能這裏我再也不贅訴
總結以下:
這兩個系統,架構都遵循了,數據源+格式化,過濾+分佈式存儲+web UI,其實這裏也隱含了監控系統架構的模式
1)、獨立agent或者是寄宿式agent,(咱們內存net異常監控AIC系統就是使用的寄宿式agent)
2)、直接和服務端交互或者經過broker (分佈式系統中大多使用了broker這種模式)
,在結構上logstash 更加靈活,而splunk 一手包辦,從目前來看splunk功能更強大,之後呢?期待logstash,我更喜歡開源的項目
3)、這兩個系統都缺少事件處理跟蹤了,固然這個有點超出其系統自己範圍了,而咱們內部的AIC系統是集成了net日誌蒐集,分析,事件跟蹤但缺乏通常日誌收集分析,正好兩者互補了。