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 が得られました。 このインデックスは、取得したい値を受け取るために data OID に追加されます:
HOST-RESOURCES-MIB::hrSWRunPerfMem.5388 = INTEGER: 31468 KBytes
インデックス検索のキャッシュ
動的インデックスのアイテムが要求されると、Zabbix は、より早く一致が見つかる場合でも、インデックス用のベース OID 配下にある SNMP テーブル全体を取得してキャッシュします。
これは、後で別のアイテムが同じベース OID を参照する場合に備えたものです。Zabbix は、監視対象のホストに再度問い合わせる代わりに、キャッシュ内でインデックスを検索します。
なお、各ポーラープロセスは個別のキャッシュを使用します。
その後のすべての値取得操作では、見つかったインデックスのみが検証されます。
変更されていなければ、値が要求されます。
変更されている場合はキャッシュが再構築されます。インデックスの変更に遭遇した各ポーラーは、インデックス SNMP テーブルを再度走査します。