Solaris のシステム管理 (第 2 巻)

アカウンティングレポート

この節では、アカウンティングソフトウェアによって生成される様々なレポートについて説明します。

日次アカウンティングレポート

runacct(1M) シェルスクリプトは、呼び出されるたびに基本的な 4 種類のレポートを生成します。これらのレポートは、接続アカウンティング、毎日のログイン別利用状況、日次および月次合計によって報告されるコマンド利用状況の 3 種類を対象とするレポートと、ユーザーの最後のログイン時刻のレポートです。4 つの基本レポートは次のとおりです。

表 32-2 日次アカウンティングレポート

レポートの種類 

説明 

日次レポート 

tty 番号別の回線の利用状況を示します

日次利用状況レポート 

ユーザー別のシステム資源の利用状況を示します。UID 順に表示されます 

日次コマンド要約 

コマンド別のシステム資源の利用状況を示します。使用したメモリーの大きさの降順に、つまりメモリーを最も多く使用したコマンドから先に表示されます。これらと同じ情報が月次コマンド要約では 1 ヶ月分について報告されます

最終ログインレポート 

各ユーザーが最後にログインした日付を示します。日付順に表示されます 

日次レポート

このレポートは、使用された各端末回線に関する情報を示します。次に例を示します。


Jul  7 02:30:02 1999  DAILY REPORT FOR mercury Page 1


from Wed Jul 07 02:30:02 1999
to   Thu Jul 08 02:30:02 1999
1       system boot
1       run-level 3
1       acctg on
1       runacct
1       acctcon

TOTAL DURATION IS 1384 MINUTES
LINE         MINUTES  PERCENT  # SESS  # ON  # OFF
/dev/pts/5   0        0        0       0     0   
/dev/pts/6   0        0        0       0     1   
/dev/pts/7   0        0        0       0     0   
console      1337     97       1       1     1   
pts/3        0        0        0       0     1   
pts/4        0        0        0       0     1   
pts/5        3        0        2       2     3   
pts/6        232      17       5       5     5   
pts/7        54       4        1       1     2   
pts/8        0        0        0       0     1   
pts/9        0        0        0       0     1   
TOTALS       1625     --       9       9     16

from および to 行はこのレポートで反映される時間帯、つまりこの前のアカウンティングレポートが生成されてから現在のアカウンティングレポートが生成されるまでの時間を指定します。その次はシステムのリブート、シャットダウン、電源異常からの回復と、acctwtmp プログラムによって /var/adm/wtmpx にダンプされたその他のすべてのレコードです。詳細は、acct(1M) のマニュアルページを参照してください。

このレポートの第 2 部は回線利用状況の内訳です。TOTAL DURATION は、システムがどれだけの時間マルチユーザーモード (端末回線を通してアクセス可能です) であったかを示します。この部分を構成しているカラムを表 32-3 で説明します。

表 32-3 日次レポート

カラム 

説明 

LINE

回線。端末回線またはアクセスポート 

MINUTES

回線使用分。アカウンティング期間を通じてこの回線が使用中であった合計分 

PERCENT

回線利用率。この回線が使用中であった MINUTES の合計値を TOTAL DURATION で割ったパーセント値

# SESS

セッション数。このポートが login セッション向けにアクセスされた回数 

# ON

ログイン回数。SESS と同じ。(このカラムにはそれ以上の意味はなし。ポートがユーザーのログインに使用された回数を表示する)

# OFF

ログアウト回数。このカラムは、この回線でユーザーがログアウトした回数と発生した割り込みを表す。割り込みは一般にシステムがマルチユーザーモードにされてから ttymon が初めて起動されたときに発生する。# OFF が大きな割合で # ON を上回る場合は、マルチプレクサ、モデム、ケーブルに障害があるか、どこかに接触の問題がある可能性がある。一番考えられる原因は、マルチプレクサからのケーブルの接続が外れたままになっていることである

