一、Fluentd簡介
- Fluentd是一個完全免費且完全開源的日志收集器
- Fluentd將日志視為JSON
二、Fluentd特性
- 使用JSON統一日志結構:使用JSON后,下游的數據處理起來相當的容易,因為JSON結構在保留了靈活的模式的同時,可以被無障礙的使用
- 可插拔的架構
- 最低的資源需求:Fluentd是用C和Ruby組合編寫的,需求非常少的系統資源。普通的實例內存占用在30-40MB,可以處理13000個事件/每秒/每核心
- 高可靠性:Fluentd支持基於內存和基於文件的緩沖區來避免內部節點的數據丟失。Fluentd還支持容錯和設置高可用
三、配置文件
- source(數據源):決定從哪里讀取日志,關鍵字type指定啟用插件后配置相關參數
注意:每個source必須包含一個@type參數,用於指定要使用的輸入插件;標准輸入插件:http、forward - filter(過濾器):根據規則過濾覺得哪些采集哪些丟棄,或者添加指定內容
注意:過濾器是從上往下順序執行的 - match(輸出目的地):查找具有匹配標簽的事件並對其進行處理,最常見的用法是將事件輸出到其他系統
標准輸出插件:file、forward - label(標簽):默認情況下事件是按照從上到下的順序進行處理的(配置復雜的情況下不便於理解),“標簽”指令將過濾器和輸出分組以進行內部路由
1)在source部分指定label,因此時間都只會在對應的label部分進行過濾,而沒有label的將不生效
2)應該在緊密匹配模式之后定義較寬的匹配模式(若labe **在label myapp.access之前,則匹配過**后不會匹配具體的標簽;若**在 myapp.access之后則兩個都會生效)
3)如果存在兩個完全相同的label,則第二個永遠不會生效,如果想將日志發送到多個輸出端可以使用out_copy插件
4)永遠不要講filter放在match之后,否則filter將不會生效 - system(設置系統范圍)
- @include:調用其他文件,可以將公共配置寫入include所調用的文件,這樣可以實現配置的復用
1)Fluentd將按標簽在配置文件中出現的順序進行匹配
<source> @type http port 8888 bind 0.0.0.0
@label @STAGING </source>
<system>
log_level info #日志登記
without_source
suppress_repeated_stacktrace
emit_error_log_interval #錯誤日志間隔時間
suppress_config_dump #禁止配置轉儲
process_name #進程名
<filter test.cycle> @type grep <exclude> key action pattern ^login$ </exclude> </filter> <label @STAGING> <filter test.cycle> @type grep <exclude> key action pattern ^logout$ </ exclude> </filter> <match test.cycle> @type stdout </match> </label>
@include config.d/*.conf
注解:此處因為source有使用label @STAGING,因此此處只會調用logout部分,而login的filter會被忽略
@include調用config.d/目錄下的配置文件(為了明確目錄下配置文件的調用順序,最佳使用方式是使用@include多次調用)
四、正則表達式使用
- *:匹配一個任意字符:a.*匹配a.b;但不匹配a或a.b.c
- **:匹配任意個任意字符:a.**匹配以a開頭的所有字符
- {X,Y,Z}:匹配其中任意一個,可以與*和**一起使用。如{a,b} a滿足,b也滿足
五、數據類型
- string:字符串(不帶引號,帶單引號,帶雙引號)
- integer:整數
- float:浮點數
- size:字節
k匹配kilobytes.
m匹配megabytes
g匹配gigabytes
t匹配terabytes
不帶單位將匹配未字節 - time:持續時間:整數型:s/秒、m/分、h/小時、d/天,不帶單位將默認為浮點型,默認單位為秒
- array:JSON數組:key1,key2
- hash:JSON對象:key1:value1,key2:value2
六、配置檢查
fluentd --dry-run -c fluent.conf