slony-Iのログ運用を試してみたよ

長い間、見て見ぬふりをしていたslony-Iのログでしたが、そろそろ自動で何とかしようかと。
思いたったが吉日。早速、試してみました。

先ず現在は手動で

  1. slonデーモンを再起動
  2. 不必要なログを削除

というなんともお粗末なことをしていました。

一度、logrotate.dを試してみましたが、巧くいかず断念。。。
6. Slony-I Maintenance には、apacheのrotatelogsのようなもの使っちゃいなよ!って書いてあるけど、そもそもapache入ってないですお。。。

ということで、今回は別の方法でアプローチを。

コマンド場所の確認

$ which slon_start
 /usr/local/slony1/bin/slon_start

slonデーモンを再起動すると、ログファイルが新しく作られることは知っていたので、

$ /usr/local/slony1/bin/slon_kill
$ /usr/local/slony1/bin/slon_start node no

でログ出力が新しいファイルとなります。

で、1つのシェルスクリプトに。
$ vi rotate_slon_log.sh

/bin/sh

# 引数 $1 は slon_start のnode引数です
# レプリケーションデーモンストップ
/usr/local/slony1/bin/slon_kill $i
# レプリケーションデーモンスタート(新しいログファイルが出来ます)
/usr/local/slony1/bin/slon_start $1

実行する時は、
$ rotate_slon_log.sh 1
のように使います。

私の場合は、ローテートしたファイルを圧縮する処理を追加しました。

/bin/sh

# arg $1 is node no
# stop replication log
/usr/local/slony1/bin/slon_kill $i
# 今まで使っていたログをgzipで圧縮
find /slon_log_dir -name "*.log" |xargs gzip
# create new log file
/usr/local/slony1/bin/slon_start $1

これを実行。
$ rotate_slon_log.sh 1
$ ll

ry) log-yyyy-mm-dd_hh:mi:ss.log.gz
ry) log-2012-02-27_15:53:50.log

をうまくいったようです。

これをcronへ登録

# テストの為、営業時間中に設定
0 14 * * *  /bin/sh /script_path/rotate_slon_log.sh [node]

とりあえず、これで様子を見てみます。