KubeCon 2018 參會記錄 —— FluentBit Deep Dive

在最近的上海和北美KubeCon大會上,來自於Treasure Data的Eduardo Silva(Fluentd Maintainer)帶來了最期待的關於容器日誌採集工具FluentBit的最新進展以及深刻解析的分享;咱們知道Fluentd是在2016年末正式加入CNCF,成爲CNCF項目家族的一員,其被普遍用於容器集羣中進行應用日誌的採集、處理和聚合,但今天主要是跟你們分享一下一樣來自於Treasure Data新開源的日誌採集工具——FluentBit。git

FluentBit vs Fluentd

既然已經有了Fluentd,那麼爲何還要開發一個FluentBit呢?咱們知道,Fluentd是基於Ruby語言的,在一些應用日誌量較大或者單節點日誌量較大的場景下,經過Fluentd採集日誌的速率會遠落後於應用日誌的產生速率,進而致使日誌採集的延遲時間較大,這對於一些實時性要求較高的業務系統或者監控系統來講是不可接受的;另一方面,也是因爲Fluentd自身的日誌處理邏輯愈來愈複雜,所有放置在一個組件裏來完成會致使愈來愈臃腫,所以Treasure Data在基於Fluentd優秀的架構和設計理念上從新開發了一個更加輕量級、更加高性能的日誌採集工具——FluentBit,其主要採用C語言進行開發。github

從上面咱們能夠清晰地看到FluentBit自己佔用的內存資源會比Fluentd少不少,且基本沒有其餘額外的環境依賴,可是支持的插件數相較於Fluentd會少不少,須要時間來慢慢豐富。正則表達式

FluentBit Workflow

FluentBit 內置了一個Service Engine,其每採集到一條日誌時都會執行從Input到Output的整個Action Chain:算法

- Input

日誌數據入口,FluentBit支持多種不一樣數據來源類型的Input Plugin,不只能採集容器日誌、內核日誌、syslog、systemd日誌,還支持經過TCP監聽接收遠程客戶端的日誌,同時還可以採集系統的CPU、內存和DISK的使用率狀況以及本機Network流量日誌。後端

- Parser

經過狀況下咱們的應用日誌都是非結構化的,那麼Parser主要是負責將採集到的非結構化日誌解析成結構化的日誌數據,通常爲JSON格式;FluentBit 默認已經預置了下面幾種Parser:安全

  1. JSON:按照JSON格式來進行日誌數據解析;
  2. Regex:依據配置的正則表達式來進行日誌數據解析;
  3. Apache:遵循Apache日誌格式來進行解析;
  4. Nginx:遵循Nginx日誌格式來進行解析;
  5. Docker:遵循Docker標準輸出日誌格式進行解析;
  6. Syslog rfc5424:按照syslog rfc5424規範格式進行日誌解析;
  7. Syslog rfc3164:按照syslog rfc3164規範格式進行日誌解析;

- Filter

在實際的生產應用中,咱們一般須要對採集到的應用日誌記錄進行修改或者添加一些關鍵信息,這均可以Filter Plugin來完成;目前FluentBit也已預置了多種Filter插件:網絡

  1. Grep:容許匹配或者過濾掉符合特定正則表達式的日誌記錄;
  2. Record Modifier:容許對日誌數據進行修改或者添加新的KV數據,經過此能夠方便咱們對日誌數據進行打標;
  3. Throttle:支持採用漏桶和滑動窗口算法進行日誌採集速率控制;
  4. Kubernetes:自動提取容器或者POD相關信息並添加到日誌數據中;
  5. Modify:基於設置的規則來對日誌數據進行修改;
  6. Standard Output:容許將日誌數據直接打印到標準輸出;
  7. Lua:支持經過嵌入Lua Script來修改添加日誌數據;

- Buffer

FluentBit 內部自己提供了Buffer機制,會將採集到的日誌數據暫存在Memory中直到該日誌數據被成功路由轉發到指定的目標存儲後端。架構

- Routing

路由是FluentBit的一個核心功能,它容許咱們配置不一樣的路由規則來將同一條日誌數據記錄轉發到一個或多個不一樣的接收後端,其內部主要是基於每條日誌數據的Tag來進行路由轉發,同時支持正則匹配方式;以下面配置則表示但願將Tag知足正則表達式my_*的日誌直接打印到標準輸出中:異步

[INPUT]
    Name cpu
    Tag  my_cpu
​
[INPUT]
    Name mem
    Tag  my_mem
​
[OUTPUT]
    Name   stdout
    Match  my_*

- Output

Output 主要是用來配置採集到的日誌數據將要被轉發到哪些日誌存儲服務中,目前已支持多種主流的存儲服務,如ElasticSearch、NATS、InfluxDB、Kafka、Splunk、File、Console等,一樣也支持將日誌數據繼續經過HTTP(S)協議將其傳輸到其餘服務接口中;另外這裏有一個比較特殊的Output就是Fluentd,可能你們會比較奇怪,其實在將來的日誌架構模型中,FluentBit主要是在採集端專職負責日誌的高性能採集,而後能夠將採集到的日誌在Fluentd中進行較複雜的聚合處理(同Filebeat和Logstash):工具

Other Features

  • Event Driven
    內置的Service Engine採用徹底異步的事件驅動模型來進行日誌的採集和分發。
  • Configuration
    簡單靈活的、高可讀性的配置方式,FluentBit的Workflow模型可徹底經過配置文件的方式清晰制定。
  • Upstream Manager
    採用統一的日誌上游服務的網絡鏈接管理,包括Keepalive和IO Error處理。
  • TLSv1.2 / Security
    對於安全敏感的日誌數據,支持經過TLS加密通道進行日誌傳輸。

Upcoming Features

  • Filesystem buffering mode
    當前FluentBit只支持Memory的buffer方式,但考慮到內存的易失性,將來也將會支持基於Filesystem的buffer機制。
  • Optional plugins as shared libraries
    將來會將一些已內置的但又不是必需的插件以共享連接庫的方式來進行動態加載。
  • Kubernetes Filter improvements
    將來會繼續深度整合Kubernetes,經過API獲取更多POD關鍵信息並自動添加到日誌數據記錄中。

Summary

這兩次的KubeCon大會上Eduardo Silva對日誌採集工具FluentBit都進行了深度的解析分享,不只介紹了FluentBit的整個架構模型,並且還分享了將來的發展方向,從整個分享來看FluentBit會側重在日誌的高性能採集方面;而阿里雲容器服務在2017年初開源的Log-Pilot:https://github.com/AliyunContainerService/log-pilot ,其不只可以採集容器的標準輸出日誌,並且還能動態地發現採集容器內文件日誌,同時支持簡單高效的日誌聲明式配置、支持日誌路由、日誌數據打標以及多種日誌採集插件,將來咱們將進一步與社區緊密結合,整合FluentBit的高性能採集特性以及Log-Pilot的動態發現和聲明式配置優點來進一步加強容器化應用日誌的配置採集效率。

原文連接

相關文章
相關標籤/搜索