Superfast parallel snmpbulkwalk
Fastsnmpy is a module that leverages python-extensions that come with net-snmp and provide highly parallelized faster-methods to walk oid-trees on devices.
In addition, it provides a method to bulkwalk mib-trees..
BulkWalk methods are missing from native python-bindings for net-snmp. By creating a wrapper around the GetBulk method instead, and maintaining state while traversing the oid-tree, fastsnmpy provides a clever solution to bulkwalk oids much faster
FastSNMPy provides the following:
- snmpwalk(): Native python-bindings distributed with net-snmp, combined with fastsnmpy’s ability to parallelize snmpwalk operations.
- snmpbulkwalk(): Ability to snmpbulkwalk devices, which makes it several magnitudes faster than net-snmp’s implementation of snmpwalk.
- By leveraging the getbulk method, this module provides a quick snmpbulkwalk utility.
- PROCESS-POOLS: By passing in a ‘workers=n’ attribute to the above methods, fastsnmpy can instantiate a process-pool to parallelize the snmpwalk and snmpbulkwalk methods, resulting in several devices being walked at the same time, effectively using all cores on a multicore machine.
- One-Line, and Two-Line scripts that enable you to discover/walk all devices in a whole datacenter
Quick example – Running in interactive mode
Python 2.7.10 (default)
<blockquote>
>>import netsnmp
>>from fastsnmpy import SnmpSession
>> hosts =['c7200-2','c7200-1','c2600-1','c2600-2']
>> oids =['ifDescr','ifIndex','ifName','ifDescr']
>> newsession = SnmpSession ( targets = hosts, oidlist = oids, community='oznet')
>> results = newsession.snmpbulkwalk(workers=15)
>>len(results)
171031
>>
Note: To use the module in scripts, please see the example.py included with the package.
Benchmarks
(1) Walking 30 nodes for ifDescr using snmpwalk():
time ./fastsnmpy.py
real 0m18.63s
user 0m1.07s
sys 0m0.38s
(2) Walking 30 nodes for ifDescr using snmpbulkwalk():
time ./fastsnmpy.py
real 0m9.17s
user 0m0.48s
sys 0m0.11s
(3) Walking 30 nodes for ifDescr using snmpwalk(workers=10):
time ./fastsnmpy.py
real 0m2.27s
user 0m2.87s
sys 0m0.66s
(4) Walking 30 nodes for ifDescr using snmpbulkwalk(workers=10):
time ./fastsnmpy.py
real 0m0.90s
user 0m2.44s
sys 0m0.40s
As you can see, fastsnmpy’s bulkwalk mode is almost 20 times faster than using python’s native snmp bindings for walking