SNMP client (manager) library for Go with support for SMI MIBs.
REST (HTTP/JSON) API for writing SNMP applications.
The easiest way to run snmpbot
is using the pre-built Docker image:
$ docker run --net=host qmsk/snmpbot
INFO mibs: Load MIBs from directory: /opt/qmsk/snmpbot/mibs
...
INFO web: Listen on :8286...
The pre-build Docker images contain the most common MIB definitions.
You can then query the API at :8286
:
{
"ID": "SNMPv2-MIB::sysDescr",
"Instances": [
{
"HostID": "public@localhost",
"Value": "Linux tehobari 4.15.0-33-generic #36~16.04.1-Ubuntu SMP Wed Aug 15 17:21:05 UTC 2018 x86_64"
}
]
}
You can query an object with multiple instances, and snmpbot
will parse the OID indexes:
{
"ID": "IF-MIB::ifName",
"IndexKeys": [
"IF-MIB::ifIndex"
],
"Instances": [
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 1
},
"Value": "lo"
},
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 2
},
"Value": "enp0s31f6"
},
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 4
},
"Value": "wlp4s0"
},
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 5
},
"Value": "docker0"
},
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 95
},
"Value": "wwp0s20f0u3c2"
}
]
}
You can also query tables, and snmpbot
will group the objects into entries with indexes:
{
"ID": "IF-MIB::ifTable",
"IndexKeys": [
"IF-MIB::ifIndex"
],
"ObjectKeys": [
"IF-MIB::ifIndex",
"IF-MIB::ifDescr",
"IF-MIB::ifType",
"IF-MIB::ifMtu",
"IF-MIB::ifSpeed",
"IF-MIB::ifPhysAddress",
"IF-MIB::ifAdminStatus",
"IF-MIB::ifOperStatus",
"IF-MIB::ifLastChange",
"IF-MIB::ifInOctets",
"IF-MIB::ifInUcastPkts",
"IF-MIB::ifInNUcastPkts",
"IF-MIB::ifInDiscards",
"IF-MIB::ifInErrors",
"IF-MIB::ifInUnknownProtos",
"IF-MIB::ifOutOctets",
"IF-MIB::ifOutUcastPkts",
"IF-MIB::ifOutNUcastPkts",
"IF-MIB::ifOutDiscards",
"IF-MIB::ifOutErrors",
"IF-MIB::ifOutQLen",
"IF-MIB::ifSpecific"
],
"Entries": [
{
"HostID": "public@localhost",
"Index": {
"IF-MIB::ifIndex": 1
},
"Objects": {
"IF-MIB::ifAdminStatus": "up",
"IF-MIB::ifDescr": "lo",
"IF-MIB::ifInDiscards": 0,
"IF-MIB::ifInErrors": 0,
"IF-MIB::ifInNUcastPkts": 0,
"IF-MIB::ifInOctets": 1692789727,
"IF-MIB::ifInUcastPkts": 1086499,
"IF-MIB::ifInUnknownProtos": 0,
"IF-MIB::ifIndex": 1,
"IF-MIB::ifLastChange": 0,
"IF-MIB::ifMtu": 65536,
"IF-MIB::ifOperStatus": "up",
"IF-MIB::ifOutDiscards": 0,
"IF-MIB::ifOutErrors": 0,
"IF-MIB::ifOutNUcastPkts": 0,
"IF-MIB::ifOutOctets": 1692789727,
"IF-MIB::ifOutQLen": 0,
"IF-MIB::ifOutUcastPkts": 1086499,
"IF-MIB::ifPhysAddress": "",
"IF-MIB::ifSpecific": ".0.0",
"IF-MIB::ifSpeed": 10000000,
"IF-MIB::ifType": "softwareLoopback"
}
},
...
]
}
See the remainder of the README for more advanced usage, including:
- Querying multiple objects in parallel
- Querying multiple tables in parallel
- Configuring hosts (static TOML config file, or dynamic HTTP
POST/PUT/DELETE
API) - Querying multiple hosts in parallel
SNMP MIBs must be pre-processed into a custom JSON format for use with snmpbot
.
Common pre-processed MIBs can be found at github.com/qmsk/snmpbot-mibs:
git clone https://github.com/qmsk/snmpbot-mibs
export SNMPBOT_MIBS=$PWD/snmpbot-mibs
Custom MIBs can be imported using the mib-import.py
script.
Low-level SNMP protocol support.
- Using github.com/geoffgarside/ber for BER decoding.
SNMP client with support for UDP queries
- Multiple parallel requests (goroutine-safe)
- Request timeout and retry
- Get request splitting (large numbers of OIDs)
SMI support for MIBs
- Initialize using
Load(path string)
to load the.json
MIB files - Resolving strings like
"interfaces::ifDescr"
to*Object
- Resolving OIDs like
ParseOID(".1.3.6.1.2.1.2.2.1.2")
to*Object
- Decoding SMI object
SYNTAX
tointerface{}
, includingencoding/json
support - Decoding SMI table
INDEX
syntax from OIDs
SNMP manager with REST API.
These are mostly meant for testing.
All of the commands support the same common flags:
-debug
Log debug
-quiet
Do not log warnings
-snmp-community string
Default SNMP community (default "public")
-snmp-maxvars uint
Maximum request VarBinds (default 10)
-snmp-mibs string
Load MIBs from path (default $SNMPBOT_MIBS)
-snmp-retry int
SNMP request retry
-snmp-timeout duration
SNMP request timeout (default 1s)
-snmp-udp-size uint
Maximum UDP recv size (default 1500)
-verbose
Log info
Apart from the snmpbot
command, the first argument is a SNMP address of the form [COMMUNITY@]HOST[:PORT]
, and the remainder are SMI objects of the form [MIB[::OBJECT]][.INDEX]
.
Testing GetRequest
; note that non-tabular SNMP objects cannot be fetched without the .0
instance suffix.
2017/11/18 22:02:49 VarBind[.1.3.6.1.2.1.1.1](system::sysDescr): SNMP VarBind Error: NoSuchInstance
system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
Testing GetNextRequest
The output is empty, because there is nothing in the system::sysDescr
tree after .0
.
system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
system::sysObjectID.0 = .1.3.6.1.4.1.4413
system::sysUpTime.0 = 2352h54m5s
system::sysContact.0 =
system::sysName.0 = UBNT EdgeSwitch
system::sysLocation.0 =
system::sysServices.0 = 6
system::sysORLastChange.0 = 1m7s
...
Q-BRIDGE-MIB::dot1qVlanStaticName[1] = default
Q-BRIDGE-MIB::dot1qVlanStaticName[2] = wan
Q-BRIDGE-MIB::dot1qVlanStaticName[1002] = iot
Q-BRIDGE-MIB::dot1qVlanStaticName[1003] = guest
Object indexes are decoded.
Very similar to snmpwalk
, but implemented slightly differently - only works for known objects, not arbitrary OIDs.
system::sysDescr = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000
interfaces::ifDescr[1] = Slot: 0 Port: 1 Gigabit - Level
interfaces::ifDescr[2] = Slot: 0 Port: 2 Gigabit - Level
interfaces::ifDescr[3] = Slot: 0 Port: 3 Gigabit - Level
interfaces::ifDescr[4] = Slot: 0 Port: 4 Gigabit - Level
Q-BRIDGE-MIB::dot1qTpFdbPort[1][44:xx:xx:xx:xx:19] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1][50:xx:xx:xx:xx:b2] = 2
Q-BRIDGE-MIB::dot1qTpFdbPort[1][70:xx:xx:xx:xx:e4] = 23
Q-BRIDGE-MIB::dot1qTpFdbPort[1][ac:xx:xx:xx:xx:c9] = 6
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:30] = 65
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:3f] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1][f0:xx:xx:xx:xx:45] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[2][00:xx:xx:xx:xx:27] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[2][70:xx:xx:xx:xx:e4] = 23
Q-BRIDGE-MIB::dot1qTpFdbPort[1002][74:xx:xx:xx:xx:c6] = 24
Q-BRIDGE-MIB::dot1qTpFdbPort[1002][f0:xx:xx:xx:xx:45] = 24
Use GetNextRequest
to probe the presence of subtrees, including entire MIBs or objects within MIBs
snmpprobe public@edgeswitch-098730 BRIDGE-MIB BRIDGE-MIB::dot1dBaseBridgeAddress BRIDGE-MIB::dot1dStpPortTable
BRIDGE-MIB = true
BRIDGE-MIB::dot1dBaseBridgeAddress = true
BRIDGE-MIB::dot1dStpPortTable = false
Use GetNextRequest
to walk and decode SMI tables
interfaces::ifIndex | interfaces::ifIndex interfaces::ifDescr interfaces::ifType interfaces::ifMtu interfaces::ifSpeed interfaces::ifPhysAddress interfaces::ifAdminStatus interfaces::ifOperStatus interfaces::ifLastChange
--- | --- --- --- --- --- --- --- --- ---
1 | 1 Slot: 0 Port: 1 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 2257h16m19s
2 | 2 Slot: 0 Port: 2 Gigabit - Level 6 1518 1000000000 f0:9f:c2:09:87:31 up up 2342h30m20s
3 | 3 Slot: 0 Port: 3 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 525h50m17s
4 | 4 Slot: 0 Port: 4 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
5 | 5 Slot: 0 Port: 5 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 1200h48m53s
6 | 6 Slot: 0 Port: 6 Gigabit - Level 6 1518 100000000 f0:9f:c2:09:87:31 up up 2318h40m45s
7 | 7 Slot: 0 Port: 7 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
8 | 8 Slot: 0 Port: 8 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
9 | 9 Slot: 0 Port: 9 Gigabit - Level 6 1518 10000000 f0:9f:c2:09:87:31 up up 2331h13m45s
10 | 10 Slot: 0 Port: 10 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
11 | 11 Slot: 0 Port: 11 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
12 | 12 Slot: 0 Port: 12 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
13 | 13 Slot: 0 Port: 13 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
14 | 14 Slot: 0 Port: 14 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
15 | 15 Slot: 0 Port: 15 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
16 | 16 Slot: 0 Port: 16 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
17 | 17 Slot: 0 Port: 17 Gigabit - Level 6 1518 100000000 f0:9f:c2:09:87:31 up up 1m17s
18 | 18 Slot: 0 Port: 18 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
19 | 19 Slot: 0 Port: 19 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
20 | 20 Slot: 0 Port: 20 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
21 | 21 Slot: 0 Port: 21 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
22 | 22 Slot: 0 Port: 22 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
23 | 23 Slot: 0 Port: 23 Gigabit - Level 6 1518 1000000000 f0:9f:c2:09:87:31 up up 1551h25m59s
24 | 24 Slot: 0 Port: 24 Gigabit - Level 6 1518 1000000000 f0:9f:c2:09:87:31 up up 382h12m33s
25 | 25 Slot: 0 Port: 25 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
26 | 26 Slot: 0 Port: 26 Gigabit - Level 6 1518 0 f0:9f:c2:09:87:31 up down 0s
65 | 65 CPU Interface for Slot: 5 Port: 1 1 1518 0 f0:9f:c2:09:87:30 up up 0s
66 | 66 Link Aggregate 1 1 1518 0 f0:9f:c2:09:87:31 up down 0s
67 | 67 Link Aggregate 2 1 1518 0 f0:9f:c2:09:87:31 up down 0s
68 | 68 Link Aggregate 3 1 1518 0 f0:9f:c2:09:87:31 up down 0s
69 | 69 Link Aggregate 4 1 1518 0 f0:9f:c2:09:87:31 up down 0s
70 | 70 Link Aggregate 5 1 1518 0 f0:9f:c2:09:87:31 up down 0s
71 | 71 Link Aggregate 6 1 1518 0 f0:9f:c2:09:87:31 up down 0s
LLDP-MIB::lldpRemTimeMark LLDP-MIB::lldpRemLocalPortNum LLDP-MIB::lldpRemIndex | LLDP-MIB::lldpRemChassisIdSubtype LLDP-MIB::lldpRemChassisId LLDP-MIB::lldpRemPortIdSubtype LLDP-MIB::lldpRemPortId LLDP-MIB::lldpRemPortDesc LLDP-MIB::lldpRemSysName LLDP-MIB::lldpRemSysDesc
--- --- --- | --- --- --- --- --- --- ---
21h59m32.24s 24 1 | macAddress f0 9f c2 64 6d 45 macAddress f0 9f c2 64 6d 45 switch0 erx-home UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113
21h59m32.24s 24 2 | macAddress f0 9f c2 64 6d 45 macAddress f0 9f c2 64 6d 3f eth0 erx-home UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113
This is the command using the server
to provide the HTTP REST API.
$ $GOPATH/bin/snmpbot -help
-config string
Load TOML config
-debug
Log debug
-http-listen string
HTTP server listen: [HOST]:PORT (default ":8286")
-http-static string
HTTP sever /static path: PATH
-quiet
Do not log warnings
-snmp-community string
Default SNMP community (default "public")
-snmp-maxvars uint
Maximum request VarBinds (default 10)
-snmp-mibs string
Load MIBs from path (default $SNMPBOT_MIBS)
-snmp-retry int
SNMP request retry
-snmp-timeout duration
SNMP request timeout (default 1s)
-snmp-udp-size uint
Maximum UDP recv size (default 1500)
-verbose
Log info
Examples:
$GOPATH/bin/snmpbot -config config.toml -http-listen :8286 -snmp-udp-size 9000 -snmp-maxvars 50
Loaded using snmpbot -config
[hosts.edgeswitch-098730]
SNMP = "public@edgeswitch-098730"
Location = "test"
[hosts.erx-home]
SNMP = "secret@erx-home"
Location = "home"
The configuration file is optional, dynamic hosts can be queried without any config, using GET /hosts/...?snmp=community@host
(also -snmp-community=...
).
NOTE: The mass-querying /objects/...
and /tables/...
endpoints only query configured objects.
See the api
package docs for the exact details
{
"Hosts" : [
{
"ID" : "edgeswitch-098730",
"SNMP" : "[email protected]:161"
},
{
"ID" : "erx-home",
"SNMP" : "[email protected]:161"
}
],
"MIBs" : [
{
"ID" : "IF-MIB"
},
...
],
"Tables" : [
{
"ID" : "Q-BRIDGE-MIB::dot1qVlanStaticTable",
"ObjectKeys" : [
"Q-BRIDGE-MIB::dot1qVlanStaticName",
"Q-BRIDGE-MIB::dot1qVlanStaticEgressPorts",
"Q-BRIDGE-MIB::dot1qVlanForbiddenEgressPorts",
"Q-BRIDGE-MIB::dot1qVlanStaticUntaggedPorts",
"Q-BRIDGE-MIB::dot1qVlanStaticRowStatus"
],
"IndexKeys" : [
"Q-BRIDGE-MIB::dot1qVlanIndex"
]
},
...
],
"Objects" : [
{
"IndexKeys" : [
"interfaces::ifIndex"
],
"ID" : "interfaces::ifDescr"
},
{
"ID" : "system::sysContact"
},
...
]
}
Query configured hosts.
[
{
"ID" : "edgeswitch-098730",
"SNMP" : "[email protected]:161"
},
...
]
Configure a new host. The new host will show up in /hosts/
and can be queried via the /objects/...
and /tables/...
endpoints.
{
"ID" : "edgeswitch-098730",
"SNMP" : "[email protected]:161",
"Online": true,
...
}
Response is as for GET
.
Returns HTTP 409 Conflict if the host is already configured. Use PUT /v1/hosts/:id
instead.
{
"ID": "test",
"SNMP": "[email protected]",
"Location": "testing"
}
id=test&[email protected]&location=testing
Query information about a specific configured host.
{
"ID" : "edgeswitch-098730",
"SNMP" : "[email protected]:161",
"Location": "testing",
"Online": true
}
Note: Does not return anything useful for a dynamic host.
Add or replace a configured host.
{
"ID" : "edgeswitch-098730",
"SNMP" : "[email protected]:161",
"Online": true,
...
}
Response is as for GET
.
{
"SNMP": "[email protected]",
"Location": "testing"
}
[email protected]&location=testing
Remove a configured host.
Returns HTTP 204 No Content.
GET /api/hosts/test/[email protected]
Query a dynamic host using an arbitrary ?snmp=[<community> "@"] <host>
target.
The [<community> "@"]
is optional, and defaults to the -config
=> [ClientOptions] Community=
or -snmp-community
.
{
"MIBs" : [
{
"ID" : "SNMPv2-MIB"
},
...
],
"ID" : "test",
"SNMP" : "[email protected]:161"
}
The given SNMP host will be probed for supported MIBs.
NOTE: The ?snmp=
query parameter works for all host API paths, but is ignored for configured hosts.
Query host with information about tables/objects for probed MIBs.
{
"ID" : "edgeswitch-098730",
"Objects" : [
{
"ID" : "system::sysObjectID"
},
...
],
"Tables" : [
{
"IndexKeys" : [
"BRIDGE-MIB::dot1dStpPort"
],
"ObjectKeys" : [
"BRIDGE-MIB::dot1dStpPort",
"BRIDGE-MIB::dot1dStpPortPriority",
"BRIDGE-MIB::dot1dStpPortState",
"BRIDGE-MIB::dot1dStpPortEnable",
"BRIDGE-MIB::dot1dStpPortPathCost",
"BRIDGE-MIB::dot1dStpPortDesignatedRoot",
"BRIDGE-MIB::dot1dStpPortDesignatedCost",
"BRIDGE-MIB::dot1dStpPortDesignatedBridge",
"BRIDGE-MIB::dot1dStpPortDesignatedPort",
"BRIDGE-MIB::dot1dStpPortForwardTransitions"
],
"ID" : "BRIDGE-MIB::dot1dStpPortTable"
},
...
],
"MIBs" : [
{
"ID" : "SNMPv2-MIB"
},
...
],
"SNMP" : "[email protected]:161"
}
Query a specific table for a specific host (dynamic or configured).
{
"ObjectKeys" : [
...
],
"IndexKeys" : [
...
],
"Entries" : [
...
],
"ID" : "LLDP-MIB::lldpRemTable"
}
Note: The queried table does not necessarily need to belong to a probed MIB.
Query multiple tables from probed mibs for a specific host (dynamic or configured).
Use multiple ?table=A&table=B
filters to query different tables.
Use (multiple) ?host=test-*
query parameters to limit queried hosts.
[
{
"ObjectKeys" : [
"LLDP-MIB::lldpLocPortIdSubtype",
"LLDP-MIB::lldpLocPortId",
"LLDP-MIB::lldpLocPortDesc"
],
"Entries" : [
{
"HostID" : "edgeswitch-098730",
"Index" : {
"LLDP-MIB::lldpLocPortNum" : 1
},
"Objects" : {
"LLDP-MIB::lldpLocPortIdSubtype" : "macAddress",
"LLDP-MIB::lldpLocPortId" : "f0 9f c2 09 87 31",
"LLDP-MIB::lldpLocPortDesc" : ""
}
},
...
],
"ID" : "LLDP-MIB::lldpLocPortTable",
"IndexKeys" : [
"LLDP-MIB::lldpLocPortNum"
]
},
{
"ObjectKeys" : [
"LLDP-MIB::lldpRemChassisIdSubtype",
"LLDP-MIB::lldpRemChassisId",
"LLDP-MIB::lldpRemPortIdSubtype",
"LLDP-MIB::lldpRemPortId",
"LLDP-MIB::lldpRemPortDesc",
"LLDP-MIB::lldpRemSysName",
"LLDP-MIB::lldpRemSysDesc"
],
"Entries" : [
{
"Index" : {
"LLDP-MIB::lldpRemTimeMark" : 79172.24,
"LLDP-MIB::lldpRemLocalPortNum" : 24,
"LLDP-MIB::lldpRemIndex" : 1
},
"HostID" : "edgeswitch-098730",
"Objects" : {
"LLDP-MIB::lldpRemChassisIdSubtype" : "macAddress",
"LLDP-MIB::lldpRemSysDesc" : "UBNT EdgeRouter X SFP 6-Port running on v1.9.1.1.4977602.170427.0113",
"LLDP-MIB::lldpRemPortDesc" : "switch0",
"LLDP-MIB::lldpRemSysName" : "erx-home",
"LLDP-MIB::lldpRemPortIdSubtype" : "macAddress",
"LLDP-MIB::lldpRemChassisId" : "f0 9f c2 64 6d 45",
"LLDP-MIB::lldpRemPortId" : "f0 9f c2 64 6d 45"
}
},
...
],
"ID" : "LLDP-MIB::lldpRemTable",
"IndexKeys" : [
"LLDP-MIB::lldpRemTimeMark",
"LLDP-MIB::lldpRemLocalPortNum",
"LLDP-MIB::lldpRemIndex"
]
}
]
Note: The queried tables must belong to a probed MIB.
Query a specific object for a specific host (configured or dynamic).
{
"Instances" : [
{
"Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000",
"HostID" : "edgeswitch-098730"
}
],
"ID" : "SNMPv2-MIB::sysDescr"
}
Note: The queried object does not necessarily need to belong to a probed MIB.
Note: Objects belonging to table entries will return multiple instances with different Index
values.
Query matching objects from probed MIBs for a specific host (dynamic or configured).
Use multiple ?object=A&object=B
filters to query different objects. Use ?object=MIB::foo*
filters to query multiple matching objects.
Use ?table=IF-MIB::ifTable
to query for objects belonging to matching tables. These can also be combined with ?object=
filters, e.g. GET /api/hosts/public@localhost/objects/?table=IF-MIB::ifXTable&object=*HC*Pkts
to return 64-bit per-interface packet counters as separate objects.
{
"IndexKeys" : [
"interfaces::ifIndex"
],
"ID" : "interfaces::ifDescr",
"Instances" : [
{
"Value" : "Slot: 0 Port: 1 Gigabit - Level",
"HostID" : "edgeswitch-098730",
"Index" : {
"interfaces::ifIndex" : 1
}
},
{
"HostID" : "edgeswitch-098730",
"Value" : "Slot: 0 Port: 2 Gigabit - Level",
"Index" : {
"interfaces::ifIndex" : 2
}
},
...
]
},
{
"ID" : "system::sysDescr",
"Instances" : [
{
"HostID" : "edgeswitch-098730",
"Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000"
}
]
}
]
Note: The queried object must belong to a probed MIB.
Query specific table across all hosts.
Use (multiple) ?host=test-*
query parameters to limit queried hosts.
{
"ID" : "IF-MIB::ifTable",
"IndexKeys" : [
"IF-MIB::ifIndex"
],
"ObjectKeys" : [
"IF-MIB::ifIndex",
"IF-MIB::ifDescr",
"IF-MIB::ifType",
"IF-MIB::ifMtu",
"IF-MIB::ifSpeed",
"IF-MIB::ifPhysAddress",
"IF-MIB::ifAdminStatus",
"IF-MIB::ifOperStatus",
"IF-MIB::ifLastChange"
],
"Entries" : [
{
"Index" : {
"IF-MIB::ifIndex" : 1
},
"Objects" : {
"IF-MIB::ifPhysAddress" : "",
"IF-MIB::ifLastChange" : 0,
"IF-MIB::ifMtu" : 65536,
"IF-MIB::ifType" : 24,
"IF-MIB::ifSpeed" : 10000000,
"IF-MIB::ifIndex" : 1,
"IF-MIB::ifAdminStatus" : "up",
"IF-MIB::ifDescr" : "lo",
"IF-MIB::ifOperStatus" : "up"
},
"HostID" : "erx-home"
},
...
{
"HostID" : "edgeswitch-098730",
"Objects" : {
"IF-MIB::ifMtu" : 1518,
"IF-MIB::ifLastChange" : 8433020,
"IF-MIB::ifPhysAddress" : "f0:9f:c2:09:87:31",
"IF-MIB::ifSpeed" : 1000000000,
"IF-MIB::ifType" : 6,
"IF-MIB::ifDescr" : "Slot: 0 Port: 2 Gigabit - Level",
"IF-MIB::ifAdminStatus" : "up",
"IF-MIB::ifIndex" : 2,
"IF-MIB::ifOperStatus" : "up"
},
"Index" : {
"IF-MIB::ifIndex" : 2
}
},
]
}
Note: Only configured hosts are queried.
Note: The table contains entries from all hosts for that SNMP table: Different Entries
in the same table can have different HostID
values.
Query multiple tables across all hosts.
Use multiple ?table=A&table=B
filters to query different tables.
Use (multiple) ?host=test-*
query parameters to limit queried hosts.
[
{
"ID" : "LLDP-MIB::lldpRemTable",
...
},
{
"ID" : "Q-BRIDGE-MIB::dot1qTpFdbTable",
...
}
]
Note: Only configured hosts are queried.
Note: Each table contains entries from all hosts for that SNMP table: Different Entries
in the same table can have different HostID
values.
Query specific object across all hosts. Use ?host=test-*
to filter queried hosts.
{
"IndexKeys" : [
"IF-MIB::ifIndex"
],
"ID" : "IF-MIB::ifDescr",
"Instances" : [
{
"HostID" : "erx-home",
"Value" : "lo",
"Index" : {
"IF-MIB::ifIndex" : 1
}
},
{
"Index" : {
"IF-MIB::ifIndex" : 1
},
"Value" : "Slot: 0 Port: 1 Gigabit - Level",
"HostID" : "edgeswitch-098730"
},
...
]
}
Note: Only configured hosts are queried.
Query specific object across all hosts. Use ?host=...
to filter queried hosts.
{
"Instances" : [
{
"Index" : {
"IF-MIB::ifIndex" : 1
},
"HostID" : "edgeswitch-098730",
"Value" : "Slot: 0 Port: 1 Gigabit - Level"
},
{
"HostID" : "edgeswitch-098730",
"Index" : {
"IF-MIB::ifIndex" : 2
},
"Value" : "Slot: 0 Port: 2 Gigabit - Level"
},
{
"Value" : "Slot: 0 Port: 3 Gigabit - Level",
"HostID" : "edgeswitch-098730",
"Index" : {
"IF-MIB::ifIndex" : 3
}
},
...
{
"HostID" : "edgeswitch-098730",
"Index" : {
"IF-MIB::ifIndex" : 71
},
"Value" : " Link Aggregate 6"
}
],
"ID" : "IF-MIB::ifDescr",
"IndexKeys" : [
"IF-MIB::ifIndex"
]
}
Note: Only configured hosts are queried.
Query multiple matching objects across all hosts.
Use multiple ?object=A&object=B
filters to query different objects.
Use (multiple) ?host=test-*
query parameters to limit queried hosts.
[
{
"ID" : "SNMPv2-MIB::sysLocation",
"Instances" : [
{
"Value" : "home.qmsk.net",
"HostID" : "erx-home"
},
{
"Value" : "",
"HostID" : "edgeswitch-098730"
}
]
},
{
"Instances" : [
{
"HostID" : "erx-home",
"Value" : "EdgeOS v1.9.1.1.4977602.170427.0113"
},
{
"HostID" : "edgeswitch-098730",
"Value" : "EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000"
}
],
"ID" : "SNMPv2-MIB::sysDescr"
},
...
]
Note: Only configured hosts are queried.