マシンの稼動中は、/var/adm/wtmpx ファイルから接続アカウンティングが準備されるので、このファイルを監視する必要があります。wtmpx ファイルが急速に大きくなる場合は、acctcon -l file < /var/adm/wtmpx を実行してどの tty 回線の使用頻度が最も大きいかを調べてください。割り込みが頻繁に発生する場合は、全般的なシステムの性能が影響を受けることになります。さらに、wtmpx が壊れることもあります。この問題を解決するには、wtmpx ファイルを修復する方法」を参照してください。

日次利用状況レポート

このレポートは、システム資源の利用状況のユーザー別の内訳を示します。次に例を示します。


Jul  7 02:30:02 1999  DAILY USAGE REPORT FOR mercury Page 1
 
      LOGIN    CPU (MINS) KCORE-MINS  CONNECT (MINS) DISK  # OF  # OF # DISK FEE
UID   NAME   PRIME NPRIME PRIME NPRIME PRIME NPRIME  BLOCKS PROCS SESS SAMPLES
0     TOTAL  1     1      2017  717    785   840    660361  1067  9     7    20
0     root   1     1      1833  499    550   840    400443  408   2     1    0
1     daemon 0     0      0     0      0     0      400     0     0     1    0
2     bin    0     0      0     0      0     0      253942  0     0     1    0
3     sys    0     0      0     0      0     0      2       0     0     1    0
4     adm    0     0      46    83     0     0      104     280   0     1    0
5     uucp   0     0      74    133    0     0      1672    316   0     1    0
71    lp     0     0      0     2      0     0      3798    1     0     1    0
8198  ksm    0     0      8     0      0     0      0       6     1     0    0
52171 pjm    0     0      56    0      234   0      0       56    6     0    20

日次利用状況レポートで示される各データを表 32-4 で説明します。

表 32-4 日次利用状況レポート

カラム 

説明 

UID

ユーザー ID 番号 

LOGIN NAME

ユーザーのログイン名。複数のログイン名をもつユーザーを識別する 

CPU-MINS

CPU 使用時間 (分単位)。ユーザーのプロセスが CPU を使用した時間を表す。このカテゴリの情報は、PRIME (プライムタイム時間帯) と NPRIME (プライムタイム時間帯外) に分けられる。アカウンティングシステムのこれらのデータのバージョンは、/etc/acct/holidays ファイルに格納されている

KCORE-MINS

プロセスが実行中に使用する累積メモリー量を表す。表示される値は、毎分当たりに使用される K バイトメモリーセグメント数を表す。この計量値も PRIMENPRIME に分けられる

CONNECT-MINS

ユーザーがシステムにログインしていた時間を表す。「実時間」とも呼ぶ。PRIMENPRIME に分けられる。たとえば、この時間の値が大きく # OF PROCS の数値が小さい場合は、ログインの所有者がまず朝にログインし、その後はその日の終わりまで端末にほとんど触れていないと考えられる

DISK BLOCKS

ディスクブロック数。ディスクアカウンティングプログラムが実行された後は、出力が合計アカウンティングレコード (daytacct) にマージされ、このカラムに表示される。このディスクアカウンティングは acctdusg プログラムによってなされる。アカウンティングの目的ではブロックは 512 バイト

# OF PROCS

ユーザーが起動したプロセス数を表す。数値が大きい場合は、ユーザーのシェルプロシージャが制御できなくなった可能性がある 

# OF SESS

ユーザーがシステムにログインした回数 

# DISK SAMPLES

平均ディスクブロック数 (DISK BLOCKS) を得るためにディスクアカウンティングが何回実行されたかを示す

FEE

chargefee によってユーザーに課金される累積合計額を表す。使用されない場合が多い

日次コマンド要約

このレポートはコマンド別のシステム資源の利用状況を示します。このレポートでは、最も使用率の高いコマンドがわかり、それらコマンドがどのようにシステム資源を利用しているかに基づいて、どのようにしたらシステムの最適チューニングが可能かを知ることができます。日次レポートも月次レポートも見た目には同じですが、日次要約レポートは当日だけについてのレポートであるのに対して、月次要約レポートは、会計期の初めから当日までについてのレポートです。つまり、月次レポートは、monacct が最後に実行されたときからの累積データの累積要約を表します。

これらのレポートは TOTAL KCOREMIN によってソートされます。TOTAL KCOREMIN は任意の基準ですが、システムでのドレーンの計算にはすぐれた指標です。

次に日次コマンド要約レポートの例を示します。


Jul  7 02:30:02 1999  DAILY COMMAND SUMMARY Page 1

                                   TOTAL COMMAND SUMMARY
COMMAND NUMBER    TOTAL    TOTAL    TOTAL   MEAN    MEAN    HOG    CHARS  BLOCKS
NAME     CMDS  KCOREMIN  CPU-MIN  REAL-MIN  SIZE-K  CPU-MIN FACTOR TRNSFD   READ

TOTALS   1067   2730.99    2.01    1649.38 1361.41   0.00  0.00    6253571  2305
sendmail   28   1085.87    0.05      0.24  23865.20  0.00  0.19     101544    39
admintoo    3    397.68    0.12   1132.96  3443.12   0.04  0.00     680220    83 
sh        166    204.78    0.31    161.13  651.80    0.00  0.00     598158    20 
nroff      12    167.17    0.14      0.24  1205.55   0.01  0.59     709048    22 
find       10    151.27    0.27      2.72  563.40    0.03  0.10     877971  1580
acctdusg    3     87.40    0.13      2.74  698.29    0.04  0.05     883845   203 
lp         10     74.29    0.05      0.22  1397.38   0.01  0.24     136460    57 
expr       20     67.48    0.02      0.06  3213.24   0.00  0.34       6380     1 
mail.loc    3     65.83    0.01      0.04  11285.60  0.00  0.15      24709    15
cmdtool     1     37.65    0.02     20.13  2091.56   0.02  0.00     151296     1 
uudemon.  105     37.38    0.09      0.32  435.46    0.00  0.27      62130    17 
csh         6     35.17    0.05     57.28  756.30    0.01  0.00     209560    13 
col        12     31.12    0.06      0.26  523.00    0.00  0.23     309932     0 
ntpdate    22     27.55    0.05     11.18  599.00    0.00  0.00      22419     0 
uuxqt      44     18.66    0.04      0.06  417.79    0.00  0.74      32604     3 
man        12     15.11    0.03      7.05  503.67    0.00  0.00      85266    47
.  
. 
.

表 32-5 で、日次コマンド要約レポートに示されるデータをカラム別に説明します。

表 32-5 日次コマンド要約レポート

カラム 

説明 

COMMAND NAME

コマンド名。プロセスアカウンティングシステムではオブジェクトモジュールしか報告されないので、シェルプロシージャはすべて sh という名前で取り扱われる。 a.out または core と呼ばれるプログラム、またはその他の、適切とは思われない名前のプログラムの使用頻度を監視すると良い。acctcom を使用して、名前に疑問があるコマンドを誰が実行したか、スーパーユーザー特権が使用されたかどうかを知ることができる

NUMBER CMNDS

プライムタイム時間帯にこのコマンドが呼び出された回数 

TOTAL KCOREMIN

実行時の毎分当たりにプロセスが使用した K バイトメモリーセグメント数という計量値の累積合計 

TOTAL CPU-MIN:

このプログラムのプライムタイム時間帯の累積合計処理時間 

TOTAL REAL-MIN

このプログラムのプライムタイム時間帯の累積合計実時間 (壁掛け時計)。分単位 

MEAN SIZE-K

NUMBER CMDS で表される呼び出し回数に対する TOTAL KCOREMIN の平均

MEAN CPU-MIN

