Ich hatte eine Möglichkeit gesucht, pysnmp zu verwenden, um eine SNMP-Tabelle während laufendem SNMP-Agent dynamisch zu aktualisieren. Aber bisher kein Glück ...Verwenden Sie Pysnmp, um SNMP-Tabelle dynamisch von der Agentenseite zu aktualisieren
Die Tabelle bereits hatte in MIB-Datei (siehe unten) definiert, aber es scheint, ich brauche seine „readGet()“ Methode, um zu überschreiben korrekte Daten von aktuellem zurückzukehren Systemstatus.
Nach den Anweisungen von http://pysnmp.sourceforge.net/examples/v3arch/asyncore/agent/cmdrsp/agent-side-mib-implementations.html#implementing-conceptual-table
Ich bin der Lage, eine statische Tabelle mit vordefinierten Wert, bevor SNMP-Agenten Inbetriebnahme und nach SNMP-Agent Startup zu bauen:
# 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
es ist kann meinen erwarteten Wert zurückgeben.
Aber für mein System wird es dynamisch viele Alarminformationen generieren, und diese Informationen müssen in SNMP MIB-Tabelle aktualisiert werden, die andere SNMP-Manager senden "Get/getNext" Alarminformationen aus meinem System abrufen können.
So würde Ich mag
- wissen, ist es eine Möglichkeit, dies in pysnmp zu tun?
- oder muss ich meine Alarmtabelle immer statisch aktualisieren? und dann den SNMP-Agenten nach jeder Update-Aktion neu starten?
- oder muss ich beim Start des SNMP-Agenten meine Alarmtabelle mit allen möglichen 2147483647-Instanzen initialisieren? und benutze "name [-1]", um die Index-/Zeilennummer von jeder Abfrage zu erhalten?
Wenn ja, wie wäre es mit getNext Abfrage? Wird diese leere Tabellenzeile ignoriert? oder es kommt immer als nächstes zurück, auch wenn es ein Dummy ist?
- oder gibt es eine bessere Möglichkeit, die "index/row" -Nummer aus der Abfragenachricht abzurufen?
@Ilya Etingof, der Experte von pysnmp. Könntest du mir helfen, wenn du Zeit hast?
Br, -Dapeng Jiao
1.
MIB-Datei Definition dieser Alarmtabelle (einige sensible Informationen werden entfernt)
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")