インストールと起動
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から転送されたデータを受信する。設定するパラメータは以下の通り。
パラメータ | 意味 |
---|---|
type | forward |
<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は、出力先も様々な方法を選択できる。
標準出力に転送
データを標準出力に転送する。設定するパラメータは以下の通り。
パラメータ | 意味 |
---|---|
type | stdout |
<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