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します。