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