no-image

CentOS 5.5にfluent入れる時はソースから入れると良い

社内で使ってる自前で作ったBlackboxというイベントログ収集ツールがある。複数台のフロントサーバで起こるイベントを記録して、バックエンドサーバにあるmysqlに集約するんだけど、集約部分はcronでrsyncなのでリアルタイムではない。
これをfluentを使ってリアルタイムに集約。mongodbに保存する形に変更したんだけど、fluentがあまりに使いやすくて感動した。

で、本題。fluentのインストール方法はたくさんある。一番楽なのは、gemコマンドを使ったインストールで、

$ sudo gem install fluent

というコマンドを入力するだけで、あとは全部よろしくやってくれる。

ただこれがうまくいくのは、rubyのバージョンが1.9.2以上である場合の話。
さくらのVPSやGMOアプリクラウドにデフォルトで入ってるCentOSのバージョンは5.5で、それらにインストールされているrubyのバージョンは1.8系だ。
CentOS5.5の上でruby-1.9を入れる場合、まず1.8系を削除してソースを拾ってきてmakeするのが簡単だが、検証環境のサーバの1つに1.8系でredmineが動いており、安易に1.8系を削除するわけにはいかなかった。
redmineに触らずにfluentを動かすにはrvmを入れるのが手っ取り早そうと考える一方で、「おいおい俺はruby-1.9が使いたいんじゃないfluentが使いたいんだよ全部のサーバにrvm入れるとか面倒だよ勘弁してくれよ権限はどうするんだrootでrvm入れるのか?rvm自体の学習も必要?だいたいgemのパッケージバージョンコントロールとかどうするの?あーやる気なくなってきたわこれだからCentOSはRubyプロダクトはうんたらかんたら」と思っていたら、

ちなみに./configure && make installは専用の ruby と fluent-gem (専用のrubyのgemへのリンク)をインストールしてくれます。
http://twitter.com/frsyuki/status/119407973180260352

というツイートを発見してソースからconfigure & make installしてみたら、わざわざrvm入れたりしなくてもすんなりとfluentが動きました。(サラっと動いてしまうけど、これかなりすごい事だと思う)

一度動いてしまったあとは、

$ sudo fluent-gem install fluent

と入力するだけでfluentのアップデートができたり、プラグインをダウンロードできたりします。fluent-gemコマンドは、fluent専用のruby-1.9の上で動くfluent専用のgemをコントロールするコマンドなので、例えばこのコマンドでmessagepackをupdateしても、元々入ってるgemパッケージの方には影響を与える事はありません。

というわけで、fluentはソースからインストールする事で、良い意味で、Rubyプロダクトという事を意識しなくて良いようになっています。たくさんの環境で手間なく動くという事はとても重要な事です。
一度動く所まで持っていく事ができれば、あとはデフォルトで用意されているプラグインだけで簡単なログ収集ができるのも良いです。

PHPからも非常に簡単に扱う事ができるようになっていますので、時間のある時にそのあたりの話も書きたいと思います。