Fluentd構成
8406 ワード
Fluentd
Fluentdは、125以上の異なるタイプのシステムでログを収集することをサポートする完全オープンソース無料のログ収集システムです.
システムの概略図は次のとおりです.
インストール
第一歩、RPMパッケージのインストール
RedHat/CentOS 6,7,64ビットシステムには、以下の方法でインストールできます.curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
ステップ2、開始
システムのバージョンに応じて、次のいずれかの方法で起動できます.systemctl start td-agent
/etc/init.d/td-agent start
ステップ3、検証
デフォルトでは、プロファイルは/etc/td-agent/td-agentです.confは、HTTPの8888ポートからログを受信しstdout(/var/log/td-agent/td-agent.log)にルーティングする.次のコマンドでテストログを開始できます.curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
ログを表示する最後の行は、送信したばかりのテストログです.# tail /var/log/td-agent/td-agent.log
2018-09-14 16:42:14 +0800 [warn]: #0 [output_td] secondary type should be same with primary one primary="Fluent::Plugin::TreasureDataLogOutput" secondary="Fluent::Plugin::FileOutput"
2018-09-14 16:42:14 +0800 [info]: adding match pattern="debug.**" type="stdout"
2018-09-14 16:42:14 +0800 [info]: adding source type="forward"
2018-09-14 16:42:14 +0800 [info]: adding source type="http"
2018-09-14 16:42:14 +0800 [info]: adding source type="debug_agent"
2018-09-14 16:42:14 +0800 [info]: #0 starting fluentd worker pid=24064 ppid=24051 worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_debug_agent] listening dRuby uri="druby://127.0.0.1:24230" object="Fluent::Engine" worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_forward] listening port port=24224 bind="0.0.0.0"
2018-09-14 16:42:14 +0800 [info]: #0 fluentd worker is now running worker=0
2018-09-14 16:46:16.388094455 +0800 debug.test: {"json":"message"}
コンフィギュレーション
プロファイルは、Fluentd入力(input)と出力(output)の動作をユーザーに制御させるために使用されます.(1)入力プラグインと出力プラグインを選択し、(2)プラグインパラメータを指定します.プロファイルは、Fluentdを正常に動作させるために存在する必要があります.
文字コード
Fluentdは、プロファイルがUTF-8またはASCIIとして符号化されると仮定する.
めいれいリスト
プロファイルは、次のコマンドで構成されています.
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
systemctl start td-agent
/etc/init.d/td-agent start
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
# tail /var/log/td-agent/td-agent.log
2018-09-14 16:42:14 +0800 [warn]: #0 [output_td] secondary type should be same with primary one primary="Fluent::Plugin::TreasureDataLogOutput" secondary="Fluent::Plugin::FileOutput"
2018-09-14 16:42:14 +0800 [info]: adding match pattern="debug.**" type="stdout"
2018-09-14 16:42:14 +0800 [info]: adding source type="forward"
2018-09-14 16:42:14 +0800 [info]: adding source type="http"
2018-09-14 16:42:14 +0800 [info]: adding source type="debug_agent"
2018-09-14 16:42:14 +0800 [info]: #0 starting fluentd worker pid=24064 ppid=24051 worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_debug_agent] listening dRuby uri="druby://127.0.0.1:24230" object="Fluent::Engine" worker=0
2018-09-14 16:42:14 +0800 [info]: #0 [input_forward] listening port port=24224 bind="0.0.0.0"
2018-09-14 16:42:14 +0800 [info]: #0 fluentd worker is now running worker=0
2018-09-14 16:46:16.388094455 +0800 debug.test: {"json":"message"}
構成例Step by Step
1.source:すべてのデータのソース
Fluentdの入力ソースを選択して構成するには、sourceコマンドが必要です.Fluentdの標準入力プラグインにはhttpとforwardが含まれています.httpは、HTTPポートを傍受し、HTTPからのログメッセージを受信する.forwardはfluentdにTCPポートを傍受させ、TCPパケットを受け入れる.もちろん、両方を同時にオンにすることもできます(必要なソースを追加できます).
# Receive events from 24224/tcp
# This is used by log forwarding and the fluent-cat command
@type forward
port 24224
# http://this.host:9880/myapp.access?json={"event":"data"}
@type http
port 9880
各source命令には@typeパラメータが含まれている必要があります.@typeパラメータは、どの入力プラグインが使用されるかを指定します.
挿入:Routing
ソースはイベントをFluentdのルーティングエンジンにコミットします.各イベントは、tag、time、recordの3つのエンティティで構成されます.tagは'.'分離された文字列(myapp.accessなど)は、Fluentd内部ルーティングの指示として使用されます.timeフィールドはinputプラグインによって指定され、Unix時間フォーマットでなければなりません.レコードはJSONオブジェクトです.
2.match:fluentdに何をすべきか教えて!
match命令は、一致tagを有するすべてのイベントを検索し、処理する.match命令の最も一般的な使い方は、イベントを他のシステムに出力することです(したがって、match命令に対応するプラグインは「output」プラグインと呼ばれます).Fluentdの標準出力プラグインにはfileとforwardが含まれています.プロファイルに追加します.
# Receive events from 24224/tcp
# This is used by log forwarding and the fluent-cat command
@type forward
port 24224
# http://this.host:9880/myapp.access?json={"event":"data"}
@type http
port 9880
# Match events tagged with "myapp.access" and
# store them to /var/log/fluent/access.%Y-%m-%d
# Of course, you can control how you partition your data
# with the time_slice_format option.
@type file
path /var/log/fluent/access
各match命令には、マッチングテンプレートと@typeパラメータが含まれている必要があります.テンプレートに一致するtagのイベントのみが出力先に送られます(上記の例では、tagが「myapp.access」のイベントのみが一致します).typeパラメータは、使用するoutputプラグインを指定します.
3.filter:イベント処理パイプ
filter命令はmatchと同じ構文を持つが、filterは処理をパイプに直列化することができる.filterを使用すると、イベントフローは次のように表示されます.
Input -> filter 1 -> ... -> filter N -> Output
標準のrecord_を追加します.Transformer filterは、書いたばかりのmatchの例にあります.
# http://this.host:9880/myapp.access?json={"event":"data"}
@type http
port 9880
@type record_transformer
host_param "#{Socket.gethostname}"
@type file
path /var/log/fluent/access
イベント{"event":"data"}を受け取ったら、filter:record_に捨てます.transformerでrecord_transformerはイベントに「host_param」フィールドを追加し、「event」:「data」、「host_param」:「webserver 1」}に続き、イベントは最終的にfile出力プラグインに到達する.
matchテンプレート
ワイルドカードと展開
次のmatchテンプレートは、和のtagに使用できます.
照合順序
Fluentdは、プロファイルにテンプレートが表示される順序で一致しようとします.次の例を見てみましょう
# ** matches all tags. Bad :(
@type blackhole_plugin
@type file
path /var/log/fluent/access
上の例ではmyapp.アクセスは永遠に一致しません.より緩やかなマッチングテンプレートは、より厳密なマッチングテンプレートの後に定義する必要があります.このように:
@type file
path /var/log/fluent/access
# Capture all unmatched tags. Good :)
@type blackhole_plugin
もちろん、同じテンプレートが2つある場合、後者のmatchは永遠に一致しません.イベントを複数の出力に送信する場合はout_を使用することを考慮してください.copyプラグイン.
よくある落とし穴は、後に置くことです.前述の理由で、イベントはfilterに到達できず、予想通りに動作しません.
COPY出力カード
out_copyはFluentdのコアプラグインで、別途インストールする必要はありません.out_copyはイベントを複数コピーし、それぞれ複数の出力プラグインに送ります.直接例を示します.
@type copy
@type file
path /var/log/fluent/myapp1
...
...
...
次の例では、ローカルフォルダ/var/log/fluent/myappにイベントを保存し、Elasticsearchインスタンスのfluentdに送信する.testコレクションで.詳細についてはout_を参照してくださいfileとout_Elasticsearchプラグインの詳細説明.
@type copy
@type file
path /var/log/fluent/myapp
compress gzip
localtime false
timekey_wait 10m
timekey 86400
timekey_use_utc true
path /var/log/fluent/myapp
time_format %Y%m%dT%H%M%S%z
localtime false
@type elasticsearch
host 192.168.198.46
port 9200
index_name fluentd
type_name test
dockerを起動し、log-driverをfluentdに向けると、ログをfluentdに出力し、elasticsearchに転送し、ログバックアップをローカルに残します.
docker run --rm --log-driver fluentd --log-opt fluentd-address=192.168.198.46:24224 --log-opt tag=docker.test alpine date
out_copyパラメータ
@type copy
@type plugin1
@type plugin2
plugin 1にエラーが発生した場合、plugin 2は実行されません.重要でないstoreで発生したエラーを無視するには、storeのignore_を指定します.Errorパラメータ.
@type copy
@type plugin1
@type plugin2