2.10.11 拡張MIBオブジェクトの定義例
拡張MIBオブジェクトの定義例を次の順で説明します。
-
MIBオブジェクトの定義
-
システム(flintagent)へのログイン
-
/etc/SnmpAgent.d/snmpd.extendファイルの作成例
(1) MIBオブジェクトの定義
ユーザーがFlintstones Companyの社員の場合で,次に示す目的でMIBオブジェクトを記述します。
-
システムを使用しているユーザーをリストアップする。
-
各マシンのメモリーの内容を参照する。
-
メールキューを管理する。
-
無人のシステムで1時間当たりに発生するウィジェット数を管理する。
-
LPスケジューラを見失わないようにする。
-
デフォルトのプリンタを参照する。
-
ユーザーID,ユーザーが使用しているディスクスペース,ユーザーのemailのアドレスリストを参照する。
-
ルートプロセスの一覧を出力する。
-
inetd(1M)の構成ファイルの内容を変更する。
上記のMIBオブジェクトの定義については,「2.10.11(3) /etc/SnmpAgent.d/snmpd.extendファイルの作成例」のMIBオブジェクト定義の説明を参照してください。
エージェントシステムはflintagent,デフォルトのコミュニティ名はpublic,setコミュニティ名はsecretです。オブジェクト識別子がユニークになるように,MIBオブジェクトはflintstones(4242)サブツリーの中に定義することにします。MIBツリーの階層を次に示します。
iso (1) ::= { 1 } org (3) ::= { 3 } dod (6) ::= { 6 } internet (1) OBJECT IDENTIFIER ::= { dod 1 } private (4) OBJECT IDENTIFIER ::= { internet 4 } enterprises (1) OBJECT IDENTIFIER ::= { private 1 } flintstones (4242) OBJECT IDENTIFIER ::= { enterprises 4242 } fsys (1) OBJECT IDENTIFIER ::= { flintstones 1 } fmail (2) OBJECT IDENTIFIER ::= { flintstones 2 } fwidgets (3) OBJECT IDENTIFIER ::= { flintstones 3 } fprinters (4) OBJECT IDENTIFIER ::= { flintstones 4 } fdisk(5) OBJECT IDENTIFIER ::= { flintstones 5 } fprocess(6) OBJECT IDENTIFIER ::= { flintstones 6 } fconfig(7) OBJECT IDENTIFIER ::= { flintstones 7 }
MIBツリーの構成を次の図に示します。
|
次に,各葉ノードのオブジェクト識別子を示します。
葉ノード オブジェクト識別子 fsysUsers 1.3.6.1.4.1.4242.1.1.0 fmemory 1.3.6.1.4.1.4242.1.2.0 fmailNumMsgs 1.3.6.1.4.1.4242.2.1.0 fmailListMsgs 1.3.6.1.4.1.4242.2.2.0 fwidgetsPerHour 1.3.6.1.4.1.4242.3.1.0 fprintersStatus 1.3.6.1.4.1.4242.4.1.0 fdefaultPrinter 1.3.6.1.4.1.4242.4.2.0 fUID 1.3.6.1.4.1.4242.5.1.1.1.fUID※1 fUserName 1.3.6.1.4.1.4242.5.1.1.2.fUID fUserDiskSpace 1.3.6.1.4.1.4242.5.1.1.3.fUID fUserEmailAddress 1.3.6.1.4.1.4242.5.1.1.4.fUID fProcessID 1.3.6.1.4.1.4242.6.1.1.1.fProcessID※2 fProcessName 1.3.6.1.4.1.4242.6.1.1.2.fProcessID fInetdConf 1.3.6.1.4.1.4242.7.1.0 注※1 FUIDの値 注※2 fProcessIDの値
(2) システム(flintagent)へのログイン
ルートユーザーとしてflintagentシステムにログインします。
(3) /etc/SnmpAgent.d/snmpd.extendファイルの作成例
/etc/SnmpAgent.d/snmpd.extendファイルの作成例を次に示します。
作成例の/etc/SnmpAgent.d/snmpd.extendファイルの内容は,拡張MIB定義サンプルファイルの/opt/OV/prg_samples/eagent/snmpd.extendの中に提供されています。
FLINTSTONES-MIB DEFINITIONS ::= BEGIN -- -- Test MIB- used for testing snmpd.ea(extensible agent) -- -- internet OBJECT IDENTIFIER ::= { iso(1) org(3) dod(6) internet(1) } enterprises OBJECT IDENTIFIER ::= { internet private(4) 1 } flintstones OBJECT IDENTIFIER ::= { enterprises 4242 } fsys OBJECT IDENTIFIER ::= { flintstones 1 } fmail OBJECT IDENTIFIER ::= { flintstones 2 } fwidgets OBJECT IDENTIFIER ::= { flintstones 3 } fprinters OBJECT IDENTIFIER ::= { flintstones 4 } fdisk OBJECT IDENTIFIER ::= { flintstones 5 } fprocess OBJECT IDENTIFIER ::= { flintstones 6 } fconfig OBJECT IDENTIFIER ::= { flintstones 7 } fsysUsers OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "List of users on the flintstone machine READ-COMMAND: /usr/bin/users; exit 0 READ-COMMAND-TIMEOUT: 5" ::= { fsys 1 } fmemory OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Amount of memory (in megabytes) on system APPEND-COMMUNITY-NAME: true FILE-NAME: /opt/OV/prg_samples/eagent/memory" ::= { fsys 2 } fmailNumMsgs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Message count on the mail queue. READ-COMMAND: /usr/bin/mailq | fgrep -v Mail | wc -l" ::= { fmail 1 } fmailListMsgs OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "List of messages on the mail queue. READ-COMMAND: /usr/bin/mailq READ-COMMAND-TIMEOUT: 10" ::= { fmail 2 } fwidgetsPerHour OBJECT-TYPE SYNTAX Gauge ACCESS read-write STATUS mandatory DESCRIPTION "Number of widgets produced per hour. READ-COMMAND: /opt/OV/prg_samples/eagent/num_widgets $i $c $o $s READ-COMMAND-TIMEOUT: 2 WRITE-COMMAND: /opt/OV/prg_samples/eagent/change_num_widgets $* WRITE-COMMAND-TIMEOUT: 10" ::= { fwidgets 1 } fprintersStatus OBJECT-TYPE SYNTAX INTEGER { up(1), down(2) } ACCESS read-only STATUS mandatory DESCRIPTION "Status of printer scheduler. READ-COMMAND: ps -ef|grep lpsched | grep -v grep | wc | awk '{ if ($1 == 0) print 2; else print 1 }'" ::= { fprinters 1 } fdefaultPrinter OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Default printer FILE-NAME: /usr/spool/lp/default" ::= { fprinters 2 } fUserDiskTable OBJECT-TYPE SYNTAX SEQUENCE OF FUserDiskEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "List of users and the number of kilobytes in their home directory. FILE-NAME: /opt/OV/prg_samples/eagent/user_disk_space" ::= { fdisk 1 } fUserDiskEntry OBJECT-TYPE SYNTAX FUserDiskEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "This macro documents the column that uniquely describes each row." INDEX { fUID } ::= { fUserDiskTable 1 } FUserDiskEntry ::= SEQUENCE { fUID INTEGER, fUserName DisplayString, fUserDiskSpace INTEGER, fUserEmailAddress DisplayString } fUID OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "User's unique ID" ::= { fUserDiskEntry 1 } fUserName OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "User login name" ::= { fUserDiskEntry 2 } fUserDiskSpace OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Amount of disk space (in kilobytes) used by the user." ::= { fUserDiskEntry 3 } fUserEmailAddress OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Email address for the user" ::= { fUserDiskEntry 4 } fUserRootProcessTable OBJECT-TYPE SYNTAX SEQUENCE OF FUserRootProcessEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "List of root processes. Do not execute command more than every 60 seconds. FILE-COMMAND: /opt/OV/prg_samples/eagent/get_processes FILE-COMMAND-FREQUENCY: 60 FILE-NAME: /opt/OV/prg_samples/eagent/root_processes" ::= { fprocess 1 } fUserRootProcessEntry OBJECT-TYPE SYNTAX FUserRootProcessEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "This macro documents the column that uniquely describes each row." INDEX { fProcessID } ::= { fUserRootProcessTable 1 } FUserRootProcessEntry ::= SEQUENCE { fProcessID INTEGER, fProcessName DisplayString } fProcessID OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Process ID" ::= { fUserRootProcessEntry 1 } fProcessName OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Name of process" ::= { fUserRootProcessEntry 2 } fInetdConf OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "The configuration file for inetd FILE-COMMAND: /opt/OV/prg_samples/eagent/update_inetd $r FILE-COMMAND-FREQUENCY: 7200 FILE-NAME: /etc/inetd.conf" ::= { fconfig 1 } END
/etc/SnmpAgent.d/snmpd.extendファイル作成例に含まれるMIBオブジェクト定義ごとに定義内容を説明します。
操作手順
-
システムを使用しているユーザーをリストアップする。
SNMPエージェントは,マネージャーからのGetRequestを受信した場合にコマンドを実行できます。実行するコマンドは,READ-COMMANDラベルに記述します。/usr/bin/usersコマンドを使用して,システムを使用しているユーザーのリストをMIBの値とする定義例を次に示します。
fsysUsers OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "List of users on the flintstone machine READ-COMMAND: /usr/bin/users; exit 0 READ-COMMAND-TIMEOUT: 5" ::= { fsys 1 }
SNMPエージェントが,マネージャーからオブジェクト識別子flintstones.fsys.fsysUsers.0に対してGetRequestを受信すると,READ-COMMANDラベルに記述された/usr/bin/usersコマンドを実行して,その結果をマネージャーに応答します。
SNMPエージェントは,デフォルトではREAD-COMMANDラベルに記述されたコマンドが3秒以内に応答しない場合,マネージャーにgenErrをエラー応答します。このコマンドの終了待ち時間は,READ-COMMAND-TIMEOUTラベルを使用して任意の時間に変更できます。コマンドの終了待ち時間を5秒に設定したい場合,READ-COMMAND-TIMEOUTラベルに次のように記述します。
READ-COMMAND-TIMEOUT: 5
-
各マシンのメモリーの内容を参照する。
SNMPエージェントはほかのマシンのデバイスやアプリケーションに代わってマネージャーからの要求に対してプロキシとして応答できます。SNMPをサポートしていない3台のマシンのメモリーの内容をSNMPエージェントが応答するようにしたい場合について説明します。
SNMPエージェントを3台のマシンにプロキシとして動作させます。SNMPをサポートしていないマシンをlarry,curly,moeと名付けます。次に示す3つのファイルの内容はそれぞれのマシンのメモリー内容を保持しています。
/opt/OV/prg_samples/eagent/memory.larry /opt/OV/prg_samples/eagent/memory.curly /opt/OV/prg_samples/eagent/memory.moe
このプロキシを実装する場合,次のようにオブジェクトを定義します。
fmemory OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Amount of memory (in megabytes) on system APPEND-COMMUNITY-NAME: true FILE-NAME: /opt/OV/prg_samples/eagent/memory" ::= { fsys 2 }
SNMPエージェントは,マネージャーからのflintstones.fsys.fmemoryに対するSNMP Requestをlarry,curly,moeに代わって応答します。どのマシンへのSNMP Requestかは,そのSNMP Requestに含まれているコミュニティ名から判断します。 例えば,flintstones.fsys.fmemory.0にコミュニティ名がmoeでGetRequestを受信した場合,SNMPエージェント機能は/opt/OV/prg_samples/eagent/memory.moeを読み込み,その内容をマネージャーに応答します。例からもわかるように,プロキシとして使用する場合はAPPEND-COMMUNITY-NAME:trueを記述します。SNMPエージェントはAPPEND-COMMUNITY-NAME:trueが記述されるとFILE-NAMEラベルに記述されたファイル名にコミュニティ名を結合して(この場合/opt/OV/prg_samples/eagent/memory.コミュニティ名)ファイル名とします。すでにSNMPエージェントに組み込まれているオブジェクトに対してプロキシとして動作させる場合,例えば,MIB-IIオブジェクトでもプロキシとして使用できます。プロキシマシンのLarry,curly,moeからそれぞれのsysDescrを応答させたい場合について,例を用いて説明します。各マシンのsysDescrの内容を次のファイルに保持しています。
/opt/OV/prg_samples/eagent/sysDescr.larry /opt/OV/prg_samples/eagent/sysDescr.curly /opt/OV/prg_samples/eagent/sysDescr.moe
このプロキシを実装する場合,ユーザーは次のようにオブジェクトを定義します。
sysDescr OBJECT-TYPE SYNTAX DisplayString (SIZE(0..255)) ACCESS read-only STATUS mandatory DESCRIPTION "A textual description of the entity. This value should include the full name and version identification of the system's hardware type, software operating-system, and networking software. It is mandatory that this only contain printable ASCII characters. APPEND-COMMUNITY-NAME : true FILE-NAME: /opt/OV/prg_samples/eagent/sysDescr" ::= { system 1 }
SNMPエージェントが,マネージャーからオブジェクト識別子system.sysDescr.0に対して,コミュニティ名がmoeでGetRequestを受信した場合,SNMPエージェントは/opt/OV/prg_samples/eagent/sysDescr.moeを読み込み,マネージャーにファイルの内容を応答します。また,SNMPエージェントが,マネージャーからオブジェクト識別子system.sysDescr.0に対して,コミュニティ名がpublicでGetRequestを受信した場合,MIB-IIオブジェクトのsysDescrの値を応答します。
-
メールキューを管理する。
READ-COMMANDラベルを使用してメールキューを管理する定義例を次に示します。
fmailNumMsgs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Message count on the mail queue. READ-COMMAND: /usr/bin/mailq | fgrep -v Mail | wc -l" ::= { fmail 1 } fmailListMsgs OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "List of messages on the mail queue. READ-COMMAND: /usr/bin/mailq READ-COMMAND-TIMEOUT: 10" ::= { fmail 2 }
-
無人のシステムで1時間当たりに発生するウィジェット数を管理する。
SNMPエージェントは,マネージャーからのSetRequestを受信した場合にコマンドを実行できます。実行するコマンドは,WRITE-COMMANDラベルに記述します。
/opt/OV/prg_samples/eagent/change_num_widgetsコマンドを使用して,無人のシステムで1時間当たりに発生するウィジェット数を変更する定義例を次に示します。
fwidgetsPerHour OBJECT-TYPE SYNTAX Gauge ACCESS read-write STATUS mandatory DESCRIPTION "Number of widgets produced per hour. READ-COMMAND: /opt/OV/prg_samples/eagent/num_widgets $i $c $o $s READ-COMMAND-TIMEOUT: 2 WRITE-COMMAND: /opt/OV/prg_samples/eagent/change_num_ widgets $* WRITE-COMMAND-TIMEOUT: 10" ::= { fwidgets 1 }
READ-COMMANDラベル,およびWRITE-COMMANDラベルに記述されたコマンドに,引数を渡せます。この引数はコマンドのあとに記述します。引数の意味については,「2.10.3(2) スクリプトまたはプログラムの記述」の引数の説明を参照してください。
-
LPスケジューラを見失わないようにする。
READ-COMMANDラベルを使用して,LPスケジューラの状態を管理する定義例を次に示します。
fprintersStatus OBJECT-TYPE SYNTAX INTEGER { up(1), down(2) } ACCESS read-only STATUS mandatory DESCRIPTION "Status of printer scheduler. READ-COMMAND: ps -ef|grep lpsched | grep -v grep | wc | awk '{ if ($1 == 0) print 2; else print 1 }'" ::= { fprinters 1 }
-
デフォルトのプリンタを参照する。
SNMPエージェントは,ファイルの内容をMIBの値として拡張MIBオブジェクトを定義できます。ファイルはFILE-NAMEラベルに記述します。
/usr/spool/lp/defaultファイルを読み込んで,デフォルトのプリンタを参照するオブジェクトは次のように定義します。
fdefaultPrinter OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Default printer FILE-NAME: /usr/spool/lp/default" ::= { fprinters 2 }
SNMPエージェントが,マネージャーからオブジェクト識別子flintstones.fprinters.fdefaultPrinter.0に対してGetRequestを受信すると,FILE-NAMEラベルに記述された/usr/spool/lp/defaultファイルを読み込んで,マネージャーに応答します。
-
ユーザーID,ユーザーが使用しているディスクスペース,ユーザーのemailのアドレスリストを参照する。
ファイルの内容をMIBの値とすることで,テーブル形式のMIBをSNMPエージェントに追加できます。ファイルの内容をMIBの値とする場合の例を示します。
ユーザーIDとそのユーザーが使用しているディスクスペース,ユーザーのemailのアドレスリストが,/opt/OV/prg_samples/eagent/user_disk_spaceファイルに格納されています。データの例を次に示します。
# User ID User Name Disk Space Email Address 100 zach 120 zach@server1 201 alice 65 alice@server2 320 john 2 john@server3 119 craig 500 root@server1 217 steve 75 steve@server1 83 bob 111 bob@bobby
例で示すテーブルには,6個の行と4個の列があります。テーブル形式のMIBを定義する場合,列要素の中からどの行かを特定できるような,ユニークな値を持つオブジェクトを選択する必要があり,この列要素を接尾辞と呼びます。この例では最初の列のUser IDがユニークな値となっています。User Nameがユニークの場合,第2列を接尾辞として使用します。
このテーブル形式のMIBオブジェクトは,次のように定義します。
fUserDiskTable OBJECT-TYPE SYNTAX SEQUENCE OF FUserDiskEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "List of users and the number of kilobytes in their home directory. FILE-NAME: /opt/OV/prg_samples/eagent/user_disk_space" ::= { fdisk 1 } fUserDiskEntry OBJECT-TYPE SYNTAX FUserDiskEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "This macro documents the column that uniquely describes each row." INDEX { fUID } ::= { fUserDiskTable 1 } FUserDiskEntry ::= SEQUENCE { fUID INTEGER, fUserName DisplayString, fUserDiskSpace INTEGER, fUserEmailAddress DisplayString } fUID OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "User's unique ID" ::= { fUserDiskEntry 1 } fUserName OBJECT-TYPE SYNTAX DisplayString ACCESS read-only STATUS mandatory DESCRIPTION "User login name" ::= { fUserDiskEntry 2 } fUserDiskSpace OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Amount of disk space (in kilobytes) used by the user." ::= { fUserDiskEntry 3 } fUserEmailAddress OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Email address for the user" ::= { fUserDiskEntry 4 }
最初のOBJECT-TYPEマクロはfUserDiskTableオブジェクトと関連のあるファイルの説明をしています。また,第2のOBJECT-TYPEマクロはfUserDiskEntry列中で行を特定するオブジェクトを説明しています。次のエントリーのFUserDiskEntryはテーブルの列要素を表します。最後の4個のOBJECT-TYPEマクロは列要素のそれぞれについて定義します。
SNMPエージェントが,マネージャーからオブジェクト識別子
fUserDiskTable.fUserDiskEntry.fUIDに対してGetNextRequestを受信した場合,/opt/OV/prg_samples/eagent/user_disk_spaceファイルを読み込み,接尾辞(INDEX節のオブジェクト)をキーにしてテーブルをソートします。ソートしたテーブルは次のようになります。
83 bob 111 bob@bobby 100 zach 120 zach@server1 119 craig 500 root@server1 201 alice 65 alice@server2 217 steve 75 steve@server1 320 john 2 john@server3
この結果から,SNMPエージェントはテーブル内の最初の値を応答します。これは第1行の第1列の値であり,マネージャーは,オブジェクト識別子flintstones.fdisk.fUserDiskTable.fUserDiskEntry.fUID.83のMIBの値として83を受け取ります。次にSNMPエージェントがオブジェクト識別子fUserDiskTable.fUserDiskEntry.fUID.83に対してGetNextRequestを受信した場合,SNMPエージェントはファイルが更新されていないかチェックし,ファイルが更新されている場合は,/opt/OV/prg_samples/eagent/user_disk_spaceファイルを再読み込みします。そして2行目のUser IDをMIBの値として応答します。
SNMPエージェントが,オブジェクト識別子flintstones.fdisk.fUserDiskTable.fUserDiskEntry.fUID.320に対してGetNextRequestを受信した場合,これ以上user IDの行がないため第2列の最初の値を応答します。オブジェクト識別子はflintstones.fdisk.fUserDiskTable.fUserDiskEntry.fUserName.83で,そのMIBの値はbobです。
SNMPエージェントが,オブジェクト識別子flintstones.fdisk.fUserDiskTable.fUserDiskEntry.fUserEmailAddress.217に対してGetRequestを受信した場合,Email Addressの列の217行目を検索し,MIBの値としてsteve@server1を応答します。
aliceのemail addressをalice@server2からalice@mailerに変更する場合,オブジェクト識別子flintstones.fdisk.fUserDiskTable.fUserDiskEntry.fUserEmailAddress.201とMIBの値alice@mailerを指定してSetRequestを発行します。SNMPエージェントは,/opt/OV/prg_samples/eagent/user_disk_spaceファイル中のテーブルの内容を指定された値に書き換えます。
-
ルートプロセスの一覧を出力する。
SNMPエージェントは,snmpd.extendファイル中のDESCRIPTION節のFILE-COMMANDラベルにUNIXコマンドを記述することで,ファイルを読み込む前にUNIXコマンドを実行できます。ルートプロセスの一覧を参照する場合について,FILE-COMMANDを記述した定義例を示します。
fUserRootProcessTable OBJECT-TYPE SYNTAX SEQUENCE OF FUserRootProcessEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "List of root processes. Do not execute command more than every 60 seconds. FILE-COMMAND: /opt/OV/prg_samples/eagent /get_processes FILE-COMMAND-FREQUENCY: 60 FILE-NAME: /opt/OV/prg_samples/eagent/root_processes" ::= { fprocess 1 } fUserRootProcessEntry OBJECT-TYPE SYNTAX FUserRootProcessEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "This macro documents the column that uniquely describes each row." INDEX { fProcessID } ::= { fUserRootProcessTable 1 } FUserRootProcessEntry ::= SEQUENCE { fProcessID INTEGER, fProcessName DisplayString } fProcessID OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "Process ID" ::= { fUserRootProcessEntry 1 } fProcessName OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "Name of process" ::= { fUserRootProcessEntry 2 }
SNMPエージェントがマネージャーから次のGetNextRequestを受け取った場合,SNMPエージェントは,まずFILE-COMMANDに記述された/opt/OV/prg_samples/eagent/get_processコマンドを実行します。
fprocess.fuserRootProcessTable.fUserRootProcessEntry.fProcessID fprocess.fuserRootProcessTable.fUserRootProcessEntry.fProcessName
このコマンドが/opt/OV/prg_samples/eagent/root_processファイルを作成します(内容はrootで起動されたプロセスのIDと名前です)。コマンドが終了するとSNMPエージェントは,/opt/OV/prg_samples/eagent/root_processファイルを読み込み,テーブルの内容をソートしてテーブルの第1行,第1列の値をマネージャーに応答します。
SNMPエージェントが,マネージャーからGetNextRequestを受信した場合,デフォルトでは/opt/OV/prg_samples/eagent/get_processコマンドを最後に実行してからの時間が10秒以内の場合,このコマンドを実行しないで,前回読み込んだファイルの内容をマネージャーに応答します。この周期はFILE-COMMAND-FREQUENCYラベルを使用して任意の時間に変更できます。1時間ごとにコマンドを実行させたい場合,FILE-COMMAND-FREQUENCYラベルに次のように記述します。
FILE-COMMAND-FREQUENCY: 3600
snmpd.extend中のDESCRIPTION節のPIPE-IN-NAMEラベルとPIPE-OUT-NAMEラベルを記述することで,FILE-COMMANDラベルに記述したUNIXコマンドの代わりに,UNIXプロセスと通信できます。SNMPエージェントは,ファイルを読み込む前にPIPE-OUT-NAMEラベルに記述されたファイルにデータを書き込みます。UNIXプロセスはそのデータを読み込み,FILE-NAMEラベルに記述されたファイルの内容を書き換えたあと,その完了をPIPE-IN-NAMEに記述されたファイルでSNMPエージェントに通知します。FILE-COMMANDラベルの例と同様に,ルートプロセスの一覧を参照する場合についてPIPE-IN-NAMEラベルとPIPE-OUT-NAMEラベルを記述した定義例を次に示します。定義例に示していない定義は,FILE-COMMANDラベルを使用したUNIXコマンドの例と同じです。
fUserRootProcessTable OBJECT-TYPE SYNTAX SEQUENCE OF FUserRootProcessEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "List of root processes. PIPE-IN-NAME: /tmp/fifo_in PIPE-OUT-NAME: /tmp/fifo_out FILE-NAME: /opt/OV/prg_samples/eagent/root_processes" ::= { fprocess 1 }
SNMPエージェントがマネージャーから次のオブジェクトのGetNextRequestを受信した場合,SNMPエージェントは,まず/tmp/fifo_outファイルにデータを書き込みます。
fprocess.fUserRootProcessTable.fUserRootProcessEntry.fProcessID fprocess.fUserRootProcessTable.fUserRootProcessEntry.fProcessName
データの内容については,「2.10.2(2) テーブル形式の拡張MIBオブジェクト」のpipe_out_nameに渡すデータの説明を参照してください。
UNIXプロセスはこのメッセージを読み込み,/opt/OV/prg_samples/eagent/root_processファイルを作成します。内容はrootによって起動されたプロセスのIDとプロセスの名前です。そのあと,UNIXプロセスは/tmp/fifo_inファイルに0を書き込み,ファイルの作成が成功したことをSNMPエージェントに通知します。SNMPエージェントは,/tmp/fifo_inファイルの内容を読み込み,内容が0なら/opt/OV/prg_samples/eagent/root_processesファイルを読み込み,内容をソートしてテーブルの第1行,第1列の値をマネージャーに応答します。
SNMPエージェントがマネージャーからGetRequestまたはGetNextRequestを受信した場合,デフォルトではPIPE-OUT-NAMEラベルに記述されたファイルに最後にデータを書き込んでからの時間が10秒以内ならば新しく書き込みはしないで,前回読み込んだファイルの内容をマネージャーに応答します。この周期はPIPE-FREQUENCYラベルを使用して任意の時間に変更できます。
SNMPエージェントがマネージャーからSetRequestを受信した場合,SNMPエージェントはFILE-NAMEに記述されたファイルを読み込む前後でPIPE-OUT-NAMEラベルに記述されたファイルにデータを書き込みます。UNIXプロセスは,PIPE-OUT-NAMEラベルに記述されたファイルからデータを受信して必要な処理を実行したあと,PIPE-IN-NAMEラベルに記述されたファイルにデータ(0)を書き込みます。
-
inetd(1M)の構成ファイルの内容を変更する。
SNMPエージェントがマネージャーからSetRequestを受信した場合,FILE-COMMANDラベルにUNIXコマンドが記述されていると,SNMPエージェントは,FILE-NAMEラベルに記述されたファイルの内容を書き換える前後でUNIXコマンドを実行します。これを利用してinetd(1M)の構成ファイルの内容を変更する場合の定義例を次に示します。
fInetdConf OBJECT-TYPE SYNTAX DisplayString ACCESS read-write STATUS mandatory DESCRIPTION "The configuration file for inetd FILE-COMMAND: /opt/OV/prg_samples/eagent /update_inetd $r FILE-COMMAND-FREQUENCY: 7200 FILE-NAME: /etc/inetd.conf" ::= { fconfig 1 }
SNMPエージェントが,マネージャーからオブジェクト識別子flintstones.fconfig.fInetdConf.0とMIBの値がinetd.conf構成ファイルの内容であるSetRequestを受信した場合,SNMPエージェント機能は次の順序で動作します。
-
/opt/OV/prg_samples/eagent/update_inetd SetRequestコマンドを実行します。
-
/etc/inetd.confファイルをSetRequestで指定されたSet値へ書き換えます。
-
/opt/OV/prg_samples/eagent/update_inetd PostSetRequestコマンドを実行します。
ここで/opt/OV/prg_samples/eagent/update_inetdコマンドは最初の引数をチェックし,引数がPostSetRequestの場合,/opt/OV/prg_samples/eagent/update_inetdコマンドは/etc/inetd -cを実行します。このコマンドによって/etc/inetdは構成ファイルを再度読み込みます。
-