インストールと起動
MacにFluentdをインストールし、Macで動くアプリのログを、Elastichsearchが動くサーバへと転送する。FluentdのダウンロードページにMac用のdmgイメージがあるので、これをダウンロードし実行する。
Macのデーモンは、launchctlと呼ばれるツールで管理される。launchctlは、設定ファイル(plist)のロードによってデーモンを登録し、デーモンの開始や終了など制御する。通常は、デーモンの登録を行った上で、デーモンの開始を行うという流れとなるが、設定ファイル内で「RunAtLoad = true」が設定されている場合は、ロードと同時にデーモンが起動され、OSの起動時にも自動的にデーモンは起動する。
Fluentd(td-agent)の設定ファイルは、「RunAtLoad = true」に設定されているため、設定ファイルをロードするだけで、デーモンは起動され、自動起動に設定される。
launchctl load /Library/LaunchDaemons/td-agent.plist
元データの設定
Fluentdは、元データの指定と転送先の指定が必要となる。元データは以下のような種類を指定できる。
ログファイルから取得する
転送ログの元データを指定する。設定するパラメータは以下の通り。
パラメータ |
意味 |
type |
tail |
path |
ログファイルのパス |
pos_file |
読み込んだ位置を記憶しておくファイル |
tag |
ログの識別子 |
<source>
type tail
format apache
path /var/log/httpd-access.log
tag td.apache.access
</source>
httpから取得する
http通信によってデータを取得する。設定するパラメータは以下の通り。
パラメータ |
意味 |
type |
http |
port |
ポート番号 |
tagは、URLヘッダで指定する。
<source>
type http
port 8888
</source>
実行したコマンドの標準出力から取得する
コマンドの実行によってデータを取得する。設定するパラメータは以下の通り。
パラメータ |
意味 |
type |
exec |
command |
実行するコマンド |
tag |
ログの識別子 |
他のFluentdから取得する
他のFluentdから転送されたデータを受信する。設定するパラメータは以下の通り。
<source>
type forward
</source>
設定例
今回は、Macで動作するアプリが出力する以下の形式のログを元データに指定する。
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application is started."
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application is initialized."
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Data is received: apple=3, orange=4"
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application will be terminated."
Fluentdは様々なログをJSON形式に変換した上で転送を行う。ログの変換を行うためには、どのようなフォーマットでログが記述されているかを正規表現でFluentdに教えてあげる必要があり、この設定が最も難しい。今回のログは、スペース区切りで、[日付][プロセス情報][ステータス][メッセージ]の情報が並んでいるので、正規表現で表現すると以下のようになる。
sudo vi /etc/td-agent/td-agent.conf
<source>
type tail
path /tmp/exampleApp.log
pos_file /var/log/td-agent/exampleApp.log.pos
tag example.app
format /(?<time>[^\]]*) (?<process>.*) <(?<stat>.*)> "(?<message>.*)"/
time_format %Y-%m-%d %H:%M:%S.%N
</source>
出力先の設定
Fluentdは、出力先も様々な方法を選択できる。
標準出力に転送
データを標準出力に転送する。設定するパラメータは以下の通り。
<match **>
type stdout
</match>
ファイルに転送
データをファイルに転送する。設定するパラメータは以下の通り。
パラメータ |
意味 |
type |
file |
path |
出力ファイルのパス |
time_slice_format |
ファイル名のサフィックス |
time_slice_wait |
ファイルを分割する時間単位 |
<match **>
type file
path /var/log/fluent/exampleApp.export
time_slice_format %Y%m%d
time_slice_wait 10m
</match>
他のFluentdに転送
データを他のFluentdに転送する。設定するパラメータは以下の通り。
パラメータ |
意味 |
type |
forward |
server |
転送先サーバの情報 |
今回は、Macアプリのログを、Elasticsearchを導入した他のサーバに転送したいので、以下の設定とした。
<match **>
type forward
<server>
name server_1
host XXX.XXX.XXX.XXX
</server>
</match>
設定ファイル
設定ファイルは以下となった。
sudo vi /etc/td-agent/td-agent.conf
<source>
type tail
path /tmp/exampleApp.log
pos_file /var/log/td-agent/exampleApp.log.pos
tag example.app
format /(?<time>[^\]]*) (?<process>.*) <(?<stat>.*)> "(?<message>.*)"/
time_format %Y-%m-%d %H:%M:%S.%N
</source>
<match **>
type forward
<server>
name server_1
host XXX.XXX.XXX.XXX
</server>
</match>
Fluentdを再起動して新たな設定ファイルを読み込む。このとき、/var/log/td-agent/td-agent.logに正常なログが吐き出されていたらOK!
launchctl unload /Library/LaunchDaemons/td-agent.plist
launchctl load /Library/LaunchDaemons/td-agent.plist
参考になるページ