Fluentd是用來處理其他系統產生的日志的,它本身也會產生一些運行時日志。Fluentd包含兩個日志層:全局日志和插件級日志。每個層次的日志都可以進行單獨配置。
-
日志級別
Fluentd的日志包含6個級別:fatal、error、warn、info、debug和trace。級別依次遞增,高級別的日志包含低級別的日志。默認為info,所以默認情況下,日志中包含info、warn、error、fatal這4個級別的日志。 -
全局日志
Fluentd內核使用全局日志配置,若插件沒有單獨設置自己的日志配置項,插件也共用全局日志配置項。可通過命令行或配置文件進行設置。
2.1 命令行
- -v、-vv用於增加日志級別,-q、-qq用於降低日志級別。
$ fluentd -v ... # debug level
$ fluentd -vv ... # trace level
$ fluentd -q ... # warn level
$ fluentd -qq ... # error leve
使用命令行可以在不改變配置文件的情況下調整日志級別,方便調試。
- 配置文件
也可以在配置文件中設置的log_level來配置全局日志級別。
<system>
# equal to -qq option
log_level error
</system>
- 插件日志
可通過@log_level
對每個插件單獨設置日志級別,這個級別將覆蓋全局日志級別。
<source>
@type tail
@log_level debug
path /var/log/data.log
...
</source>
<source>
@type http
@log_level fatal
</source>
上邊這個片段中,對兩個不同的輸入源分別設置了各自的日志級別。
- 日志格式
Fluentd的日志支持text和json兩種格式,默認使用text,可在<system>
中進行設定。
<system>
<log>
format json
time_format %Y-%m-%d
</log>
</system>
若使用json格式,
2017-07-27 06:44:54 +0900 [info]: #0 fluentd worker is now running worker=0
這條日志將會轉化為如下輸出:
{"time":"2017-07-27","level":"info","message":"fluentd worker is now running worker=0","worker_id":0}
- 將日志寫入文件
Fluentd默認將其日志輸出到stdout,可通過-o將日志輸出到文件中。
$ fluentd -o /path/to/log_file
若將日志寫入文件,默認情況下Fluentd不會進行日志輪轉,即會向指定的文件中不斷寫入日志,這可能會導致日志文件過大。可通過命令行參數開啟日志輪轉功能。
5.1 --log-rotate-age AGE
這里AGE為整數或字符串,需要和下邊的rotate-size配合使用。
整數表示輪轉文件個數;
字符串表示輪轉頻率,可為daily、weekly或monthly。
5.2 --log-rotate-size BYTES
BYTES為輪轉文件的大小,達到此字節數即開始寫入新的文件。
當rotate-age值為整數時,通過此配置項控制日志的輪轉。
$ fluentd -c fluent.conf --log-rotate-age 5 --log-rotate-size 104857600
- 捕獲Fluentd日志
Fluentd自身日志也可以被采集。
Fluentd使用fluent作為自身日志的tag,我們可以通過<label @FLUENT_LOG>
來處理Fluentd自身的日志。
# Add hostname for identifying the server
<label @FLUENT_LOG>
<filter fluent.*>
@type record_transformer
<record>
host "#{Socket.gethostname}"
</record>
</filter>
<match fluent.*>
@type monitoring_plugin
# parameters...
</match>
<label>
這樣做的一個用處是用來監控Fluentd運行情況。