【入門】fluentd(td-agent)とは?インストールと使い方

ビッグデータ

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.

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.

https://docs.fluentd.org/installation/install-by-rpm

fluentd(td-agent)のインストール

fluentd(td-agent)をインストールします。

Amazon Linux2 の場合

curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh

RHEL / CentOS の場合

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh

td-agent を起動

sudo systemctl start td-agent.service

fluentd(td-agent)の使い方

HTTP を利用したログの送信

デフォルトの設定では、HTTP を利用して以下のようにログを送信することが可能です。

なお、URL のパスで td-agent のタグを指定可能です。

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
tail -n 1 /var/log/td-agent/td-agent.log
2021-01-08 14:34:02.350601661 +0000 debug.test: {"json":"message"}

[時間・タグ・ログ] の順で格納されていることがわかります。

fluentd(td-agent)の設定

fluentd(td-agent)の設定ファイルのパスは以下です。

/etc/td-agent/td-agent.conf

td-agent の設定ファイルでは以下のディレクティブで構成されます。

  • source ログの入力方法を決めるディレクティブ
  • match ログの出力方法を決めるディレクティブ
  • filter イベントプロセッシング(ログを加工する)ディレクティブ
  • system システムにまたがって設定をするディレクティブ
  • label match と filter の内部ルーティングを決めるディレクティブ
  • @include 他のファイルを include するディレクティブ

source ディレクティブと match ディレクティブを記載すればとりあえずは動作します。なお、設定を反映するには td-agent を再起動する必要があります。

sudo systemctl restart td-agent.service

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 を再起動して設定を反映します。

sudo systemctl restart td-agent.service

次に検証用のログ {"json":"message"} を投入します。

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

出力されたログを確認します。

tail -n 1 /var/log/td-agent/td-agent.log
2021-01-08 15:21:05.110291031 +0000 debug.test: {"json":"message","host_param":"test!!!!"}

入力したログ {"json":"message"} に、record_transformer で指定した "host_param":"test!!!!" が追加されていることがわかります。

上記3つのディレクティブを知っていればだいたいのことができると思います。残りのディレクティブを詳しく知りたい方は以下の公式ドキュメントをご覧ください。(とてもわかりやすいです。)

Config File Syntax

参考資料

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

Introduction
0

コメント

タイトルとURLをコピーしました