2010年2月3日水曜日

LinuxTIPS

操作ログについて、クライアントPC側だけでなく、
サーバ側にも着目すべきですが、Linux/UNIX 上でコマンドの実行履歴、
MySQLのクエリログの記録についてです。

findを用いたファイル操作も追記しました。

①Linux/UNIX 上でコマンドの実行履歴を残す方法
http://www.drk7.jp/MT/archives/000988.html

~/.bash_historyをバックアップする方法もありますが、
scriptコマンドを利用した以下のシェルを、/etc/profileに追記する事で
ログインする毎に、ログを残す事が可能です。

## loggin ----------
now=`date +%Y%m%d%H%M%S`
user=`whoami`
logfile=/tmp/log/script_logs/$user/$now

if [ ! -e /tmp/log/script_logs/$user ]
then
mkdir /tmp/log/script_logs/$user
fi
if [ -e $logfile ]
then
mv -f $logfile $logfile.bak
fi
p_proc=`ps -ef|grep $PPID|grep bash|awk '{print $8}'`
if [ "$p_proc" = -bash ]
then
script $logfile
exit
fi"

ついでですが、日付で判断して、ファイルを削除する事が可能です。

#/tmp/log/script_logs/*/を対象に、50日より前のファイルを削除します。
find /tmp/log/script_logs/*/* -mtime -50 -name "*" | xargs rm -f

これをCRONに登録する事で、ファイルの肥大を防ぐことが可能です。
logrotateよりも、更新日付、サイズで判断する場合は、該当のほうが適切。

②MySQLのクエリログを残す方法
http://centossrv.com/bbshtml/webpatio/978.shtml

my.cnfに
log=/usr/local/mysql/var/myquery.log  ← 追加するだけ。

ついでですが、サイズで判断して、ファイルを削除する事が可能です。

#/usr/local/mysql/var/*.logを対象に、サイズ100000000バイト(100MB)を超えた場合に空のファイルを作成する
find /usr/local/mysql/var/ -size +100000000c -name "*.log" | :> /usr/local/mysql/var/mysqlquery.log

0 件のコメント:

コメントを投稿