傳統的日誌查看方式
html
使用fluentd以後
nginx
Fluentd是一個開源的數據收集器,能夠統一對數據收集和消費,以便更好地使用和理解數據。
幾大特點:
使用JSON統一記錄web
簡單靈活可插拔架構正則表達式
最小的資源需求apache
內置可靠性json
Fluentd儘量地將數據結構轉化爲JSON格式,這樣可使Fluentd統一處理日誌數據的各個方面:收集,過濾,緩衝和輸出多個源和目的地(Unified Logging Layer)的日誌。JSON格式對於下游數據處理容易得多,由於它具備足夠的結構可訪問,同時保留靈活的模式。(在咱們的日誌集羣架構中,fluentd擔任了一個轉發者角色。)性能優化
Fluentd有一個靈活的插件系統,容許社區擴展其功能。社區提供了500多個的插件鏈接數十個data sources 和 data outputs,利用這些插件,咱們能夠更好的處理日誌消息流。bash
Fluentd是用C語言和Ruby語言編寫的,須要不多的系統資源。一個運行實例 使用30-40MB的內存,能夠處理13,000個事件/秒/核心。Fluentd以Ruby編寫,具備靈活性,性能敏感部分用C編寫。(另外Fluentd還有一個mini版本叫Fluent Bit io。程序只有幾十kb的大小,因爲暫不支持輸出消息到kafka。因此暫未考慮使用。)網絡
Fluentd支持基於內存和文件的緩衝(推薦配置文件中可添加buffer選項爲file/production、memory/test),以防止節點間數據丟失。Fluentd還支持強大的故障切換功能(standby),能夠設置高可用性。數據結構
Fluentd有6種類型的插件:input,Parser,Filter,Output,Formatter和Buffer。
概述: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
概述:輸出插件又可分爲三種類型:非緩衝、緩衝和時間切片(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
概述: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
概述: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
概述:有時,用於輸入插件的 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
概述:有時,輸出插件的輸出格式不能知足本身的須要。Fluentd有一個名爲Text Formatter的可插拔系統,使用戶能夠擴展和從新使用自定義的輸出格式。
對於支持Text Formatter的輸出插件,format
參數可用於更改輸出格式。
內置Formatters列表
out_file json ltsv csv msgpack hash single_value
支持文本格式化程序支持的輸出插件列表(很遺憾,暫不支持kafka)
out_file out_s3
高可用配置參考連接:http://docs.fluentd.org/v0.12/articles/high-availability
性能優化配置參考連接:http://docs.fluentd.org/v0.12/articles/performance-tuning
本文原文出自飛走不可,若有轉載,還請註明出處,如 飛走不可:http://www.cnblogs.com/hanyifeng/p/7260327.html