Fluentdまとめ
Fluentdとは?
ログを収集・集約するruby製のミドルウェアです。いままではrsyncやscpでログを全サーバーから回収したりしてたと思いますが、fluentdを使えば便利に色んな方法でログを集めることができます。
仕組み
Fluentdは、Input・Buffere・Outputというモジュールで構成されています。
- Input
- ログファイル・TCP・UNIXドメインソケット等で受け取ります。
- Buffer
- 受け取ったログを一時的に保管しておくところです。ファイルに保管するかメモリに保管するか選べます。
- Outputは
- Bufferに積まれたログをファイル・MySQL・HBase・MongoDBなどに書いたりします。別サーバーのFluentdに渡すこともできます。
概念図
インストール
yumリポジトリ設定
vi /etc/yum.repos.d/td.repo cat /etc/yum.repos.d/td.repo [treasuredata] name=TreasureData baseurl=http://packages.treasure-data.com/redhat/$basearch gpgcheck=0
インストール
yum install td-agent
準備
mkdir /var/log/fluent chown td-agent:td-agent /var/log/fluent
起動
service td-agent start
送信側サーバー
vi /etc/td-agent/td-agent.conf <source> type forward # TCPで受け取る指定 tag app.file # ここのtagが<mtach>で使われる </source> <match app.file> type forward host 192.168.56.101 # 集約サーバーのhost flush_interval 1s </match>
受信側サーバー
vi /etc/td-agent/td-agent.conf <source> type forward # 送信側サーバーから受け取る(TCP)指定 tag app.file </source> <match app.file> type file # ファイルに書く指定 path /tmp/fluentoo.log </match>
気をつけるパラメータ
buffer_chunk_limit buffer_queue_limit
chunkにログがたまります。
queueにchunkがたまります。
以下の設定だと、2Gなのでサーバーのメモリはそれ以下にしないといけない。
buffer_chunk_limit 8m buffer_queue_limit 256 8MB * 256個 = 2048MB
パフォーマンス
てきとうにVM1からVM2に書くだけのシンプルな環境で計測してみた。
どっちのVMも2coreのメモリ4GのCentOS6。
- 1ログ100Byteを100万回書いた。
- 10,000QPSくらいでた。
- 1書き込み1msもかからない。
- 1ログ30KBを5万回書いた。
- 1500QPSほど。
- 1書き込み1msかからない。
非同期で書くのでかなり速い。
情報
- http://www.slideshare.net/hotchpotch/20120204fluent-logging
- http://www.slideshare.net/tagomoris/oss-nhntech
- http://www.slideshare.net/baguzy/fluentd-meetup-2-14073930
- http://d.hatena.ne.jp/mikeda/20120704/1341363870
http://docs.fluentd.org/articles/quickstart
- ここのチャットで、日本語で気軽にFluentd開発者に質問できます。
まとめ
きっとこれからは各種ログ(/var/log)はFluentdで収集するようになるんだろうなぁと。
グラフ化もGrowthForecastで簡単にできるので、データの見える化が簡単にできますね。
Hbaseへ複雑に書く場合は、rubyだとHbaseのjarを呼んだりしないといけないので同じログ収集ツールであるJava製のFlumeを使うといいです。