概要
logstashで複数のホストからログを収集する手順を試してみる- 複数ホストから収集する場合に
redisをbroker(ブローカー = 仲買人)として利用されている fluentdからRedisを扱う場合の参考にする
あらためて構成を確認する

それぞれの役割を整理してみる。
| 名前(上図) | 役割 | メモ |
|---|---|---|
| shipper | broker にログを送る | 意味として荷主 |
| broker | shipper から送られたログを一時的に保管、選別し indexer に渡す | 意味として荷仲介人、ここで Redis が使われる |
| indexer | broker から渡されたログを elasticsearch や storage に渡す |
検索エンジンとしては Elasticesearch が使われる。また、Storage としては Plugin を見ると Amazon S3 等も利用出来る。
試す
※上記の shipper や indexer 、WebUI ごとに Java のインスタンスを起動しなければいけないので、メモリをあまり積めない仮想マシンだとちょっち辛いかも。
shipper
サーバー上でログを収集するエージェント的な役割を担う。
設定ファイル
起動
java -jar logstash-1.2.1-flatjar.jar agent -f mylogstash.conf
indexer の設定
broker から送られたログを elasticsearch に渡す為に redis-server からログを取り出す。
設定ファイル
起動
java -jar logstash-1.2.1-flatjar.jar agent -f indexer.conf
WebUI
WebUI も個別のインスタンスとして起動する。引数に web を渡せばイイみたい。
起動
java -jar logstash-1.2.1-flatjar.jar web
特に代わり映えのしない画面。

broker としての redis について
redis にはどのようにレコードが登録されているのか?
shipper の設定の中で data_type => "list" と設定され LIST 型 で登録されている。登録に関しては RPUSH を利用しているみたい。ただ、redis-cli で覗いてもキーが全く登録されていないので本当に redis を使っているのか疑問に思ったので MONITOR してみた。
MONITOR で確認してみる

あくまでもキャッシュ的(またはキュー的)な使い方をしているようでログを indexer に渡した後はキーを削除するような挙動。
ということで
- 思ったりよりも簡単に
logstashでログの集中管理を試すことが出来た - 検証した環境はホスト 1 台で
shipperとindexerを動かしていたが、実際に複数台で行う場合にはshipperを追加することになる - プラグイン等をもう少し試していきたい
fluentd と比較してみて
- kibana3 が同梱されていてすぐに可視化出来る環境が整っているところがイイと思った
- ログの収集に logstash 以外の技術(redis)が必要になってしまうところがイケてないとおもった
- logstash は Java で fluentd は Ruby とどちらも土台となる実行環境を用意する必要があるが、Java よりは Ruby の方がイイと思った