1 ダイナミックインデックス
概要
必要なインデックス番号(例えばネットワークインターフェースのもの)はSNMP OIDの中から見つけられる場合がありますが、インデックス番号が常に同じままであるとは限りません。
インデックス番号は動的である可能性があり、時間の経過とともに変化して、その結果アイテムが動作しなくなることがあります。
このような状況を避けるために、インデックス番号が変化する可能性を考慮したOIDを定義できます。
例えば、Ciscoデバイス上の GigabitEthernet0/1 インターフェースに対応する ifInOctets に付加するインデックス値を取得する必要がある場合は、次のOIDを使用します。
ifInOctets["index","ifDescr","GigabitEthernet0/1"]
構文
OIDには特別な構文が使用されます:
<データのOID>["index","<インデックスのベースOID>","<検索する文字列>"]
| Parameter | Description |
|---|---|
| データのOID | アイテムでデータ取得に使用するメインOID。 |
| index | 処理方法。現在は1つの方法のみサポートされています: index - インデックスを検索し、それをデータOIDに追加します |
| インデックスのベースOID | このOIDを参照して、文字列に対応するインデックス値を取得します。 |
| 検索する文字列 | 参照時に値と完全一致させるために使用する文字列。大文字と小文字は区別されます。 |
例
apache プロセスのメモリ使用量を取得します。
このOID構文を使用する場合:
HOST-RESOURCES-MIB::hrSWRunPerfMem["index","HOST-RESOURCES-MIB::hrSWRunPath", "/usr/sbin/apache2"]
インデックス番号はここで検索されます:
...
HOST-RESOURCES-MIB::hrSWRunPath.5376 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5377 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5388 = STRING: "/usr/sbin/apache2"
HOST-RESOURCES-MIB::hrSWRunPath.5389 = STRING: "/sbin/sshd"
...
これで、インデックス 5388 が得られました。
目的の値を受け取るために、このインデックスがデータOIDに追加されます:
HOST-RESOURCES-MIB::hrSWRunPerfMem.5388 = INTEGER: 31468 KBytes
インデックス検索キャッシュ
動的インデックスアイテムが要求されると、Zabbixは一致がより早く見つかる場合でも、インデックス用のベースOID配下のSNMPテーブル全体を取得してキャッシュします。
これは、後で別のアイテムが同じベースOIDを参照する場合に備えて行われます。この場合、Zabbixは監視対象のホストに再度問い合わせる代わりに、キャッシュ内でインデックスを検索します。
なお、各ポーラープロセスはそれぞれ独立したキャッシュを使用します。
以降のすべての値取得処理では、見つかったインデックスのみが検証されます。
変更されていなければ、値が要求されます。
変更されていた場合はキャッシュが再構築されます。インデックスの変更を検出した各ポーラーは、インデックスSNMPテーブルを再度walkします。