Skip to content

qmsk/snmpbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

github.com/qmsk/snmpbot

SNMP client (manager) library for Go with support for SMI MIBs.

REST (HTTP/JSON) API for writing SNMP applications.

Quickstart

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.

Querying a scalar object

You can then query the API at :8286:

$ curl -s 'http://localhost:8286/api/hosts/public@localhost/objects/SNMPv2-MIB::sysDescr' | jq

{ "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" } ] }

Querying multi-instance objects

You can query an object with multiple instances, and snmpbot will parse the OID indexes:

$ curl -s 'http://localhost:8286/api/hosts/public@localhost/objects/IF-MIB::ifName' | jq

{ "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" } ] } 

Querying tables

You can also query tables, and snmpbot will group the objects into entries with indexes:

curl -s 'http://localhost:8286/api/hosts/public@localhost/tables/IF-MIB::ifTable' | jq

{ "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" } }, ... ] }

Advanced usage

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

Requirements

Go version 1.10

Go version 1.9

SNMP MIBs

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.

Go Libraries

github.com/qmsk/snmpbot/snmp

Low-level SNMP protocol support.

github.com/qmsk/snmpbot/client

SNMP client with support for UDP queries

  • Multiple parallel requests (goroutine-safe)
  • Request timeout and retry
  • Get request splitting (large numbers of OIDs)

github.com/qmsk/snmpbot/mibs

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 to interface{}, including encoding/json support
  • Decoding SMI table INDEX syntax from OIDs

github.com/qmsk/snmpbot/server

SNMP manager with REST API.

CLI Commands

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].

github.com/qmsk/snmpbot/cmd/snmpget

Testing GetRequest; note that non-tabular SNMP objects cannot be fetched without the .0 instance suffix.

snmpget public@edgeswitch-098730 system::sysDescr

2017/11/18 22:02:49 VarBind[.1.3.6.1.2.1.1.1](system::sysDescr): SNMP VarBind Error: NoSuchInstance 

snmpget public@edgeswitch-098730 system::sysDescr.0

system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000 

github.com/qmsk/snmpbot/cmd/snmpwalk

Testing GetNextRequest

snmpwalk public@edgeswitch-098730 system::sysDescr.0

The output is empty, because there is nothing in the system::sysDescr tree after .0.

snmpwalk public@edgeswitch-098730 system::sysDescr

system::sysDescr.0 = EdgeSwitch 24-Port Lite, 1.7.0.4922887, Linux 3.6.5-f4a26ed5, 0.0.0.0000000 

snmpwalk public@edgeswitch-098730 system

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 ... 

snmpwalk public@edgeswitch-098730 Q-BRIDGE-MIB::dot1qVlanStaticName

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.

github.com/qmsk/snmpbot/cmd/snmpobject

Very similar to snmpwalk, but implemented slightly differently - only works for known objects, not arbitrary OIDs.

snmpobject public@edgeswitch-098730 system::sysDescr interfaces::ifDescr

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 

snmpobject public@edgeswitch-098730 Q-BRIDGE-MIB::dot1qTpFdbPort

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 

github.com/qmsk/snmpbot/cmd/snmpprobe

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 

github.com/qmsk/snmpbot/cmd/snmptable

Use GetNextRequest to walk and decode SMI tables

snmptable public@edgeswitch-098730 interfaces::ifTable

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 

snmptable public@edgeswitch-098730 LLDP-MIB::lldpRemTable

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 

github.com/qmsk/snmpbot/cmd/snmpbot

This is the command using the server to provide the HTTP REST API.

Usage

$ $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 

Config

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.

API

See the api package docs for the exact details

GET /api/

{ "Hosts" : [ { "ID" : "edgeswitch-098730", "SNMP" : "public@172.28.2.2:161" }, { "ID" : "erx-home", "SNMP" : "secret@172.28.0.1: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" }, ... ] }

GET /api/hosts/

Query configured hosts.

[ { "ID" : "edgeswitch-098730", "SNMP" : "public@172.28.2.2:161" }, ... ]

POST /api/hosts/

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" : "public@172.28.2.2:161", "Online": true, ... }

Response is as for GET.

Returns HTTP 409 Conflict if the host is already configured. Use PUT /v1/hosts/:id instead.

Request Content-Type: application/json
{ "ID": "test", "SNMP": "community@test.example.com", "Location": "testing" }
Request Content-Type: application/x-www-form-urlencoded
id=test&snmp=community@test.example.com&location=testing 

GET /api/hosts/:id

Query information about a specific configured host.

{ "ID" : "edgeswitch-098730", "SNMP" : "public@172.28.2.2:161", "Location": "testing", "Online": true }

Note: Does not return anything useful for a dynamic host.

PUT /api/hosts/:id

Add or replace a configured host.

{ "ID" : "edgeswitch-098730", "SNMP" : "public@172.28.2.2:161", "Online": true, ... }

Response is as for GET.

Request Content-Type: application/json
{ "SNMP": "community@test.example.com", "Location": "testing" }
Request Content-Type: application/x-www-form-urlencoded
snmp=community@test.example.com&location=testing 

DELETE /api/hosts/:id

Remove a configured host.

Returns HTTP 204 No Content.

GET /api/hosts/test/...?snmp=community@test.example.com

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" : "community@192.0.2.1: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.

GET /api/hosts/:host/

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" : "public@172.28.2.2:161" }

GET /api/hosts/:host/tables/LLDP-MIB::lldpRemTable

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.

GET /api/hosts/:host/tables/?table=LLDP-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.

GET /api/hosts/:host/objects/SNMPv2-MIB::sysDescr

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.

GET /api/hosts/:host/objects/?object=SNMPv2-MIB::sys*&object=IF-MIB::ifDescr

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.

GET /api/tables/IF-MIB::ifTable?host=test-*

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.

GET /api/tables/?table=LLDP-MIB::lldpRemTable&table=Q-BRIDGE-MIB::dot1qTpFdbTable

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.

GET /api/objects/IF-MIB::ifDescr

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.

GET /api/objects/IF-MIB::ifDescr?host=edgeswitch-*

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.

GET /api/objects/?object=SNMPv2-MIB::*

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.

About

Golang SNMP library + SNMP REST API

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages