Oracle Solaris OS のシステムアカウンティングソフトウェアは、ユーザー接続時間、プロセスに使用された CPU 時間、およびディスク使用量についてのデータを収集および記録できるプログラム群です。一度このデータを収集すると、レポートを生成したり、システム使用に対して課金したりすることができます。
システムアカウンティングは、日次または月次ベースで使用できます。また、ユーザー単位のディスク使用量を追跡することもできます。
アカウンティングプログラムを使用すると、次の作業を行うことができます。
システムの使用状況の監視
パフォーマンス上の問題の追跡と解決
システムセキュリティーの維持
システムアカウンティングプログラムは、設定が済むと、ほとんどの場合自動的に実行されます。
自動アカウンティングは、まずアカウンティング起動スクリプトをルートの crontab ファイルに配置することによって設定します。すると、アカウンティング起動スクリプトが、cron コマンドによって自動的に起動されます。
次の概要は、システムアカウンティングのプロセスを示したものです。
システムを起動してからシャットダウンするまでの間に、システムの利用に関する (ユーザーログイン、実行されたプロセス、データの格納などの) raw データがアカウンティングファイルに収集されます。
定期的に (通常 1 日に 1 回)、/usr/lib/acct/runacct スクリプトが各種のアカウンティングファイルを処理して、累積要約ファイルと日次アカウンティングレポートを生成します。次に、 /usr/lib/acct/prdaily スクリプトが日次レポートを印刷します。
runacct スクリプトについては、「runacct スクリプト」を参照してください。
毎月、monacct スクリプトを実行することによって、 runacct 累積要約ファイルを処理して印刷します。monacct スクリプトによって生成される要約レポートは、月次またはその他の会計期間ベースのユーザーに対する効率的な課金手段になります。
システムアカウンティングソフトウェアは、データから要約ファイルとレポートを生成する C 言語プログラムとシェルスクリプトを提供します。これらのプログラムは /usr/lib/acct ディレクトリにあります。アカウンティングレポートは、/var/adm/acct ディレクトリにあります。
日次アカウンティングによって、次の 4 種類の監査を行うことができます。
接続アカウンティング
プロセスアカウンティング
ディスクアカウンティング
料金計算
接続アカウンティングでは、次のデータを調べることができます。
特定のユーザーがログインしていた時間
tty 回線の利用状況
システムのリブート回数
アカウンティングソフトウェアが有効または無効に設定された頻度
この接続セッション情報を提供するために、システムは次のデータを格納します。
時間調節の記録
ブート時刻
アカウンティングソフトウェアが有効または無効にされた回数
実行レベルの変更
ユーザープロセスの作成 (login プロセスと init プロセス)
プロセスの終了
これらのレコードは、date、init 、login、ttymon、acctwtmp などのシステムプログラムの出力によって生成されます。これらは /var/adm/wtmpx ファイルに格納されます。
wtmpx ファイルのエントリには、次の情報を入れることができます。
ログイン名
装置名
プロセス ID
エントリタイプ
エントリがいつ作成されたのかを示すタイムスタンプ
プロセスアカウンティングでは、システムで実行される各プロセスに関する次のデータを追跡できます。
プロセスを使用するユーザーおよびグループのそれぞれのユーザー ID とグループ ID
プロセスの開始時刻と経過時間
プロセスの CPU 時間 (ユーザー時間とシステム時間)
プロセスによって使用されるメモリーの容量
プロセスによって実行されるコマンド
プロセスを制御する tty
プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。
ディスクアカウンティングでは、各ユーザーがディスク上に持っているファイルについて、次のデータを収集しフォーマットできます。
ユーザーのユーザー名とユーザー ID
ユーザーのファイルが使用しているブロック数
これらのデータは、/usr/lib/acct/dodisk シェルスクリプトによって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加するエントリによって決定されます。一方、dodisk スクリプトは、acctdisk コマンドと acctdusg コマンドを起動します。これらのコマンドは、ログイン名ごとのディスク使用量を収集します。
dodisk スクリプトを実行して収集された情報は /var/adm/acct/nite/disktacct ファイルに格納されます。これらの情報は、次に dodisk スクリプトを実行したときに上書きされます。したがって、dodisk スクリプトは同じ日に 2 回以上実行しないでください。
acctdusg コマンドは、ランダムに書き込まれたため穴があいたファイルに対して過剰に課金します。このような問題が起こるのは、acctdusg コマンドが、ファイルサイズを決めるときに、ファイルの間接ブロックを読み取らないからです。 acctdusg コマンドは、i ノードの現在のファイルサイズの値をチェックして、ファイルのサイズを決めます。
chargefee ユーティリティーは、ユーザーに提供した特別なサービスに対する課金を、/var/adm/fee ファイルに格納します。特別なサービスとは、たとえば、ファイルの復元です。 このファイルの各エントリは、ユーザーのログイン名、ユーザー ID、および料金から構成されています。このファイルは、runacct スクリプトによって毎日チェックされて、新しいエントリが全体のアカウンティングレコードにマージされます。chargefee スクリプトを実行してユーザーに課金する方法については、「ユーザーに課金する方法」を参照してください。
次に、日次アカウンティング機能がどのように動作するかを要約して示します。
システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれ日次アカウンティング機能を呼び出す他のプログラムを実行します。
acctwtmp プログラムは、/var/adm/wtmpx ファイルに「ブート」レコードを追加します。このレコードには、システム名が wtmpx レコード内のユーザー名として示されます。次の表に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。
/var/adm 内のファイル |
格納される情報 |
データを書き込むプログラム |
表記形式 |
---|---|---|---|
接続セッション数 |
login、init |
バイナリ形式 |
|
|
date |
バイナリ形式 |
|
|
acctwtmp |
バイナリ形式 |
|
|
shutacct |
バイナリ形式 |
|
プロセス数 |
カーネル (プロセス終了時) |
バイナリ形式 |
|
|
|
バイナリ形式 |
|
特別料金 |
chargefee |
ASCII |
|
使用ディスク領域 |
dodisk |
バイナリ形式 |
turnacct スクリプトが -on オプションで起動されて、プロセスアカウンティングを開始します。具体的には、turnacct スクリプトは、/var/adm/pacct 引数を使用して accton プログラムを実行します。
remove シェルスクリプトが、runacct によって sum ディレクトリに保存されている pacct および wtmpx ファイルを「整理」します。
login および init プログラムが、 /var/adm/wtmpx ファイルにレコードを書き込み、接続セッションを記録します。すべての日付変更 (引数を指定して date を使用) も /var/adm/wtmpx ファイルに書き込まれます。リブート回数とシャットダウン回数も、acctwtmp コマンドを使用して、 /var/adm/wtmpx ファイルに記録されます。
プロセスが終了すると、カーネルが /var/adm/pacct ファイルにプロセスごとに 1 レコードを acct.h 形式で書き込みます。
cron コマンドは、1 時間ごとに ckpacct スクリプトを実行して、/var/adm/pacctファイルのサイズをチェックします。このファイルが 500 ブロック (デフォルト) よりも大きくなった場合は、turnacct switch コマンドが実行されます。このプログラムは pacct ファイルを pacctn ファイルに移動して、新しいファイルを作成します。pacct ファイルを小さく分けることの利点は、それらのレコードを処理するときに障害が発生して、runacct スクリプトを再起動しようとしたときに明らかになります。
runacct スクリプトは、cron コマンドによって毎晩実行されます。runacct スクリプトは、アカウンティングファイルを処理し、ユーザー別のコマンド要約と利用状況要約を生成します。処理されるアカウンティングファイルは以下のとおりです。 /var/adm/pacct n、/var/adm/wtmpx、/var/adm/fee、および /var/adm/acct/nite/disktacct。
/usr/lib/acct/prdaily スクリプトは、runacct スクリプトによって1 日1 回実行され、/var/adm/acct/sum/rprtMMDD ファイルに日次アカウンティング情報を書き込みます。
monacct スクリプトを月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行すべきです。monacct スクリプトは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct スクリプトによって毎日更新されています。このレポートを作成後、monacct スクリプトは sum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。
shutdown コマンドを使用してシステムをシャットダウンした場合は、shutacct スクリプトが自動的に実行されます。shutacct スクリプトは /var/adm/wtmpx ファイルに「理由レコード」を書き込み、プロセスアカウンティングを無効にします。