Я пытаюсь контролировать процесс python с помощью opennms. Для этого мне нужно реализовать агента, который поддерживает HOST-RESOURCES-MIB. Opennms проверяет состояние процесса, проверяя hrSwRunTable из HOST-RESOURCES-MIB. Тест выполняется путем сопоставления данного процесса как hrSwRunName с числовым значением hrSwRunState.Агент pysnmp с HOST-RESOURCES-MIB
pysnmp дает несколько примеров написания агента, который я пытаюсь изменить, но у меня нет большого успеха.
соответствующая часть моего кода следующим образом
import logging
from pysnmp import debug
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdrsp, context
from pysnmp.proto.api import v2c
from pysnmp.smi import builder, instrum, exval
debug.setLogger(debug.Debug('all'))
formatting = '[%(asctime)s-%(levelname)s]-(%(module)s) %(message)s'
logging.basicConfig(level=logging.DEBUG, format=formatting,)
logging.info("Starting....")
# Create SNMP engine
snmpEngine = engine.SnmpEngine()
# Transport setup
# UDP over IPv4
config.addTransport(
snmpEngine,
udp.domainName,
udp.UdpTransport().openServerMode(('mypc', 12345))
)
# SNMPv2c setup
# SecurityName <-> CommunityName mapping.
config.addV1System(snmpEngine, 'my-area', 'public')
# Allow read MIB access for this user/securityModels at VACM
config.addVacmUser(snmpEngine, 2, 'my-area', 'noAuthNoPriv', (1, 3, 6, 1, 2, 1, 25, 4, 2), (1, 3, 6, 1, 2, 1, 25, 4, 2))
# Create an SNMP context
snmpContext = context.SnmpContext(snmpEngine)
# --- define custom SNMP Table within a newly defined EXAMPLE-MIB ---
# ==================================================================
logging.debug('Loading SNMP-TARGET-MIB module...'),
mibBuilder1 = builder.MibBuilder().loadModules('SNMP-TARGET-MIB')
logging.debug('done')
logging.debug('Building MIB tree...'),
mibInstrum1 = instrum.MibInstrumController(mibBuilder1)
logging.debug('done')
logging.debug('Building table entry index from human-friendly representation...')
snmpTargetAddrEntry, = mibBuilder1.importSymbols('SNMP-TARGET-MIB', 'snmpTargetAddrEntry')
instanceId1 = snmpTargetAddrEntry.getInstIdFromIndices('my-area')
# ==================================================================
logging.debug('Loading HOST-RESOURCES-MIB module...'),
mibBuilder = builder.MibBuilder().loadModules('HOST-RESOURCES-MIB')
logging.debug('done')
logging.debug('Building MIB tree...'),
mibInstrum = instrum.MibInstrumController(mibBuilder)
logging.debug('done')
logging.debug('Building table entry index from human-friendly representation...')
# see http://www.oidview.com/mibs/0/HOST-RESOURCES-MIB.html
hostRunTable, = mibBuilder.importSymbols('HOST-RESOURCES-MIB', 'hrSWRunEntry')
instanceId = hostRunTable.getInstIdFromIndices('my-area')
logging.debug('done')
Вы увидите, что в конце кода я пытаюсь генерировать экземпляр «SNMP-TARGET-MIB-> snmpTargetAddrEntry» и ' HOST-RESOURCES-MIB-> hrSWRunEntry. Код для SNMP-TARGET-MIB (который находится в документации pysnmp) работает отлично, однако код, который пытается сгенерировать HOST-RESOURCES-MIB, терпит неудачу, когда я пытаюсь создать экземпляр в строке instanceId = hostRunTable.getInstIdFromIndices('my-area')
Ошибка is pyasn1.error.PyAsn1Error: Can't coerce 'my-area' into integer: invalid literal for int() with base 10: 'my-area'
Может ли кто-нибудь пролить свет на то, что я делаю неправильно? Я понимаю, что я новичок в SNMP и поэтому вполне возможно, его глупая ошибка
Спасибо за ваш комментарий. Это было очень полезно. У меня все еще есть проблемы с тем, что мой SNMP-агент не работает. Будете ли вы любезны взглянуть на мою другую публикацию, чтобы увидеть, можете ли вы пролить свет? http://stackoverflow.com/questions/41384941/using-pysnmp-to-write-an-snmp-agent –