Flunetd 用於統一日誌記錄層的開源數據收集器

傳統的日誌查看方式
傳統的日誌查看方式html



使用fluentd以後
使用fluentd以後nginx

1、介紹

Fluentd是一個開源的數據收集器,能夠統一對數據收集和消費,以便更好地使用和理解數據。
幾大特點:
使用JSON統一記錄web

簡單靈活可插拔架構正則表達式

最小的資源需求apache

內置可靠性json

1. JSON統一記錄

Fluentd儘量地將數據結構轉化爲JSON格式,這樣可使Fluentd統一處理日誌數據的各個方面:收集,過濾,緩衝和輸出多個源和目的地(Unified Logging Layer)的日誌。JSON格式對於下游數據處理容易得多,由於它具備足夠的結構可訪問,同時保留靈活的模式。(在咱們的日誌集羣架構中,fluentd擔任了一個轉發者角色。)性能優化

2. 可插拔架構

Fluentd有一個靈活的插件系統,容許社區擴展其功能。社區提供了500多個的插件鏈接數十個data sources 和 data outputs,利用這些插件,咱們能夠更好的處理日誌消息流。bash

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),能夠設置高可用性。數據結構

2、插件介紹

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插件,可是這些塊是按時間鍵入的

Buffering type

輸出插件的緩衝區行爲(若是有),能夠由一個單獨的緩衝區插件定義。即爲每一個輸出插件能夠選擇不一樣的緩衝區插件。有一些輸出插件是徹底定製的,不要使用緩衝區。
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處理,事件將從上到下進行配置,所以,若是同一個標籤有多個過濾器,則按降序應用。經過下面的例子看下:

<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

3、生產環境的建議

1. high-availability

高可用配置參考連接:http://docs.fluentd.org/v0.12/articles/high-availability

2. performance-tuning

性能優化配置參考連接:http://docs.fluentd.org/v0.12/articles/performance-tuning

本文原文出自飛走不可,若有轉載,還請註明出處,如 飛走不可:http://www.cnblogs.com/hanyifeng/p/7260327.html

相關文章
相關標籤/搜索