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

日次アカウンティングの種類

日次アカウンティングによって、「接続アカウンティング」、「プロセスアカウンティング」、「ディスクアカウンティング」、「料金計算」の 4 種類のアカウンティングを簡単に実行できます。

接続アカウンティング

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

これらの情報を提供するために、システムは期間調整、リブート回数、アカウンティングソフトウェアが有効または無効に設定された回数、実行レベルの変更回数、ユーザープロセス (login プロセスと init プロセス) の作成、プロセスの消滅などの情報のレコードを格納します。これらのレコード (dateinitloginttymonacctwtmp などのシステムプログラムの出力によって生成されます) は /var/adm/wtmpx ファイルに格納されます。wtmpx ファイルのエントリには、ユーザーのログイン名、装置名、プロセス ID、エントリタイプ、エントリがいつ作られたかを示すタイムスタンプなどの情報を含めることができます。

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

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

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

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

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

これらのデータはシェルスクリプト /usr/lib/acct/dodisk によって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加する cron コマンドによって決定されます。dodisk は、acctdusg および diskusg コマンドを起動して、システム内の各ファイルについての情報を収集させます。

dodisk の設定の詳細は、「システムアカウンティングを設定する方法」を参照してください。

acctdusg(1M) コマンドは、すべてのディスクアカウンティング情報を収集します。起動されるたびに、このコマンドは最高 3000 ユーザー分の情報を処理できます。


注意 - 注意 -

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


ランダムなアクセスにより書き込まれ、その結果ディスク上で連続していないファイルに対して diskusg コマンドは、より多く課金します。これは、diskusg がファイルのサイズを判定するときにファイルの間接ブロックを読み取らないためです。このコマンドは、i ノードの di_size の値を調べてファイルのサイズを判定します。

ユーザー料金の計算

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

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

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

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

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

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

    /var/adm 内のファイル

    情報 

    ファイルを書くプログラム 

    書式定義ヘッダ 

    wtmpx

    接続セッション数

    login, init

    utmpx.h

     

    日付変更回数

    date

     

    リブート回数

    acctwtmp

     

    シャットダウン回数

    shutacct シェル

    pacctn

    プロセス数 

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

    acct.h

     

     

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

     

    fee

    特別料金 

    chargefee

    acct.h

    acct/nite/disktacct

    使用ディスク領域 

    dodisk

    tacct.h

  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 による切り替えが実行されます。(このプログラムは今までの pacct ファイルを他に移して新しいファイルを作成します。) 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 回実行され、runacct が収集した日次アカウンティング情報 (ASCII 形式) を /var/adm/acct/sum/rprt.MMDD に書き込みます。

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

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

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