NUMBER CMDS に対する TOTAL CPU-MIN の平均

HOG FACTOR

合計 CPU 時間を経過時間で割った値。システム利用可能時間とシステム使用時間との比であり、プロセスがその実行中に消費する合計利用可能 CPU 時間の相対値を示す 

CHARS TRNSFD

読み取りおよび書き込みシステムコールによってプッシュされた文字数の合計カウント。オーバフローのために負の値になることがある 

BLOCKS READ

プロセスが実行した物理ブロックの読み取りおよび書き込みの合計カウント

月次コマンド要約

この月次コマンド要約は、次のただ 1 点の相違を除いて日次コマンド要約と同じです。つまり、月次コマンド要約は monacct が最後に起動されたときからの累積合計を示します。次に例を示します。


Jul  6 02:30:03 1999  MONTHLY TOTAL COMMAND SUMMARY Page 1

                                     TOTAL COMMAND SUMMARY
COMMAND NUMBER     TOTAL    TOTAL     TOTAL   MEAN   MEAN   HOG    CHARS  BLOCKS
NAME      CMDS  KCOREMIN   CPU-MIN REAL-MIN SIZE-K CPU-MIN FACTOR TRNSFD   READ

TOTALS     771    483.70   0.94    8984.09  515.12   0.00  0.00   2248299   179 

sh         105    155.41   0.23     429.58  667.94   0.00  0.00    491870     1 
uudemon.    85     29.39   0.07       0.29  434.28   0.00  0.23     49630    14 
acctcms      5     27.21   0.04       0.04  752.41   0.01  0.90    218880     1 
ntpdate     17     21.30   0.04      14.10  605.73   0.00  0.00     18192     0 
dtpad        1     19.69   0.01      10.87 2072.70   0.01  0.00     46992     8 
sendmail    17     16.75   0.02       0.02  859.04   0.00  0.91     1965      0 
acctprc      1     14.92   0.03       0.03  552.69   0.03  0.95    115584     0 
uuxqt       34     14.78   0.03       0.04  426.29   0.00  0.92     25194     0 
uusched     34     10.96   0.03       0.03  363.25   0.00  0.91     25194     0 
sed         40     10.15   0.03       0.09  315.50   0.00  0.36     64162     2 
man          5     10.08   0.02      57.58  555.05   0.00  0.00     25773     2 
getent       1      7.68   0.01       0.02  921.60   0.01  0.40     20136     0 
in.rlogi     5      7.65   0.01    4331.67  611.73   0.00  0.00     87440     0 
cp          37      7.28   0.03       0.05  280.08   0.00  0.50     1739     36 
date        27      7.24   0.02       0.03  329.12   0.00  0.65     23443     1 
ls          15      7.05   0.01       0.02  503.33   0.00  0.79     14123     0 
awk         19      6.94   0.02       0.06  372.04   0.00  0.32       666     0 
rm          29      6.83   0.02       0.04  301.32   0.00  0.60      2348    17

各データ項目については、「日次コマンド要約」を参照してください。

最終ログインレポート

このレポートは、特定のログインが最後に使用された日付を示します。この情報を使用して、使用されていないログインやログインディレクトリを見つけることができます。それらのログインやログインディレクトリは保存して削除できます。次に例を示します。


Jul  7 02:30:03 1999  LAST LOGIN Page 1  
. 
.  
.
00-00-00  arimmer       00-00-00  lister        99-06-27  pjm
00-00-00  reception     00-00-00  smithe        99-06-27  ksm
00-00-00  release       00-00-00  smsc          99-06-27  root
00-00-00  resch         00-00-00  datab

acctcom による pacct ファイルの確認

/var/adm/pacctn ファイル、または acct.h 形式の任意のファイルの内容は、acctcom プログラムを使用していつでも調べることができます。このコマンドを実行するときに、ファイルも標準入力も指定しなければ、acctcompacct ファイルを読み取ります。acctcom は、終了したプロセスに関する情報を示します (実行中のプロセスは ps コマンドで調べることができます)。acctcom のデフォルト出力は次に示す情報を示します。

