fluentd とは

fluentd はログ収集ソフトウェアです。
数千台の IoT 機器のログや、様々なアプリケーションのログを1箇所に集約するために利用します。
似たようなソフトウェアに Apache Kafka がありますので、合わせてこちらもご覧ください。
また、fluentd がビッグデータ分析基盤のどの役割を果たすかについては以下の記事でまとめているのでご覧ください。
td-agent と fluentd の違い
td-agent は fluentd の安定版です。
Fluentd は Ruby で作成されており、Ruby に起因するインストールやオペレーションの問題が発生する場合がありますが、td-agent ではそのような問題を回避します。
Fluentd is written in Ruby for flexibility, with performance-sensitive parts in C. However, some users may have difficulty installing and operating a Ruby daemon.
https://docs.fluentd.org/installation/install-by-rpm
That is why Treasure Data, Inc provides the stable distribution of Fluentd, called td-agent. The differences between Fluentd and td-agent can be found here.
fluentd(td-agent)のインストール
fluentd(td-agent)をインストールします。
Amazon Linux2 の場合
RHEL / CentOS の場合
td-agent を起動
fluentd(td-agent)の使い方
HTTP を利用したログの送信
デフォルトの設定では、HTTP を利用して以下のようにログを送信することが可能です。
なお、URL のパスで td-agent のタグを指定可能です。
2021-01-08 14:34:02.350601661 +0000 debug.test: {"json":"message"}
[時間・タグ・ログ] の順で格納されていることがわかります。
fluentd(td-agent)の設定
fluentd(td-agent)の設定ファイルのパスは以下です。
td-agent の設定ファイルでは以下のディレクティブで構成されます。
source
ログの入力方法を決めるディレクティブmatch
ログの出力方法を決めるディレクティブfilter
イベントプロセッシング(ログを加工する)ディレクティブsystem
システムにまたがって設定をするディレクティブlabel
match と filter の内部ルーティングを決めるディレクティブ@include
他のファイルを include するディレクティブ
source ディレクティブと match ディレクティブを記載すればとりあえずは動作します。なお、設定を反映するには td-agent を再起動する必要があります。
source: ログの入力方法
@type では入力プラグインを設定します。デフォルトでは以下の2つのプラグインがあります。
- http: HTTP エンドポイントを提供します。
- foward: TCP エンドポイントを提供します。
<source> @type http port 9880 </source>
match: ログの出力方法
@type では出力先を指定します。file は /etc/td-agent/td-agent.conf にログを出力します。
<match myapp.access> @type file path /var/log/fluent/access </match>
match ディレクティブで指定したタグと、input 時に指定したタグが同じ場合のみ実行されます。上記の match ディレクティブのタグは「myapp.access」です。
そのため、入力時に「http://localhost:8888/myapp.access」と指定すると上記の match ディレクティブが実行されます。
filter: イベントプロセッシング(ログを加工)
@type で record_transformer を指定すると、ログにレコードを追加します。下記の例では
<filter debug.**> @type record_transformer <record> host_param "test!!!!" </record> </filter>
上記の filter ディレクティブを利用してログを加工してみます。
まずは td-agent を再起動して設定を反映します。
次に検証用のログ {"json":"message"} を投入します。
出力されたログを確認します。
2021-01-08 15:21:05.110291031 +0000 debug.test: {"json":"message","host_param":"test!!!!"}
入力したログ {"json":"message"} に、record_transformer で指定した "host_param":"test!!!!" が追加されていることがわかります。
上記3つのディレクティブを知っていればだいたいのことができると思います。残りのディレクティブを詳しく知りたい方は以下の公式ドキュメントをご覧ください。(とてもわかりやすいです。)

参考資料
公式ドキュメントがかなり詳しいです。

コメント