KubeCon 2018 参会记录 —— FluentBit Deep Dive
在最近的上海和北美KubeCon大會上,來自于Treasure Data的Eduardo Silva(Fluentd Maintainer)帶來了最期待的關(guān)于容器日志采集工具FluentBit的最新進展以及深入解析的分享;我們知道Fluentd是在2016年底正式加入CNCF,成為CNCF項目家族的一員,其被廣泛用于容器集群中進行應用日志的采集、處理和聚合,但今天主要是跟大家分享一下同樣來自于Treasure Data新開源的日志采集工具——FluentBit。
FluentBit vs Fluentd
既然已經(jīng)有了Fluentd,那么為什么還要開發(fā)一個FluentBit呢?我們知道,Fluentd是基于Ruby語言的,在一些應用日志量較大或者單節(jié)點日志量較大的場景下,通過Fluentd采集日志的速率會遠落后于應用日志的產(chǎn)生速率,進而導致日志采集的延遲時間較大,這對于一些實時性要求較高的業(yè)務系統(tǒng)或者監(jiān)控系統(tǒng)來說是不可接受的;另外一方面,也是由于Fluentd自身的日志處理邏輯越來越復雜,全部放置在一個組件里來完成會導致越來越臃腫,因此Treasure Data在基于Fluentd優(yōu)秀的架構(gòu)和設計理念上重新開發(fā)了一個更加輕量級、更加高性能的日志采集工具——FluentBit,其主要采用C語言進行開發(fā)。
從上面我們可以清晰地看到FluentBit本身占用的內(nèi)存資源會比Fluentd少很多,且基本沒有其他額外的環(huán)境依賴,但是支持的插件數(shù)相較于Fluentd會少很多,需要時間來慢慢豐富。
FluentBit Workflow
FluentBit 內(nèi)置了一個Service Engine,其每采集到一條日志時都會執(zhí)行從Input到Output的整個Action Chain:
- Input
日志數(shù)據(jù)入口,FluentBit支持多種不同數(shù)據(jù)來源類型的Input Plugin,不僅能采集容器日志、內(nèi)核日志、syslog、systemd日志,還支持通過TCP監(jiān)聽接收遠程客戶端的日志,同時還能夠采集系統(tǒng)的CPU、內(nèi)存和DISK的使用率情況以及本機Network流量日志。
- Parser
通過情況下我們的應用日志都是非結(jié)構(gòu)化的,那么Parser主要是負責將采集到的非結(jié)構(gòu)化日志解析成結(jié)構(gòu)化的日志數(shù)據(jù),一般為JSON格式;FluentBit 默認已經(jīng)預置了下面幾種Parser:
- Filter
在實際的生產(chǎn)應用中,我們通常需要對采集到的應用日志記錄進行修改或者添加一些關(guān)鍵信息,這都可以Filter Plugin來完成;目前FluentBit也已預置了多種Filter插件:
- Buffer
FluentBit 內(nèi)部本身提供了Buffer機制,會將采集到的日志數(shù)據(jù)暫存在Memory中直到該日志數(shù)據(jù)被成功路由轉(zhuǎn)發(fā)到指定的目標存儲后端。
- Routing
路由是FluentBit的一個核心功能,它允許我們配置不同的路由規(guī)則來將同一條日志數(shù)據(jù)記錄轉(zhuǎn)發(fā)到一個或多個不同的接收后端,其內(nèi)部主要是基于每條日志數(shù)據(jù)的Tag來進行路由轉(zhuǎn)發(fā),同時支持正則匹配方式;如下面配置則表示希望將Tag滿足正則表達式my_*的日志直接打印到標準輸出中:
[INPUT]Name cpuTag my_cpu ? [INPUT]Name memTag my_mem ? [OUTPUT]Name stdoutMatch my_*- Output
Output 主要是用來配置采集到的日志數(shù)據(jù)將要被轉(zhuǎn)發(fā)到哪些日志存儲服務中,目前已支持多種主流的存儲服務,如ElasticSearch、NATS、InfluxDB、Kafka、Splunk、File、Console等,同樣也支持將日志數(shù)據(jù)繼續(xù)通過HTTP(S)協(xié)議將其傳輸?shù)狡渌战涌谥?#xff1b;另外這里有一個比較特殊的Output就是Fluentd,可能大家會比較奇怪,其實在未來的日志架構(gòu)模型中,FluentBit主要是在采集端專職負責日志的高性能采集,然后可以將采集到的日志在Fluentd中進行較復雜的聚合處理(同F(xiàn)ilebeat和Logstash):
Other Features
- Event Driven
內(nèi)置的Service Engine采用完全異步的事件驅(qū)動模型來進行日志的采集和分發(fā)。 - Configuration
簡單靈活的、高可讀性的配置方式,FluentBit的Workflow模型可完全通過配置文件的方式清晰制定。 - Upstream Manager
采用統(tǒng)一的日志上游服務的網(wǎng)絡連接管理,包括Keepalive和IO Error處理。 - TLSv1.2 / Security
對于安全敏感的日志數(shù)據(jù),支持通過TLS加密通道進行日志傳輸。
Upcoming Features
- Filesystem buffering mode
當前FluentBit只支持Memory的buffer方式,但考慮到內(nèi)存的易失性,未來也將會支持基于Filesystem的buffer機制。 - Optional plugins as shared libraries
未來會將一些已內(nèi)置的但又不是必需的插件以共享鏈接庫的方式來進行動態(tài)加載。 - Kubernetes Filter improvements
未來會繼續(xù)深度整合Kubernetes,通過API獲取更多POD關(guān)鍵信息并自動添加到日志數(shù)據(jù)記錄中。
Summary
這兩次的KubeCon大會上Eduardo Silva對日志采集工具FluentBit都進行了深度的解析分享,不僅介紹了FluentBit的整個架構(gòu)模型,而且還分享了未來的發(fā)展方向,從整個分享來看FluentBit會側(cè)重在日志的高性能采集方面;而阿里云容器服務在2017年初開源的Log-Pilot:https://github.com/AliyunContainerService/log-pilot?,其不僅能夠采集容器的標準輸出日志,而且還能動態(tài)地發(fā)現(xiàn)采集容器內(nèi)文件日志,同時支持簡單高效的日志聲明式配置、支持日志路由、日志數(shù)據(jù)打標以及多種日志采集插件,未來我們將進一步與社區(qū)緊密結(jié)合,整合FluentBit的高性能采集特性以及Log-Pilot的動態(tài)發(fā)現(xiàn)和聲明式配置優(yōu)勢來進一步增強容器化應用日志的配置采集效率。
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的KubeCon 2018 参会记录 —— FluentBit Deep Dive的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅!阿里云发布业界首款SaaS化防火墙
- 下一篇: 阿里云HBase发布冷存储特性,助你不改