読者です 読者をやめる 読者になる 読者になる

たごもりすメモ

コードとかその他の話とか。

簡単にscribedにログを転送するためのエージェント scribeline を作った

scribe

まあ実際のコード自体はずいぶん前に書き上がっててGitHubにあったんだけど。

tagomoris/scribe_line · GitHub

何で作ったの

scribedはログ収集サーバとしてはグッドなんだけど、なぜかエージェント側、ログを送出する側のコード例が極めて貧弱で、たとえば俺はいますぐApacheのログをscribedに送り付けたいんだ! というときにどうしたらいいのかがよくわからない。というか簡単な方法が世の中に転がっていないように見える。
ので、しょうがないから作った。

ついでにデフォルト設定ファイルを読むようにしたりとか、各ログファイルの転送を一発で開始/終了できるようにしたりとか、接続先の scribed が死んだらセカンダリサーバに接続をフェイルオーバできるようにしたりとか、してある。前に 障害に強いscribeサーバ構成と設定 - tagomorisのメモ置き場 で書いた設定のサーバに対して使うような感じ。*1
対象のファイルが rotate されても新しい方を開き直すようにしてあるので、普通のApacheのログ設定で動いているところにそのまま適用できるはず。*2

あとは配布をラクにするためにrpm化が必須だったので spec も書いてある。リポジトリにあるので、使いたい人は使うと良いかも。

どういうものなの

scribed はどっかに立ってるとして、ログの送出側ホストで、とりあえずインストール。

# rpmの作りかたはREADMEに書いてあるから頑張れ!
$ rpm -i scribeline-1.1-original.x86_64.rpm
# もしくは社内yumサーバとかある人はそっちに置いてyum
$ yum install scribeline

設定ファイル /etc/scribeline.conf を適当にいじる。

RUN="true" # デフォルトは false なんで、trueに変えること

# SERVERNAME[:PORTNUM]
# port number is optional.
PRIMARY_SERVER="scribe-deliver.local:1463"

# secondary server setting is optional...
SECONDARY_SERVER="scribe-central.local:1463"

LOGS=$(cat <<"EOF"
# カテゴリ ログのパス の順
serviceX     /var/log/apache2/servicex.access.log
servicey     /var/log/apache2/servicey.access.log
EOF
)

できたら、起動する。

$ sudo /etc/init.d/scribeline start

これで LOGS に書いたパスのログが追記されるたびに scribed に送られる。止めたくなったら stop すればいいし、設定ファイルを書き換えたら restart すればいい。
まあ、これでそれなりに簡単に使えるようになったんじゃないかなー。

*1:PRIMARYがdeliver、SECONDARYがcentral

*2:いっぽう rotatelogs やってる場合にはうまくいかないケースがあると思う。