次にプロセスの監視方法を説明しよう。
プロセス情報は、prTableサブツリーにある。しかしsnmpwalkコマンドを使ってprTableサブツリーを見ても、デフォルトでは何も見えない。prTableサブツリーから参照するためには、snmpd.confにおいてprocディレクティブを記述し、どのプロセスを監視するのかを決めなければならない。
proc プロセス名 最大値 最小値
プロセス名は、ps -eコマンドで取得できるものであり、純粋なコマンド名のみ(例えば「httpd」や「sendmail」など)を指定する。
「最大値」と「最小値」は、このプロセスが、幾つ起動していないとエラーとするかを指定する値だ。最小値を下回ったり、最大値を上回ったりしたときには、後述のprTableサブツリー内のprErrorFlagが1になる。
「最大値」と「最小値」を省略したときには、「1個もプロセスが起動していないとエラー」という意味になる。実際に、snmpd.confに、次の監視命令を記述して、snmpdデーモンを再起動してみよう。
Net-SNMPには、versionUpdateConfigの値を「1」に設定すると設定を再読込する機能がある。そのため、snmpd.confファイルを変更したあと、「snmpset -c hogeprivate -v 1 localhost versionUpdateConfig.0 i 1」のように実行しても構わない。
proc httpd
proc sendmail
リスト1では、「httpd」と「sendmail」の2つのプロセスを監視するように設定した。
prTableはテーブルであるため、実際にデータを参照するときには、インデックス番号を付ける。このインデックス番号は、procディレクティブを指定した順になる。つまりこの例で言えば、「httpd」は「1」、「sendmail」は「2」である。
実際にsnmpwalkコマンドで取得すると、次のようになる。
$ snmpwalk -c hogeprivate -v 1 localhost prTable
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prIndex.2 = INTEGER: 2
UCD-SNMP-MIB::prNames.1 = STRING: httpd
UCD-SNMP-MIB::prNames.2 = STRING: sendmail
UCD-SNMP-MIB::prMin.1 = INTEGER: 0
UCD-SNMP-MIB::prMin.2 = INTEGER: 0
UCD-SNMP-MIB::prMax.1 = INTEGER: 0
UCD-SNMP-MIB::prMax.2 = INTEGER: 0
UCD-SNMP-MIB::prCount.1 = INTEGER: 9
UCD-SNMP-MIB::prCount.2 = INTEGER: 2
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 0
UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: 0
UCD-SNMP-MIB::prErrMessage.1 = STRING:
UCD-SNMP-MIB::prErrMessage.2 = STRING:
UCD-SNMP-MIB::prErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::prErrFix.2 = INTEGER: 0
UCD-SNMP-MIB::prErrFixCmd.1 = STRING:
それぞれの設定の意味は、表3の通りだ。
ここではプロセスの監視として、「prErrorFlag」に注目したい。このフラグは、procディレクティブにおいて、「最小値」を下回ったときや、「最大値」を上回ったときに「1」になるフラグだ。そうでないときは、「0」だ。
最大値の使い道が浮かばないかもしれない。これは主にフォークされたプロセスを無くしたい場面で使われる。例えば、sendmailがたくさんのメールを送信し過ぎており、幾つかのsendmailプロセスを無くしたいときなどに用いる。
Copyright © ITmedia, Inc. All Rights Reserved.