RIGHT:[[Linux 関係覚え書き]]
*acct パッケージ
psacct パッケージが入っていれば,acct は使える.
-psacct-6.3.2-27
# chkconfig psacct on
*コマンド
**ac
ac コマンドで,ユーザのコネクトタイム(時間単位)が表示できる.
このコマンドは wtmp を見ている.
ユーザ毎のトータル接続時間を表示(月一ぐらいで集計すればいい)
# ac -pa
**sa
sa コマンドで,コマンドの実行時間を集計できる.
このコマンドは,/var/account/pacct を見ている.
ユーザ毎のプロセス数と CPU 実行時間
# sudo /usr/sbin/sa -m
ユーザ名 プロセス数 CPU タイム(system + user time) CPU リアルタイム プロセス毎の I/O の平均回数 CPU コア平均タイム
# info accounting
-----------------------
*logrotate との組み合わせ
上記,各コマンドは参照するログファイルと logrotate との
関係を調整し,月ごとの集計がとれるとうれしい.
以下,RHEL3 でのお話.
/var/log/wtmp については /etc/logrotate.conf 内で
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
となっている.
つまり,1ヶ月に一度ローテーションし,1個分のファイルを残すように
なっている.
これはこれでヨサゲ.
強いていうなら,
rotate 12
にするのと,
compress
をはずすぐらいか.
/var/account/pacct については,/etc/logrotate.d/psacct 内で,
/var/account/pacct {
prerotate
/usr/sbin/accton
endscript
compress
notifempty
daily
rotate 31
create 0600 root root
postrotate
/usr/sbin/accton /var/account/pacct
endscript
}
となっている.
つまり,毎日ローテーションし,31個(つまりアバウトな 1ヶ月)分の
ファイルを残す.
その前後で pacct を OFF(/usr/sbin/acct を引数なしで実行すると OFF)/ON
している.
これを
/var/account/pacct {
prerotate
/usr/sbin/accton
endscript
notifempty
monthly
rotate 12
create 0600 root root
postrotate
/usr/sbin/accton /var/account/pacct
endscript
}
といった感じに変更すればいい.
で,集計コマンド.
毎月安全を見て 2日(もしくは 1日の夜,もしくは /etc/cron.monthly/ に
辞書的に後ろの方な名前でスクリプトを組んでおく)に動かす
#!/bin/sh
# これは,GNU の date コマンド(Shell Util)でのみ実行可能だろう
LAST_MONTH=`date --date '1 month ago' +%Y%m`
ac -pa -f /var/log/wtmp.1 > /var/account/sessionlog.${LAST_MONTH}
/usr/sbin/sa -m /var/account/pacct.1 > /var/account/cpulog.${LAST_MONTH}