在最近的上海和北美KubeCon大會上,來自於Treasure Data的Eduardo Silva(Fluentd Maintainer)帶來了最期待的關於容器日誌採集工具FluentBit的最新進展以及深刻解析的分享;咱們知道Fluentd是在2016年末正式加入CNCF,成爲CNCF項目家族的一員,其被普遍用於容器集羣中進行應用日誌的採集、處理和聚合,但今天主要是跟你們分享一下一樣來自於Treasure Data新開源的日誌採集工具——FluentBit。git
既然已經有了Fluentd,那麼爲何還要開發一個FluentBit呢?咱們知道,Fluentd是基於Ruby語言的,在一些應用日誌量較大或者單節點日誌量較大的場景下,經過Fluentd採集日誌的速率會遠落後於應用日誌的產生速率,進而致使日誌採集的延遲時間較大,這對於一些實時性要求較高的業務系統或者監控系統來講是不可接受的;另一方面,也是因爲Fluentd自身的日誌處理邏輯愈來愈複雜,所有放置在一個組件裏來完成會致使愈來愈臃腫,所以Treasure Data在基於Fluentd優秀的架構和設計理念上從新開發了一個更加輕量級、更加高性能的日誌採集工具——FluentBit,其主要採用C語言進行開發。github
從上面咱們能夠清晰地看到FluentBit自己佔用的內存資源會比Fluentd少不少,且基本沒有其餘額外的環境依賴,可是支持的插件數相較於Fluentd會少不少,須要時間來慢慢豐富。正則表達式
FluentBit 內置了一個Service Engine,其每採集到一條日誌時都會執行從Input到Output的整個Action Chain:算法
日誌數據入口,FluentBit支持多種不一樣數據來源類型的Input Plugin,不只能採集容器日誌、內核日誌、syslog、systemd日誌,還支持經過TCP監聽接收遠程客戶端的日誌,同時還可以採集系統的CPU、內存和DISK的使用率狀況以及本機Network流量日誌。後端
經過狀況下咱們的應用日誌都是非結構化的,那麼Parser主要是負責將採集到的非結構化日誌解析成結構化的日誌數據,通常爲JSON格式;FluentBit 默認已經預置了下面幾種Parser:安全
在實際的生產應用中,咱們一般須要對採集到的應用日誌記錄進行修改或者添加一些關鍵信息,這均可以Filter Plugin來完成;目前FluentBit也已預置了多種Filter插件:網絡
FluentBit 內部自己提供了Buffer機制,會將採集到的日誌數據暫存在Memory中直到該日誌數據被成功路由轉發到指定的目標存儲後端。架構
路由是FluentBit的一個核心功能,它容許咱們配置不一樣的路由規則來將同一條日誌數據記錄轉發到一個或多個不一樣的接收後端,其內部主要是基於每條日誌數據的Tag
來進行路由轉發,同時支持正則匹配方式;以下面配置則表示但願將Tag
知足正則表達式my_*
的日誌直接打印到標準輸出中:異步
[INPUT] Name cpu Tag my_cpu [INPUT] Name mem Tag my_mem [OUTPUT] Name stdout Match my_*
Output 主要是用來配置採集到的日誌數據將要被轉發到哪些日誌存儲服務中,目前已支持多種主流的存儲服務,如ElasticSearch、NATS、InfluxDB、Kafka、Splunk、File、Console等,一樣也支持將日誌數據繼續經過HTTP(S)協議將其傳輸到其餘服務接口中;另外這裏有一個比較特殊的Output就是Fluentd,可能你們會比較奇怪,其實在將來的日誌架構模型中,FluentBit主要是在採集端專職負責日誌的高性能採集,而後能夠將採集到的日誌在Fluentd中進行較複雜的聚合處理(同Filebeat和Logstash):工具
這兩次的KubeCon大會上Eduardo Silva對日誌採集工具FluentBit都進行了深度的解析分享,不只介紹了FluentBit的整個架構模型,並且還分享了將來的發展方向,從整個分享來看FluentBit會側重在日誌的高性能採集方面;而阿里雲容器服務在2017年初開源的Log-Pilot:https://github.com/AliyunContainerService/log-pilot ,其不只可以採集容器的標準輸出日誌,並且還能動態地發現採集容器內文件日誌,同時支持簡單高效的日誌聲明式配置、支持日誌路由、日誌數據打標以及多種日誌採集插件,將來咱們將進一步與社區緊密結合,整合FluentBit的高性能採集特性以及Log-Pilot的動態發現和聲明式配置優點來進一步加強容器化應用日誌的配置採集效率。