Raspberry Pi3でFluentdを利用してみた

FluentdはRubyで開発されたデータログの収集/転送を行うためのツールでリアルタイムに処理できます。また豊富に用意されているプラグインの追加により、MySQLやPostgreSQL、Amazon S3にデータをまとめて保存できます。ここではRaspberry Pi3におけるFluentdについて紹介していきます。

01: インストール

bash


# 作業ディレクトの作成/移動
$ mkdir RB0201-Fluentd && cd RB0201-Fluentd

# Gemfileを作成
$ bundle init

# Gemfileの編集
$ nano Gemfile

# Fluentdライブラリをインストール
$ bundle install --path vendor/bundle

# 設定ファイルを作成
$ bundle exec fluentd --setup ./fluent

# 収集したログを格納するディレクトリを作成
mkdir fluent/log
mkdir fluent/log/apache

# fluent.confの編集
$ nano fluent/fluent.conf

# 起動
$ bundle exec fluentd -c ./fluent/fluent.conf -vv &

# 終了
$ kill <プロセスID>

Gemfile


# frozen_string_literal: true
source "https://rubygems.org"

gem 'fluentd', "~> 0.12.0"

fluent.conf


...
# HTTP input
# http://localhost:8888/<tag>?json=<json>
#<source>
#  @type http
#  @id http_input
#
#  port 8888
#</source>
...
# File input
# read apache logs with tag=apache.access
<source>
  @type tail
  format apache2
  path /var/log/apache2/access.log
  pos_file ./fluent/log/apache/access.pos
  tag apache.access
</source>
...
# match tag=apache.access and write to file
<match apache.access>
  @type file
  path ./fluent/log/apache/access.log
  time_slice_format %Y%m%d
  time_slice_wait 1m
</match>
...
補足
    sourceディレクティブ
    ログの入力方法
    matchディレクティブ
    マッチした時の処理を記述
    tag
    ログのID、ルーティングに使用する。

02: 動作テスト

コマンドから文字列を送信

bash


$ echo '{"json":"message"}' | bundle exec fluent-cat debug.test
2017-05-23 15:10:12 +0900 [trace]: plugin/in_forward.rb:289:initialize: accepted fluent socket from '127.0.0.1:49200': object_id=9352776
2017-05-23 15:10:12 +0900 debug.test: {"json":"message"}
2017-05-23 15:10:12 +0900 [trace]: plugin/in_forward.rb:357:on_close: closed socket

ブラウザからapacheにアクセス

access.log.20170523.b5502ab7e8fbc3cf3


...
2017-05-23T15:02:16+09:00       apache.access   {"host":"192.168.11.5","user":null,"method":"GET","path":"/","code":200,"size":3381,"referer":null,"agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30"}
2017-05-23T15:02:16+09:00       apache.access   {"host":"192.168.11.5","user":null,"method":"GET","path":"/icons/openlogo-75.png","code":304,"size":183,"referer":"http://192.168.11.20/","agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30"}