1 Динамические индексы

Обзор

Хотя вы может быть и найдете требуемый номер индекса (например, сетевого интерфейса) из всех SNMP OID'ов, иногда вы не можете полностью положиться на номер индекса то, что номер индекса всегда останется таким же.

Индексы могут быть динамическими - они могут изменяться время от времени и, как следствие, ваш элемент данных может перестать работать.

Чтобы избежать этого, имеется возможность указать OID, который принимает во внимание возможность изменения номера индекса.

Например, если вам необходимо получить значение индекса, который относится к ifInOctets, которое соответствует интерфейсу GigabitEthernet0/1 на устройстве Cisco, используйте следующий OID:

ifInOctets["index","ifDescr","GigabitEthernet0/1"]
Синтаксис

Для OID используется специальный синтаксис:

<OID данных>["index","<базовый OID индекса>","<искомая строка>"]

Параметр Описание
OID данных Основной OID, который используется для получения данных по элементу данных.
index Метод обработки. В настоящее время поддерживается только один метод:
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 извлекает и кэширует всю таблицу SNMP под базовым OID, даже если совпадение будет найдено ранее. Это делается на случай, если другой элемент данных в дальнейшем ссылается на тот же самый базовый OID - Zabbix будет искать индекс в кэше, вместо еще одного запроса к наблюдаемому устройству . Обратите внимание, каждый процесс поллера использует свой собственный кэш.

Во всех последующих операциях получения значений проверяется только найденный индекс. Если он не изменился, значение запрашивается. Если он изменился, кэш перестраивается - каждый поллер, который встречает измененный индекс снова проходит и кэширует таблицу индексов SNMP.