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}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS