Я искал способ использования pysnmp для динамического обновления SNMP-таблицы во время работы SNMP-агента. Но до сих пор не повезло ...Использование Pysnmp для динамического обновления SNMP-таблицы со стороны агента
таблица не была уже определена в MIB файле (см ниже), но, кажется, мне нужно переписать его метод «readGet()» для того, чтобы вернуть правильные данные из потока состояние системы.
В соответствии с инструкциями http://pysnmp.sourceforge.net/examples/v3arch/asyncore/agent/cmdrsp/agent-side-mib-implementations.html#implementing-conceptual-table
Я могу построить статическую таблицу с заранее определенным значением перед запуском SNMP агента, и после запуска SNMP Agent:
# Register an imaginary never-ending job to keep I/O dispatcher running forever
self.snmpEngine.transportDispatcher.jobStarted(1)
# Run I/O dispatcher which would receive queries and send responses
try:
self.snmpEngine.transportDispatcher.runDispatcher()
except:
self.snmpEngine.transportDispatcher.closeDispatcher()
raise
оно способный вернуть ожидаемое значение.
Но для моей системы он будет динамически генерировать много информации о тревоге, и эта информация должна быть обновлена в таблице MIB SNMP, что позволяет другому диспетчеру SNMP отправлять «get/getNext» для извлечения информации о тревоге из моей системы.
Так что я хотел бы знать,
- есть способ сделать это в pysnmp?
- или мне нужно постоянно обновлять таблицу аварийных сигналов? а затем перезапустить агент SNMP после каждого действия по обновлению?
- или мне нужно инициализировать мою таблицу тревог со всеми возможными экземплярами 2147483647 во время запуска агента SNMP? и использовать «имя [-1]», чтобы получить номер индекса/строки из каждого запроса?
если так, как насчет запроса getNext? игнорирует ли эти строки пустую таблицу? или он всегда возвращает следующий, даже это фиктивный?
- или есть лучший способ получить номер «индекс/строка» из сообщения запроса?
@Ilya Etingof, эксперт pysnmp. Не могли бы вы мне помочь, если у вас есть время?
Br, -Dapeng Jiao
1.
MIB файл определения этой таблица тревог (некоторая чувствительная информация удаляется)
alarmTable = MibTable((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3))
alarmEntry = MibTableRow((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1)).setIndexNames((0, "MY-MIB", "alarmIndex"))
alarmIndex = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 1), Integer32().subtype(subtypeSpec=ValueRangeConstraint(1, 2147483647))).setMaxAccess("readonly")
alarmId = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 2), Integer32().subtype(subtypeSpec=ValueRangeConstraint(1, 2147483647))).setMaxAccess("readonly")
alarmName = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 3), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmSeverity = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 4), AlarmSeverity()).setMaxAccess("readonly")
alarmTime = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 5), DateAndTime()).setMaxAccess("readonly")
alarmType = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 6), AlarmType()).setMaxAccess("readonly")
alarmSource = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 7), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmCategory = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 8), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmProbableCause = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 9), ProbableCause()).setMaxAccess("readonly")
alarmComparable = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 10), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")
alarmAdditionalText = MibTableColumn((1, 3, 6, *, *, *, *, *, *, *, *, *, , 3, 1, 11), DisplayString().subtype(subtypeSpec=ValueSizeConstraint(0, 255))).setMaxAccess("readonly")