Solaris のシステム管理 (上級編)

システムアカウンティング

SunOS 5.9 のシステムアカウンティングソフトウェアは、ユーザー接続時間、プロセスに使用された CPU 時間、およびディスク使用量についてのデータを収集および記録できるプログラム群です。一度このデータを収集すると、レポートを生成したり、システム使用に対して課金したりすることができます。

アカウンティングプログラムを使用すると、次の事項を行うことができます。

システムアカウンティングプログラムは、設定が済むと、ほとんどの場合自動的に実行されます。

システムアカウンティングの動作

自動アカウンティングは、まずアカウンティング起動スクリプトをルートの crontab ファイルに配置することによって設定します。すると、アカウンティング起動スクリプトが、cron コマンドによって自動的に起動されます。

次の概要は、システムアカウンティングのプロセスを示したものです。

  1. システムを起動してからシャットダウンするまでの間に、システムの利用に関する (ユーザーログイン、実行されたプロセス、データの格納などの) raw データがアカウンティングファイルに収集されます。

  2. 定期的に (通常 1 日に 1 回)、/usr/lib/acct/runacct スクリプトが各種のアカウンティングファイルを処理して、累積要約ファイルと日次アカウンティングレポートを生成します。次に、/usr/lib/acct/prdaily スクリプトが日次レポートを印刷します。

    runacct スクリプトについては、runacct スクリプト」を参照してください。

  3. 毎月、monacct スクリプトを実行することによって、runacct 累積要約ファイルを処理して印刷します。monacct スクリプトによって生成される要約レポートは、月次またはその他の会計期間ベースのユーザーに対する効率的な課金手段になります。

システムアカウンティングのコンポーネント

アカウンティングユーティリティは、データから要約ファイルとレポートを生成する C 言語プログラムとシェルスクリプトを提供します。これらのプログラムは /usr/lib/acct ディレクトリにあります。アカウンティングレポートは、/var/adm/acct ディレクトリにあります。

日次アカウンティングによって、次の 4 種類の監査を行うことができます。

接続アカウンティング

接続アカウンティングでは、次のデータを調べることができます。

この情報を提供するために、システムは次のデータを格納します。

これらのレコード (dateinitloginttymonacctwtmp などのシステムプログラムの出力によって生成されます) は /var/adm/wtmpx ファイルに格納されます。wtmpx ファイルのエントリには、次の情報を入れることができます。

プロセスアカウンティング

プロセスアカウンティングでは、システムで実行される各プロセスに関する次のようなデータを追跡できます。

プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。

ディスクアカウンティング

ディスクアカウンティングでは、各ユーザーがディスク上にもっているファイルについて次のデータを収集し、それらを整形できます。

これらのデータはシェルスクリプト /usr/lib/acct/dodisk によって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加する cron コマンドによって決定されます。一方、dodisk スクリプトは、acctdisk および acctdusg コマンドを起動して、ログインによるディスク使用量を収集させます。


注意 - 注意 -

dodisk スクリプトを実行して収集された情報は、/var/adm/acct/nite/disktacct ファイルに格納されます。これらの情報は、次に dodisk スクリプトを実行したときに上書きされます。したがって、dodisk スクリプトは同じ日に 2 回以上実行しないでください。


acctdusg コマンドは、ランダムに書き込まれたため穴があいたファイルに対して過剰に課金します。このような問題が起こるのは、acctdusg コマンドが、ファイルサイズを決めるときに、ファイルの間接ブロックを読み取らないからです。acctdusg コマンドは、i ノードの di_size の値をチェックして、ファイルのサイズを決めます。

ユーザー料金の計算

chargefee ユーティリティは、ユーザーに提供した特別なサービス (ファイルの復元など) に対する課金を、/var/adm/fee ファイルに格納します。このファイルの各エントリは、ユーザーのログイン名、ユーザー ID、および料金から構成されています。このファイルは、runacct スクリプトによって毎日チェックされて、新しいエントリが全体のアカウンティングレコードにマージされます。chargefee スクリプトを実行してユーザーに課金する命令については、「ユーザーに課金する方法」を参照してください。

日次アカウンティング機能の動作

次に、SunOS の日次アカウンティング機能がどのように動作するかを要約して示します。

  1. システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれ日次アカウンティング機能を呼び出す他のプログラムを実行します。

  2. acctwtmp プログラムは /var/adm/wtmpx ファイルに「ブート」レコードを追加します。このレコードには、システム名が wtmpx レコード内のユーザー名として示されます。次の表に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。

    表 19-1 raw アカウンティングデータ

    /var/adm 内のファイル

    格納される情報 

    データを書き込むプログラム 

    表記形式 

    wtmpx

    接続セッション数

    logininit

    バイナリ 

     

    日付変更

    date

     

     

    リブート

    acctwtmp

     

     

    シャットダウン

    shutacct

     

    pacctn

    プロセス 

    カーネル (プロセス終了時) 

    バイナリ 

     

     

    turnacct switch (古いファイルの内容が 500 ブロックに達すると、新しいファイルが作成される)

     

    fee

    特別料金 

    chargefee

    ASCII 

    acct/nite/disktacct

    使用ディスク領域 

    dodisk

    バイナリ 

  3. turnacct スクリプトが -on オプションで起動されて、プロセスアカウンティングを開始します。turnacct スクリプトは、特に /var/adm/pacct 引数を使用して accton プログラムを実行します。

  4. remove シェルスクリプトが、runacct によって sum ディレクトリに保存されている pacct および wtmpx ファイルを「整理」します。

  5. login および init プログラムが、/var/adm/wtmpx ファイルにレコードを書き込み、接続セッションを記録します。すべての日付変更 (引数を指定して date を使用) も /var/adm/wtmpx ファイルに書き込まれます。リブート回数とシャットダウン回数も、acctwtmp コマンドを使用して、/var/adm/wtmpx ファイルに記録されます。

  6. プロセスが終了すると、カーネルが /var/adm/pacct ファイルにプロセスごとに 1 レコードを acct.h 形式で書き込みます。

    cron コマンドは、1 時間ごとに ckpacct スクリプトを実行して、/var/adm/pacct ファイルのサイズをチェックします。このファイルが 500 ブロック (デフォルト) よりも大きくなった場合は、turnacct switch コマンドが実行されます。(このプログラムは pacct ファイルを pacctn ファイルに移動して、新しいファイルを作成します。) pacct ファイルを小さく分けることの利点は、それらのレコードを処理するときに障害が発生して、runacct スクリプトを再起動しようとしたときに明らかになります。

  7. runacct スクリプトは、cron コマンドによって毎晩実行されます。 runacct スクリプトは、/var/adm/pacctn/var/adm/wtmpx/var/adm/fee および /var/adm/acct/nite/disktacct のアカウンティングファイルを処理し、ユーザー別のコマンド要約と利用状況要約を生成します。

  8. /usr/lib/acct/prdaily スクリプトは、runacct スクリプトによって 1 日 1 回実行され、/var/adm/acct/sum/rprt MMDD ファイルに日次アカウンティング情報を書き込みます。

  9. monacct スクリプトが月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行されます。monacct スクリプトは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct スクリプトによって毎日更新されています。このレポートを作成後、monacct スクリプトは sum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。

システムがシャットダウンしたときの動作

shutdown コマンドを使用してシステムをシャットダウンした場合は、shutacct スクリプトが自動的に実行されます。shutacct スクリプトは /var/adm/wtmpx ファイルに理由レコードを書き、アカウンティングプロセスを無効に設定します。