Embora você possa encontrar o número de índice necessário (por exemplo, de uma interface de rede) entre os OIDs SNMP, às vezes você pode não confiar completamente que o número de índice sempre permanecerá o mesmo.
Os números de índice podem ser dinâmicos - eles podem mudar ao longo do tempo e seu item pode parar de funcionar como consequência.
Para evitar esse cenário, é possível definir um OID que leve em consideração a possibilidade de um número de índice mudar.
Por exemplo, se você precisar recuperar o valor do índice para anexar ao ifInOctets que corresponde à interface GigabitEthernet0/1 em um dispositivo Cisco, use o seguinte OID:
Uma sintaxe especial para OID é usada:
<OID dos dados>["index","<OID base do índice>","<string a ser pesquisada>"]
| Parâmetro | Descrição |
|---|---|
| OID dos dados | OID principal a ser usado para a recuperação de dados no item. |
| index | Método de processamento. Atualmente, um método é suportado: index – procura pelo índice e o adiciona ao OID de dados |
| OID base do índice | Este OID será consultado para obter o valor do índice correspondente à string. |
| string a ser pesquisada | A string a ser usada para uma correspondência exata com um valor ao fazer a pesquisa. Sensível a maiúsculas e minúsculas. |
Obtendo o uso de memória do processo apache.
Se usar esta sintaxe OID:
o número do índice será procurado aqui:
...
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"
...Agora temos o índice, 5388. O índice será anexado ao OID de dados para receber o valor que nos interessa:
Quando um item de índice dinâmico é solicitado, o Zabbix recupera e armazena em cache toda a tabela SNMP sob o OID base para o índice, mesmo que uma correspondência seja encontrada antes. Isso é feito para o caso de outro item referenciar o mesmo OID base posteriormente - o Zabbix procuraria o índice no cache, em vez de consultar o host monitorado novamente. Observe que cada processo poller usa um cache separado.
Em todas as operações subsequentes de recuperação de valor, apenas o índice encontrado é verificado. Se ele não mudou, o valor é solicitado. Se ele mudou, o cache é reconstruído - cada poller que encontra um índice alterado percorre novamente a tabela SNMP do índice.