概要
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 の方がイイと思った