安裝fluentd
參考文檔:
官方文檔 https://docs.fluentd.org/v0.12/categories/installation
fluentd配置 https://www.ixdba.net/archives/2018/01/1116.htm
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
查看已安裝fluentd版本
/opt/td-agent/embedded/bin/gem list|grep fluentd
fluentd (1.2.4)建議1.2.4版本以上,因為之前的版本日志切割的時候會有問題
(https://github.com/fluent/fluentd/pull/2054)
更新版本
/opt/td-agent/embedded/bin/gem update fluentd
卸載之前的版本
/opt/td-agent/embedded/bin/gem uninstall fluentd --version=1.2.2
systemctl start td-agent fluentd啟動
systemctl enable td-agent 開機自啟動
安裝Fluentd 必要插件
# 從 rpm 安裝的話, # 比如要使用下例的 mongo,需要安裝 # $ sudo td-agent-gem install fluent-plugin-mongo $ sudo td-agent-gem
# 從 gem 安裝的話 $ sudo gem install
安裝完成后可以用以下命令測試是否成功,
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
td-agent的日志默認路徑是:
/var/log/td-agent/td-agent.log
不過安裝的環境可能是沒網的環境,可以直接去gem官網找安裝包,然后gem install 安裝,以下插件是flutend成功將消息推送到elasticsearch的關鍵
(1)安裝fluent-plugin-elasticsearch
/usr/sbin/td-agent-gem install fluent-plugin-elasticsearch
(2)安裝fluentd type 插件
/usr/sbin/td-agent-gem install fluent-plugin-typecast
(2)安裝secure-forward 插件(非必須但常用)
/usr/sbin/td-agent-gem install fluent-plugin-secure-forward
插件安裝完成后,就可以修改td-agent的配置文件,將你所要收集的日志推送到
td-agent的配置文件路徑默認為:
/etc/td-agent/td-agent.conf ,修改配置文件前將配置文件備份是個好習慣
cp /etc/td-agent/td-agent.conf /etc/td-agent/td-agent.conf-ori
cat /etc/td-agent/td-agent.conf
<source>
@type forward
@id input1
@label @mainstream
port 24224
</source>
<filter **>
@type stdout
</filter>
<label @mainstream>
<match alloc-order> ← 指定標簽
@type file ← 指定out_file插件
@id output_auth-server
path /data/alloc-order/docker.*.log ← 指定輸出文件
append true
message_key log
format single_value
time_slice_format %Y%m%d ← 文件添加日期信
time_slice_wait 10m ← 文件添加日期信息
</match>
<match **>
@type file
@id output1
path /data/data.*.log
#symlink_path /data/data.log
append true
time_slice_format %Y%m%d
time_slice_wait 10m
time_format %Y%m%dT%H%M%S%z
#format single_value
#message_key log
</match>
</label>
1、source:確定輸入源
match: 確定輸出目的地
filter:確定 event 處理流
label:將內部路由的輸出和過濾器分組
2、Fluentd 的標准輸入插件包含 http(監聽 9880) 和 forward 模式(監聽 24224),分別用來接收 HTTP 請求和 TCP 請求。
http:使 fluentd 轉變為一個 httpd 端點,以接受進入的 http 報文。
forward:使 fluentd 轉變為一個 TCP 端點,以接受 TCP 報文。
3、match 指令查找匹配 “tags” 的事件,並處理它們。match 命令的最常見用法是將事件輸出到其他系統(因此,與 match 命令對應的插件稱為 “輸出插件”)。每個match指令必須包括一個匹配模式和type參數。match模式是用來過濾事件。只有事件與tag匹配,這個模式將被發送到輸出目的地。type參數指定輸出插件使用。Fluentd 嘗試按照它們在配置文件中出現的順序,從上到下來進行 "tags" 匹配
append:默認值 false,即刷新日志到不同的文件;若為 true 則輸出到同一文件,直到觸發 time_slice_format
當滿足 time_slice_format 條件時,將創建該文件。 要更改輸出頻率,請修改 time_slice_format 值。%Y%m%d 每天切割一次收集的日志
time_slice_wait 事件發生時間和fluentd接收事件信息時間有時會發生時差,因此會出現輸出文件日期和實際內容不相符的情況。例如23:55發生的事件信息的接收事件是0:01,這時用日期切換輸出文件可能會導致該事件信息的丟失。這時可指定 time_slice_wait 參數,該參數是out_file插件根據日期分割輸出文件之后,等待多長時間之后向新文件輸出信息,在這里10m是10分鍾。
message_key log和format single_value將json格式中log字段提取出來
參考文檔:http://www.imekaku.com/2016/09/18/fluentd-remove-time-tag-to-only-value/
Fluentd提取發送日志中的value-SingleValue – Imekaku-Blog
docker run -d --log-driver fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="alloc-order" --log-opt fluentd-async-connect
--log-driver: 配置log驅動
--log-opt: 配置log相關的參數
fluentd-address: fluentd服務地址fluentd-async-connect:fluentd-docker異步設置,避免fluentd掛掉之后導致Docker容器也掛了