昨日に引き続きましてsambaサーバからsyslog経由で収集したログをどうやって保存していくか、という点についてご報告します。
今日は月次処理をしてみたいと思います。
昨日もそうですが、ほぼほぼ自分の備忘録みたいになっています。
ログの蓄積
昨日「(1/2)sambaサーバの監視ログを切り出す」まででログを共有フォルダにコピーするような処理をcronに設定しました。
ここまでが実行されていれば、指定のフォルダにログファイルがどんどん蓄積していきます。ですが、毎日ログファイルを蓄積していると、1カ月で30ファイル、2カ月で60ファイル…という具合に1年で365ファイルがフォルダ内に生成されることになってしまいます。
それでもファイル名に日付を入れているのでそれほど問題にはならないかもしれませんが、やはり1フォルダに保管するファイルはある程度の数に留めておくに越したことはありません。1フォルダに格納するファイル数が増えてくるとフォルダにアクセスするだけで時間が掛かるようになってしまいますのであまり快適ではありませんし。
ということで、ちょっと月次で整理するようにしてみます。
月次の整理
シェルにするとこのような感じです。
----------------------------------------------
#!/bin/sh
##/home/samba/share/audit-log/の整理をする
##
logdir=/home/samba/share/audit-log
Kongetsu=`date +'%Y-%m-01'`
Sengetsu=`date -d "${Kongetsu} 1 month ago" +'%Y-%m'`
mkdir $logdir/$Sengetsu
mv $logdir/*.log $logdir/$Sengetsu
----------------------------------------------
今の月を導くためにdateコマンドを使っています。これを次の行で使うためにKongetsuという変数名に代入します。
代入されたKongetsu変数をさらにdateコマンドで前の月の文字列を生成しSengetsuという変数名に代入します。
変数名Sengetsuをディレクトリ名として、mkdirコマンドでフォルダを生成します。
mkdirで作成した$Sengetsuディレクトリ内に、ログファイルを補完しているカレントディレクトリ上の.logファイルを全部移動してしまいます。
あとはこのシェルを「/opt/smblogarchive.sh」という具合にシェル化したものをcronで設定してしまいます。
----------------------------------------------
0 7 1 * * /opt/smblogarchive.sh
----------------------------------------------
てな具合に設定してしまいます。この設定だと、毎月1日の午前7時にこのシェルを実行するようになります。
例えば2017年の2月1日に実行された場合には、Sengetsuフォルダは「2017-01」という名称でディレクトリが作成され、そのディレクトリ内に2017年1月分のログが全部移動することになります。「(1/2)sambaサーバの監視ログを切り出す」で設定したログ移動を共有フォルダにコピーするシェルがAM6:00に動作するので毎月1日のAM7:00であれば前月のログだけがログ保管フォルダに入っていることになります。
そのため前月を表す「2017-01」という名称のフォルダを作成することができますし、そこに移動するのは「*.log」で指定したとしても1月(先月)分のログファイルだけが異動対象になることになります。
これなら…
これなら1フォルダには最大31ファイル迄しか保管されることはなくなりますし、1年放っておいたとしても12か月分のフォルダしか生成されません。
ファイル単位で言えば1フォルダ毎31ファイル、大元の(上流)フォルダには1年でも12フォルダ+31ファイルしか保管されないので表示にそれほど時間が掛かることもありますまい。