Fluentdつかってみた

Fluentd とは

Fluentd とはTreasure Dataという会社が開発している、さまざまなログの収集手段を提供するログ管理ツールです。
今回は CentOS 6.7 で実際にインストールしてつかってみることによって基本的な設定を学んでいきたいと思います。

td-agent をインストー

td-agent ? となるかと思いますが、td-agent には以下のものが同梱されています。

つまり、ad-agent の中に Fluentd が入っていて、プラグインなども一緒に入っているので、通常は td-agent をインストールします。

インストールにあたっては公式にインストースクリプトが公開されているので今回はそちらをつかってインストールします。

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

起動は次のコマンドでできます。

$ sudo /etc/init.d/td-agent start

設定ファイルの編集

それでは設定ファイルを編集してみましょう。
まずは、ログ収集の設定を行います。なお、デフォルトの設定はすべて削除してしまって問題ありません。

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

<source>
    # 入力に in_tail プラグインを指定
    type tail
    # 監視するログファイルのパスを指定
    path /var/log/httpd/access_log
    # ログにつけるタグを指定
    tag apache.access
    # 監視するファイルをどの行まで読み込んだかを記録するファイルの指定
    pos_file /var/log/td-agent/httpd-access_log.pos
    # ログの書式を指定
    format apache2
</source>

次に上記の記述の下にログ出力の設定を追記していきます。

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

# 上で指定したタグを設定
<match apache.access>
    # 出力に out_file プラグインを指定
    type file
    # 出力先のファイルを指定
    path /var/log/td-agent/httpd/access.log
    # ファイル名に含める日時情報を指定
    time_slice_format %Y%m%d
    # ログファイルの更新後に旧ログファイルへのログ記録を継続する時間を指定
    time_slice_wait 10m
    # ログをgzip形式で圧縮
    compress gzip
</match>

このままだと /var/log/httpd ディレクトリのパーミッションエラーになってしまうので、/var/log/httpd ディレクトリに一般ユーザー実行権限を与えます。

sudo chmod o+x /var/log/httpd

設定は以上となるので、td-agent をリロードします。

$ /etc/init.d/td-agent reload

ブラウザで apache にアクセスした後に実際にログが保存されるか確認してみます。

$ ls /var/log/td-agent/httpd/
access.log.20151114.b524785e8e3b0d946

td-agent によってログが保存されたのが確認できました。

ログをMongoDBに保存

まずは MongoDB をインストールするのでレポジトリを追加します。

/etc/yum.repos.d/10gen.repo

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=0
enabled=1

yum インストールします。

sudo yum install mongo-10gen mongo-10gen-server

MongoDB を起動します。

sudo /etc/init.d/mongod start

自動起動の設定もしておきます。

sudo chkconfig mongod on

MongoDB にアクセスして fluentd という名前のデータベースを作成します

$ mongo

MongoDB shell version: 2.6.11
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user

> use fluentd

switched to db fluentd

> exit

MongoDB の設定はこれで完了したので、td-agent の設定を変更してログの出力先を MongoDBに変更しましょう。

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

<match apache.access>
    # 出力に out_mongo プラグインを指定
    type mongo
    # ホスト指定
    host localhost
    # ポート指定
    port 27017
    # データベースを指定
    database fluentd
    # Collectionを指定
    collection apache_access
    # Capped Collection 機能を利用する
    capped
    # Collection の上限サイズを 1G に設定
    capped_size 1024m
    # 10秒おきにログを MongoDB に flush する
    flush_interval 10s
</match>

td-agent をリロードして設定を反映させます。

sudo /etc/init.d/td-agent reload

それでは MongoDB にアクセスして『/』というパスへのアクセスのログ件数を確認することで、ログが MongoDB に保存されているか確認します。

$ mongo

MongoDB shell version: 2.6.11
connecting to: test

> use fluentd

switched to db fluentd

> db.apache_access.count({path: "/"});

23

ログが23件保存されているのが確認できました。

まとめ

Fluentd はリモートのサーバにログを送ることもでき、本番環境ではそのような構成になりますが、今回 fluentd の最低限の知識や基本的な設定はこれである程度学ぶことができたかと思います。
ここから先の細い設定などは公式サイトなどでさらに学習していきましょう!