Fluentd (フルエントディー)は、ruby で開発されたデータコレクションツールやデータログ収集ツールと呼ばれるソフトウェアです。ビックデータを解析する為に、syslog やアプリケーションのログをファイルはもちろん プラグイン(http://www.fluentd.org/plugins)を追加することによりMySQL, PostgreSQL や Amazon S3 にデータをまとめて保存したり、Nagios, Zabbix などのネットワーク管理システムとの連携も行えます。
Windows や、MacOS X にも対応している為、いろんなプラットフォームからデータを集めカスタマイズ出来るので、ポケモンGo、Line や GREE などでもログ解析に利用されています。今まで ruby で開発されている為、パフォーマンスに対して懸念を持っている人が一部にいましたが、大量のログを扱っているポケモンGoのバックグランドでも動作している事が知られその不安も払拭されつつあります。
今回は、apache のアクセスログをFluentd に転送して、独自のファイルに保存する方法を紹介したいと思います。
apache がインストールされていない場合は、apache のインストールを行います。
$ sudo apt -y install apache2 Fluentd が apache のアクセスログにアクセス出来るようにパーミッションを変更します。 $ sudo chmod 755 /var/log/apache2/ $ sudo chmod 644 /var/log/apache2/access.log $ sudo systemctl restart apache2.service
Fluentd(td-agent) は、以下のコマンドでインストールします。 $ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent2.5.sh | sh td-agent サービスの起動確認を行います。 $ systemctl status td-agent.service ● td-agent.service - LSB: data collector for Treasure Data Loaded: loaded (/etc/init.d/td-agent; generated; vendor preset: enabled) Active: active (running) since 日 2018-07-08 17:17:29 JST; 2min 6s ago :
td-agent は、ポート8888 番でHTTP POST データを受け付ける設定がデフォルトでなされているので、ログが出力されるかの確認を行います。
$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test $ tail -f /var/log/td-agent/td-agent.log : 2018-07-08 15:29:06.474281850 +0900 debug.test: {"json":"message"}
[/etc/td-agent/td-agent.conf]
ポート8888 番でHTTP POST データを受け付ける設定。(デフォルト)
<match debug.**> @type stdout </match> : <source> @type http port 8888 </source> :
apache の access.log を td-agent に転送する設定。 (追記)
<source> 入力する形式を設定します。 type tail <- 入力するタイプを記述します。tail, file, unix, http など (必須) path /var/log/apache2/access.log <- 入力するファイルのパス tag apache.accessA <- 任意のタグを設定します。 pos_file /var/log/td-agent/access_log.pos <- tail しているファイルの位置情報をファイルに保存する場合、ファイルパスを設定します。 format apache <- フォーマットを設定します。apache, syslog, json など </source> <match apache.access> マッチしたデータを出力する形式を設定します。 type file <- 出力するタイプを記述します。 path /var/log/td-agent/httpd/access.log 出力するファイル名を設定します。 time_slice_format %Y%m%d ログファイルに日付拡張子を設定します。 time_slice_wait 10m バッファをフラッシュするまでの待ち時間を設定します。 compress gzip ログファイルを圧縮する場合に設定します。 </match>
td-agent の設定ファイルを読み込みます。 $ sudo systemctl reload td-agent.service apache にアクセスします。 $ curl http://localhost/ apache のログと td-agent のログに出力されている事を確認します。 $ tail -f /var/log/apache2/access.log : 2018-07-08T09:47:55+09:00 apache.access {"host":"127.0.0.1","user":null,"method":"GET","path":"/","code":200,"size":11576,"referer":null,"agent":"curl/7.50.1"} $ tail -f /var/log/td-agent/httpd/access.log.20180108.b5458a5bba79643b2 : 2018-07-08T09:47:55+09:00 apache.access {"host":"127.0.0.1","user":null,"method":"GET","path":"/","code":200,"size":11576,"referer":null,"agent":"curl/7.50.1"}