acctcom にオプションを使用することにより、次の情報を得ることができます。

表 32-6acctcom のオプションを説明します。

表 32-6 acctcom のオプション

オプション 

説明 

-a

選択したプロセスに関する特定の平均統計を表示する (統計は出力が記録された後に表示される) 

-b

 

ファイルを逆読みし、最後のコマンドから先に表示する (標準入力の読み込みには関係しない) 

-f

fork/exec フラグおよびシステム終了状態カラムを出力する (出力は 8 進数)

-h

平均メモリーサイズに代えて hog 係数を表示する。hog 係数は、経過時間とプロセスが実行中に消費した合計 CPU 利用可能時間との比 (合計 CPU 利用時間/経過時間) 

-i

入出力カウントを含むカラムを出力する 

-k

メモリーサイズの代わりに、キロバイト/分ごとのコアサイズの合計値を表示する 

-m

平均コアサイズ (デフォルト) を表示する 

-q

平均統計だけを出力する。出力レコードは出力しない 

-r

CPU 係数 (システム使用時間 / (システム使用時間 + ユーザー使用時間)) を表示する 

-t

システムおよびユーザー CPU 時間を表示する 

-v

出力からカラム見出しを除外する 

-C sec

合計 (システム + ユーザー) CPU 時間が sec 秒を超えたプロセスだけを表示する

-e time

time 以前に存在したプロセスを hr[:min[:sec]] の書式で表示する

-E time

time 以前に開始されたプロセスを hr[:min[:sec]] の書式で表示する。同じ time-S-E の両方に使用すれば、そのときに存在していたプロセスを表示する

-g group

group に属しているプロセスだけを表示する

-H factor

factor を超えるプロセスだけを表示する。ただし、factor は「hog 係数」(-h オプションを参照)

-I chars

chars によって指定されるカットオフ数を超える文字数を転送したプロセスだけを表示する

-l line

端末 /dev/line に属しているプロセスだけを表示する

-n pattern

pattern+」が 1 回以上現れることを意味する以外は、一般的な正規表現に一致するコマンドだけを表示する

-o ofile

レコードを出力しないで、レコードを acct.h 形式で ofile にコピーする

-O sec

CPU システム時間が sec 秒を超えるプロセスだけを表示する

-s time

time 以後に存在したプロセスを hr[:min[:sec]] の書式で表示する

-S time

time 以後に開始されたプロセスを hr[:min[:sec]] の書式で表示する

-u user

user に属しているプロセスだけを表示する

runacct プログラム

メインの日次アカウンティングシェルスクリプトである runacct は、通常はプライムタイムつまり最も忙しい時間帯を避けて cron により起動されます。この runacct シェルスクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。さらに、課金目的で prdailymonacct が使用する日次および累積要約ファイルも準備します。

runacct シェルスクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct が起動し直せるように処理を完了しようとします。runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。(runacct が使用するファイルは、特にことわりのないかぎり、ディレクトリ /var/adm/acct/nite にあります。) runacct の実行中、すべての診断出力は fd2log に書き込まれます。

runacct は起動されると locklock1 というファイルを作成します。これらのファイルは、runacct が同時に実行されるのを防ぎます。runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。lastdate ファイルには runacct が最後に起動されたときの月日が入っており、このファイルは runacct を 1 日に 1 回しか実行できないようにするために使用されます。runacct がエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが rootadm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。runacct を再び起動する手順については、runacct を再起動する方法」を参照してください。

runacct を再起動可能にするために、処理は再入可能な別々の状態に分割されます。statefile というファイルを使用して、最後に終了した状態が追跡されます。各状態が終了するたびに、statefile は更新されて次の状態に反映されます。1 つの状態の処理が終了すると、statefile が読み取られて次の状態が処理されます。runacct は、CLEANUP 状態に達すると、ロックを解除して実行を終了します。各状態は表 32-7 に示すように実行されます。

