たごもりすメモ

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

Webサーバ勉強会#3に参加してきたよ&しゃべってきたよ

震災の影響で日程が変わって行けるようになったけど定員ぴったりだなー、と思ったら枠が増えたので参加してきた。なんと全員発表ということだったので、2日前からネタを急遽考えはじめる始末。結局昔のネタを掘り出して、最近の状況をちょっとまとめてきました。
会場の某サイバーでエージェントな会社さん、ありがたいんですけど、とりあえずプロジェクタにMacを繋げたときの挙動をもうちょっとどうにかするか、でっかく「Macは640x480 75Hzで繋げ」と書いておいてくださいw

はるか昔のエントリが参考w: 既知の問題およびHowToまとめ - tagomorisのメモ置き場
最近の事情とかはちょっと調べた内容がせっかくあるので、あとでまとめエントリを別途起こす予定。*1

あれこれ話を聞いたけど mod_rewrite はやっぱり苦労の種だなーというか、なんというか。実は最低限使うだけで割と逃げ回ってるので、へえって話も多くて面白かった。まさか正規表現拡張正規表現が使えるとは。
あと mod_security とやらの話だけど、あんだけルールが複雑で巨大でメンテ不可能そうなのはちょっと……。ないわー……。どうなんですかね。

懇親会であっちの会社とかこっちの会社とかの話を聞いたり、あんな技術やこんな技術の話をしたり。これも大変楽しかった。次回以降も普通に開催されそうなのでがんがん参加したい。

*1:5/2 と思ったが需要が微妙な気がしたし自分がそもそも嬉しくないのでやっぱやめた。

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

まあ実際のコード自体はずいぶん前に書き上がってて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 やってる場合にはうまくいかないケースがあると思う。