Hoewel u het vereiste indexnummer (bijvoorbeeld van een netwerkinterface) kunt vinden tussen de SNMP-OID's, kunt u soms niet volledig vertrouwen op het indexnummer dat altijd hetzelfde blijft.
Indexnummers kunnen dynamisch zijn - ze kunnen in de loop van de tijd veranderen en uw item kan daardoor stoppen met werken.
Om dit scenario te vermijden, is het mogelijk om een OID te definiëren die rekening houdt met de mogelijkheid dat een indexnummer verandert.
Bijvoorbeeld, als u de indexwaarde moet ophalen om toe te voegen aan ifInOctets die overeenkomt met de interface GigabitEthernet0/1 op een Cisco-apparaat, gebruikt u de volgende OID:
Er wordt een speciale syntaxis voor OID gebruikt:
<OID van gegevens>["index","<basis OID van index>","<te zoeken string>"]
Parameter | Beschrijving |
---|---|
OID van gegevens | Hoofd OID die wordt gebruikt voor het ophalen van gegevens voor het item. |
index | Methode voor verwerking. Momenteel wordt één methode ondersteund: index - zoek naar index en voeg het toe aan de gegevens OID |
basis OID van index | Deze OID wordt opgezocht om de indexwaarde te krijgen die overeenkomt met de string. |
te zoeken string | De string die wordt gebruikt voor een exacte overeenkomst met een waarde bij het opzoeken. Hoofdlettergevoelig. |
Het verkrijgen van het geheugengebruik van het apache-proces.
Als u deze OID-syntaxis gebruikt:
wordt het indexnummer hier opgezocht:
...
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"
...
Nu hebben we de index, namelijk 5388. De index wordt toegevoegd aan de gegevens OID om de waarde te ontvangen waarin we geïnteresseerd zijn:
Wanneer een item met een dynamische index wordt aangevraagd, haalt Zabbix de volledige SNMP-tabel onder de basis OID voor de index op en plaatst deze in de cache, zelfs als er eerder een overeenkomst zou zijn gevonden. Dit gebeurt voor het geval een ander item later zou verwijzen naar dezelfde basis OID - Zabbix zou de index in de cache opzoeken, in plaats van de bewaakte host opnieuw te bevragen. Merk op dat elk poller-proces een aparte cache gebruikt.
Bij alle daaropvolgende bewerkingen voor het ophalen van waarden wordt alleen de gevonden index geverifieerd. Als deze niet is gewijzigd, wordt de waarde opgevraagd. Als deze is gewijzigd, wordt de cache opnieuw opgebouwd - elke poller die een gewijzigde index tegenkomt, doorloopt de SNMP-tabel voor de index opnieuw.