表 32-7 runacct 状態

状態 

説明 

SETUP

turnacct switch コマンドが実行されて新しい pacct ファイルが作成される。/var/adm/pacctn 内の (pacct ファイル以外の) プロセスアカウンティングファイルが /var/adm/Spacctn.MMDD に移される。/var/adm/wtmpx ファイルは (最後に現在時のレコードが追加されて) /var/adm/acct/nite/wtmp.MMDD に移され、新しい /var/adm/wtmp が作成される。closewtmputmp2wtmp は、現在ログインしているユーザーに課金処理を行うため、wtmp.MMDD と新しい wtmpx にレコードを追加する

WTMPFIX

wtmpfix プログラムが nite ディレクトリ内の wtmp.MMDD ファイルを調べて誤りがないか確認する。データの変更によっては、acctcon を失敗させることがあるので、wtmpx ファイルに日付変更のレコードが現れた場合は、wtmpfix は関係するタイムスタンプを調整しようとする。さらに、wtmpx ファイルからのエントリが壊れていた場合、壊れたエントリをすべて削除する。問題が解決された後のバージョンの wtmp.MMDDtmpwtmp に書き込まれる

CONNECT

acctcon プログラムが使用されて、ctacct.MMDD ファイルに接続アカウントレコードが記録される。これらのレコードは tacct.h 形式になっている。acctcon は、さらに lineuse および reboots ファイルを作成する。reboots ファイルは、wtmpx ファイルで見つかったすべてのブートレコードを記録する

PROCESS

acctprc プログラムを使用して、プロセス課金ファイル /var/adm/Spacctn.MMDDptacctn.MMDD の合計アカウントレコードに変換される。runacct が失敗した場合に、Spacct ファイルが処理されないように、Spacct ファイルと ptacct ファイルは番号で照合される

MERGE

acctmerg プログラムが、プロセスアカウントレコードを接続アカウントレコードとマージして daytacct を作成する

FEES

acctmerg プログラムが、fee ファイルからの ASCII tacct レコードを daytacct にマージする

DISK

dodisk プロシージャが実行されて disktacct ファイルが生成されている場合は、DISK プログラムがこのファイルを daytacct にマージし、disktacct/tmp/disktacct.MMDD に移す

MERGETACCT

acctmerg プログラムが、daytacct を累積合計課金ファイルである sum/tacct とマージする。daytacct が毎日 sum/tacct.MMDD に保存される。したがって、sum/tacct は壊れたり失われたりしても、作成し直すことができる

CMS

acctcms プログラムが数回実行される。acctcms は、まず Spacctn ファイルを使用してコマンド要約を生成し、sum/daycms に書き込む。次に、sum/daycms を累積コマンド要約ファイル sum/cms とマージする。そして、最後に、sum/daycms および sum/cms ファイルからそれぞれ ASCII のコマンド要約ファイル nite/daycmsnite/cms を生成する。lastlogin プログラムを使用してログファイル /var/adm/acct/sum/loginlog が作成される。これは、各ユーザーが最後にログインした時刻を示すレポートである。(runacct が真夜中を過ぎてから実行された場合は、いずれかのユーザーが最後にログインした時刻を示す日付が 1 日分狂うことになる)

USEREXIT

インストールに依存しない任意の (ローカル) 課金プログラムをこの時点で取り入れることができる。runacct はそのプログラムを /usr/lib/acct/runacct.local と想定する

CLEANUP

一時ファイルが整理され、prdaily が実行され、その出力が sum/rpt.MMDD に保存され、ロックが解除され終了する


注意 - 注意 -

runacctCLEANUP 状態で起動し直すときは、最後の ptacct ファイルが不完全であるため、このファイルを削除してください。