Прослушиватель SNMP не может прочитать ловушку из идентификаторов OID, которые являются записями в таблице - PullRequest
0 голосов
/ 19 марта 2019

Я написал слушатель SNMP на Java, используя библиотеку TNM4J, которая использует библиотеку SNMP4J.

Слушатель может читать полученные ловушки, за исключением ловушек, которые, по-видимому, проиндексированы в таблице.

Слушатель прослушивает прерывания от объекта Ericsson, что означает, что я использую ERICSSON-ALARM-MIB, и MIB импортирует, что ему нужно. Ловушка, которую я получаю, это eriAlarmActiveManagedObject с OID .1.3.6.1.4.1.193.183.4.1.3.5.1.5, но я также проверил его локально с другими ловушками в таблице, и такая же ошибка возникает

Если посмотреть на https://mibs.observium.org/mib/ERICSSON-ALARM-MIB/:

enter image description here

Все ловушки из такой таблицы не могут быть прочитаны слушателем. Это дает индекс из связанной исключительной ситуации из метода extractIndexes в MibbleIndexExtractor.java в библиотеке TNM4J.

@Override
public IndexDescriptor[] extractIndexes(String instanceOid) {
    String oid = symbol.getValue().toString();
    String suboid = instanceOid.substring(oid.length() + 1);
    int[] components = oidToArray(suboid);
    int offset = 0;
    IndexDescriptor[] descriptors = new IndexDescriptor[indexes.length];
    for (int i = 0; i < indexes.length; i++) {
        SnmpIndex index = indexes[i];
        MibValueSymbol indexSymbol = symbol.getMib().getSymbolByOid(index.getValue().toString());
        MibType indexType = ((SnmpObjectType) indexSymbol.getType()).getSyntax();
        int length = fixedLength(indexType);
        boolean implied = length != -1 || index.isImplied();
        if (length == -1) {
            length = variableLength(indexType, components, offset, index.isImplied());
        }
        int[] encoded = new int[length];
        System.arraycopy(components, offset, encoded, 0, length);

        descriptors[i] = new MibbleIndexDescriptor(indexSymbol, encoded, implied);
        offset += length;
    }
    return descriptors;
}

Я отладил его, и это происходит потому, что oid String и instanceOid String идентичны, что, конечно, вызывает исключение, когда создается подчиненная строка.

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

Есть предложения о том, как решить эту проблему?

1 Ответ

0 голосов
/ 21 марта 2019

После общения с разработчиком TNM4J он сделал несколько исправлений в своей библиотеке.

После этого oids Ericsson правильно переводился. Было несколько пропущенных переводов с oids, что было связано с порядком загрузки MIB.

Повторная настройка заставила его работать.

Для всех, кто интересуется процессом устранения неполадок с разработчиком, можете посмотреть его здесь: https://github.com/soulwing/tnm4j/issues/9

...