Hitachi

JP1 Version 12 JP1/Extensible SNMP Agent


2.10.11 拡張MIBオブジェクトの定義例

拡張MIBオブジェクトの定義例を次の順で説明します。

〈この項の構成〉

(1)  MIBオブジェクトの定義

ユーザーがFlintstones Companyの社員の場合で,次に示す目的でMIBオブジェクトを記述します。

  1. システムを使用しているユーザーをリストアップする。

  2. 各マシンのメモリーの内容を参照する。

  3. メールキューを管理する。

  4. 無人のシステムで1時間当たりに発生するウィジェット数を管理する。

  5. LPスケジューラを見失わないようにする。

  6. デフォルトのプリンタを参照する。

  7. ユーザーID,ユーザーが使用しているディスクスペース,ユーザーのemailのアドレスリストを参照する。

  8. ルートプロセスの一覧を出力する。

  9. 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ツリーの構成を次の図に示します。

図2‒8 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オブジェクト定義ごとに定義内容を説明します。

操作手順

  1. システムを使用しているユーザーをリストアップする。

    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
  2. 各マシンのメモリーの内容を参照する。

    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の値を応答します。

  3. メールキューを管理する。

    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 }
  4. 無人のシステムで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) スクリプトまたはプログラムの記述」の引数の説明を参照してください。

  5. 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 }
  6. デフォルトのプリンタを参照する。

    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ファイルを読み込んで,マネージャーに応答します。

  7. ユーザー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ファイル中のテーブルの内容を指定された値に書き換えます。

  8. ルートプロセスの一覧を出力する。

    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)を書き込みます。

  9. 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は構成ファイルを再度読み込みます。