Flunetd 用於統一日誌記錄層的開源數據收集器
傳統的日誌查看方式
使用fluentd之後
Fluentd是一個開源的數據收集器,可以統一對數據收集和消費,以便更好地使用和理解數據。
幾大特色:
使用JSON統一記錄
簡單靈活可插拔架構
最小的資源需求
內置可靠性
1. JSON統一記錄Fluentd儘可能地將數據結構轉化為JSON格式,這樣可以使Fluentd統一處理日誌數據的各個方面:收集,過濾,緩衝和輸出多個源和目的地(Unified Logging Layer)的日誌。JSON格式對於下游數據處理容易得多,因為它具有足夠的結構可訪問,同時保留靈活的模式。(在我們的日誌集群架構中,fluentd擔任了一個轉發者角色。)
2. 可插拔架構Fluentd有一個靈活的插件系統,允許社區擴展其功能。社區提供了500多個的插件連接數十個data sources 和 data outputs,利用這些插件,我們可以更好的處理日誌消息流。
3. 最小的資源需求Fluentd是用C語言和Ruby語言編寫的,需要很少的系統資源。一個運行實例 使用30-40MB的內存,可以處理13,000個事件/秒/核心。Fluentd以Ruby編寫,具有靈活性,性能敏感部分用C編寫。(另外Fluentd還有一個mini版本叫Fluent Bit io。程序只有幾十kb的大小,由於暫不支持輸出消息到kafka。所以暫未考慮使用。)
4. 內置可靠性Fluentd支持基於內存和文件的緩衝(推薦配置文件中可添加buffer選項為file/production、memory/test),以防止節點間數據丟失。Fluentd還支持強大的故障切換功能(standby),可以設置高可用性。
二、插件介紹Fluentd有6種類型的插件:input,Parser,Filter,Output,Formatter和Buffer。
1. Input Plugins
概述:Fluentd從外部來源檢索和拉取日誌事件,input 插件通常會創建一個線程socket和一個監聽socket,它也可以從被定期寫入的數據源中提取數據(如tail file_name)。 支持的input插件列表:
in_udp
in_tcp
in_forward
in_secure_forward
in_http
in_unix
in_tail
in_exec
in_syslog
in_scribe
in_multiprocess
in_dummy
2. Output Plugins
概述:輸出插件又可分為三種類型:非緩衝、緩衝和時間切片(time sliced)
Non-Buffered 輸出插件不會緩衝數據並立即寫出結果
Buffered 輸出插件維護一個隊列(一個chunk是一個事件的集合),並且它的行為可以通過「chunk limit」 和 「queue limit」參數進行調整
Time Sliced 輸出插件實際上是一種Bufferred插件,但是這些塊是按時間鍵入的
輸出插件的緩衝區行為(如果有),可以由一個單獨的緩衝區插件定義。即為每個輸出插件可以選擇不同的緩衝區插件。有一些輸出插件是完全定製的,不要使用緩衝區。
Non-Buffered 輸出插件列表
out_copy
out_null
out_roundrobin
out_stdout
Buffered 輸出插件列表
out_exec_filter
out_forward
out_mongo or out_mongo_replset
Time Sliced 輸出插件列表(我們用到了kafka)
out_splunk
out_file
out_forward
out_secure_forward
out_exec
out_exec_filter
out_copy
out_geoip
out_roundrobin
out_stdout
out_null
out_s3
out_splunk
out_kafka
out_mongo
out_mongo_replset
out_relabel
out_rewrite_tag_filter
out_webhdfs
3. Buffer Plugins
概述:Buffer plugins 被緩衝輸出插件使用,如 out_file, out_forward等等。用戶可以選擇最適合系統架構性能和可靠性需求的緩衝區插件。
Buffer 結構
queue
+---------+
| |
| chunk <-- write events to the top chunk
| |
| chunk |
| |
| chunk |
| |
| chunk --> write out the bottom chunk
| |
+---------+
如上面所示,當頂部塊超過指定的大小或時間限制時(分別為buffer_chunk_limit 和 flush_interval),一個新的空塊將被推到隊列的頂部。當新的塊被推出時,底部塊被立即寫出。 如果底部的塊未能寫出,它將保留在隊列中,並且Fluentd將在等待幾秒鐘後重試(等待時間,根據retry_wait參數設置)。如果重試限制尚未禁用(disable_retry_limit is false),並且重試次數超過指定的限制(retry_limit),這個塊將被刪除。每次重試等待時間加倍(1.0秒, 2.0秒, 4.0秒, …),直到達到max_retry_wait。如果隊列長度超過指定的限制(buffer_queue_limit),則新事件將被拒絕。
所有的緩衝輸出插件都支持以下參數:
<match pattern>
# omit the part about @type and other output parameters
buffer_type memory
buffer_chunk_limit 256m
buffer_queue_limit 128
flush_interval 60s
disable_retry_limit false
retry_limit 17
retry_wait 1s
max_retry_wait 10s # default is infinite
</match>
buffer_type指定要使用的緩衝區插件,默認情況下使用內存緩衝區插件。您還可以將緩衝區類型指定為file,使用buffer_path指定file路徑. 生產環境建議使用file
Secondary output:當重試計數超過retry_limit時就使用備份的目的地。目前,當primary 插件類型為file 插件時可以工作。這是很有用的,當primary 目的地或網路條件不穩定時。相當於B方案。
buff 可用的插件列表
buf_memory
buf_file
4. Filter Plugins
概述:Filter插件使Fluentd 可以修改事件流,例如下面的場景:
- 通過刷新一個或多個欄位的值來過濾事件。
- 通過添加新的欄位豐富事件。
- 刪除或屏蔽某些欄位的隱私和合規性。
拓展:「脫敏」
<filter foo.bar>
@type grep
regexp1 message cool
</filter>
上面的意思就是:將事件與tag(標籤)為「foo.bar」進行匹配,並且如果message欄位的值包含 cool,則事件將通過其餘的配置。
像output插件中的
<filter foo.bar>
@type grep
regexp1 message cool
</filter>
<filter foo.bar>
@type record_transformer
<record>
hostname "#{Socket.gethostname}"
</record>
</filter>
一旦messages 欄位中有包含cool 的事件,將會繼續匹配。將以機器的主機名作為其值來獲取新欄位「hostname」。
filter 過濾插件可用的列表
grep
record-transformer
filter_stdout
5. Parser Plugins
概述:有時,用於輸入插件的 format
參數(如:in_tail,in_syslog,in_tcp 和 in_udp)無法解析用戶的自定義數據格式.(例如,上下文相關語法不能用正則表達式來解析)。為了解決這種情況,Fluentd有一個可插拔系統,使用戶能夠創建自己的解析器格式。
內置的Parsers 列表
regexp
apache2
apache_error
nginx
syslog
csv
tsv
ltsv
json
multiline
none
支持使用Parsers 核心的Input plugins 列表(帶 format參數的)
in_tail
in_tcp
in_udp
in_syslog
in_http
6. Formatter Plugins
概述:有時,輸出插件的輸出格式不能滿足自己的需要。Fluentd有一個名為Text Formatter的可插拔系統,使用戶可以擴展和重新使用自定義的輸出格式。
對於支持Text Formatter的輸出插件,format
參數可用於更改輸出格式。
內置Formatters列表
out_file
json
ltsv
csv
msgpack
hash
single_value
支持文本格式化程序支持的輸出插件列表(很遺憾,暫不支持kafka)
out_file
out_s3
三、生產環境的建議1. high-availability
高可用配置參考鏈接:http://docs.fluentd.org/v0.12/articles/high-availability
2. performance-tuning性能優化配置參考鏈接:http://docs.fluentd.org/v0.12/articles/performance-tuning
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※一次花費了一兩個小時的mysql問題排查
※簡單聊聊不可或缺的Nginx反向代理伺服器——實現負載均衡
※集合結合數據結構來看看(三)
※springboot用thymeleaf模板的paginate分頁
TAG:科技優家 |
※五支「氣場收集器」的吃土色口紅,做一個秋日cool girl
※紅色iPhone 8及8P真機圖賞:顏值雖高 但卻是指紋收集器
※CMS垃圾收集器
※JVM內存分配、GC原理與垃圾收集器
※最強安卓旗艦機皇華為Mate20再度曝光:後蓋竟成指紋收集器
※從0開始編寫信息收集器
※G1 垃圾收集器之對象分配過程
※3.15晚會戰況:智能騷擾電話機器人,手機竟成隱私收集器?
※五隻國產「氣場收集器」口紅,第四隻專屬於學生黨的「女王范」
※新版本:還在怕喪屍群?了解一下血月模式究極利器-輻射收集器
※荷蘭天才少年的「海洋塑料垃圾收集器」出征了
※爐石傳說:1費的「靈魂收集器」並非新卡,是舊卡換了張原畫?
※見「前男友」必備的五隻口紅,氣場收集器,圖五瞬間掌控全場!
※寵溺眼神收集器《校花的貼身高手》純美校花撩人
※本身是混血帥哥的他,還是個行走的帥哥收集器!
※小米8透明版硬殼變成「劃痕收集器」?看看雷軍咋補救!
※和閨蜜玩劈腿、跟前女友跑了、算計房子的……我難道是渣男收集器?
※節約一點是一點,印軍各種銅殼子彈收集器,我軍鋼殼子彈無此麻煩
※他幹了你不敢幹的事!憤怒的印度國王使用勞斯萊斯汽車作為垃圾收集器!
※林青霞趙薇陳紅都為她折服,瓊瑤才是「美女收集器」!