webネタ

Webエンジニアが業務に関係することをメモしていく

Fluentdまとめ

Fluentdとは?

ログを収集・集約するruby製のミドルウェアです。いままではrsyncやscpでログを全サーバーから回収したりしてたと思いますが、fluentdを使えば便利に色んな方法でログを集めることができます。

仕組み

Fluentdは、Input・Buffere・Outputというモジュールで構成されています。

  • Input
    • ログファイル・TCP・UNIXドメインソケット等で受け取ります。
  • Buffer
    • 受け取ったログを一時的に保管しておくところです。ファイルに保管するかメモリに保管するか選べます。
  • Outputは
    • Bufferに積まれたログをファイル・MySQL・HBase・MongoDBなどに書いたりします。別サーバーのFluentdに渡すこともできます。

概念図

f:id:R-H:20130224124122p:plain

インストール

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かからない。

非同期で書くのでかなり速い。

情報

まとめ

きっとこれからは各種ログ(/var/log)はFluentdで収集するようになるんだろうなぁと。

グラフ化もGrowthForecastで簡単にできるので、データの見える化が簡単にできますね。

Hbaseへ複雑に書く場合は、rubyだとHbaseのjarを呼んだりしないといけないので同じログ収集ツールであるJava製のFlumeを使うといいです。