我一直在尋找一種方法來使用pysnmp在SNMP代理運行期間動態更新SNMP表。但到目前爲止沒有運氣...使用Pysnmp從代理端動態更新SNMP表
該表已經在MIB文件中定義(見下文),但它似乎我需要覆蓋其「readGet()」方法,以便從當前返回正確的數據系統狀況。
我能SNMP代理啓動之前建立與預定義值的靜態表的說明,以及SNMP代理啓動後:
# 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
是能夠回報我的期望值。
但是對於我的系統,它會動態生成很多告警信息,這些信息需要更新到SNMP的MIB表中,允許其他SNMP管理器發送「get/getNext」從我的系統中獲取告警信息。
所以我想知道
- 有沒有辦法在pysnmp做到這一點?
- 或我必須始終靜態更新我的報警表?然後在每次更新操作後重新啓動SNMP代理?
- 或者我必須在SNMP代理程序啓動期間使用所有可能的2147483647實例初始化我的報警表?並使用「名稱[-1]」從每個查詢中獲取索引/行號?
如果是這樣,getNext查詢怎麼樣?它會忽略那些空錶行嗎?或者它總是返回下一個,即使它是一個虛擬的?
- 還是有更好的方法來從查詢消息中獲取「索引/行」號碼嗎?
@Ilya Etingof,pysnmp的專家。如果你有時間,你能幫助我嗎?
BR, -Dapeng焦該告警表
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")