"本文主要介紹了CNCF官方社區輕量級日誌收集工具"
1、介紹
前段時間寫了一篇日誌收集方案,Kubernetes日誌收集解決方案有部分讀者反饋說,都是中小企業,哪有那麼多資源上ELK或者EFK,大數據這一套平臺比我自身服務本身耗費資源還要多,再說了,現階段我的業務不需要格式轉換,不需要數據分析,我的日誌頂多就是當線上出現問題時,把我的多個節點日誌收集起來排查錯誤。但是在Kubernetes平臺上,pod可能被調度到不可預知的機器上,如果把日誌存儲在當前計算節點上,難免會出現排查問題效率低下,當然我們也可以選用一些共享文件服務器,比如GFS、NFS直接把日誌輸出到特定日誌服務器,這種情況對於單副本服務沒有任何問題,但是對於多副本服務,可能會出現日誌數據散亂分佈問題(因爲多個pod中日誌輸出路徑和名稱都是一樣的),下面我介紹通過CNCF社區推薦的fluentd進行日誌收集。
2、對比
使用fluentd日誌收集之前:
使用fluentd日誌收集之後:
看到這張圖片之後就被fluentd架構清晰程度吸引了;
3、fluentd和fluent-bit介紹
fluentd是一款開源的日誌收集工具。基於ruby和C編寫,它擁有非常多的插件,可以滿足的我們對各種格式的日誌進行收集,過濾,解析等。把日誌信息變成我們想要的格式。並且,沒有找到滿足我們的插件,我們可以自己寫插件。fluentd收集日誌時,將所有日誌看做JSON格式的數據。並且用正則表達式去匹配日誌。fluentd自帶豐富的日誌收集格式。以及可以將日誌收集到各種存儲的數據庫。fluentd有7種類型的插件:輸入、解析器、過濾器、輸出、格式化程序、存儲和緩衝區。
總結下
Fluentd是一個集數據的收集、過濾、聚合處理、轉發、接收爲一體數據收集器。
Fluend-bit是Fluentd的精華版本,純C編寫、大小450kb,更輕量級,主要支持數據的收集和處理功能。
4、收集步驟
其中fluent-bit充當客戶端,fluentd充當服務端,客戶端定時根據某種特定策略收集日誌傳遞到服務端,服務端存儲日誌,這一次不在說ES或者Kafaka,而是直接把日誌文件集中收集存儲磁盤文件中,當然大數據分析和展示工具fluentd本身是支持的,而且fluentd支持高可用配置。
5、收集方式
每個節點以Kubernetes中DaemonSet形式運行fluent-bit,在各個節點進行日誌收集,收集完成後發送到fluentd進行統一日誌處理和存儲。這種方式結構簡單清晰,但是收集較爲粗略,如果說一個pod的多個副本運行在同一個節點上,可能會出現日誌交叉打印問題,當然我們也可以在yaml中配置約束條件,同一個pod調度到不同計算節點,限制這種情況出現。
通過sidercar方式運行fluent-bit,編寫業務yaml的同時,把fluentd-bit追加進去,這種收集日誌較爲詳盡,可以收集到pod中container信息,但是會出現跟業務耦合的問題。
具體如何選擇還要看業務場景收集日誌詳細程度。
6、示例
fluentd-bit客戶端日誌收集配置
[SERVICE]
Flush 1
Daemon OFF
Log_Level debug
[INPUT]
Name tail
Path /home/logs/nginx.log
Db /tmp/ng.db
Db.sync Full
Tag ng-log
[OUTPUT]
Name forward
Match *
Host 112.68.7.95
port 24224
fluentd服務端接收日誌配置
<source>
@type forward
port 24224
</source>
<source>
@type http
port 9880
</source>
<match nginx*>
#匹配有tag爲mem的類型
@type stdout #匹配成功直接標準輸出
</match>
<match nginx*>
@type file
path /data/log/fluent/access
<format>
@type single_value
message_key log
add_newline true
</format>
<buffer>
@type file
chunk_limit_size 1M
# 每隔1分鐘寫一次日誌
flush_interval 1m
flush_at_shutdown true
flush_mode interval
</buffer>
</match>
7、總結
如上主要講述了fluentd和fluent-bit通過客戶端和服務端配合收集日誌的使用過程,在使用過程fluentd和fluent-bit採用原生安裝的方式,暫時沒有通過Kubernetes pod運行,至於fluentd和fluent-bit的安裝和使用過程我會盡快完善補充,敬請關注,也可以加入圈子我們一起討論。
推薦閱讀:
Kubernetes中如何使用ClusterDNS進行服務發現?
從Ice到Kubernetes容器技術,微服務架構經歷了什麼?
原創不易,隨手關注或者”在看“,誠摯感謝!