Skip to content

SNMP Monitoring

SNMP Monitoring lets you poll network infrastructure devices — routers, switches, printers, UPS units, and anything else that speaks SNMP — directly through the Breeze agent. You define which OIDs to collect via reusable templates, assign those templates to monitored assets, and the platform handles scheduled polling, metric storage, and dashboard aggregation. All SNMP data flows through the same agent WebSocket channel used for other commands, so no additional firewall rules or sidecar processes are required.

The system supports SNMP v1, v2c, and v3 (including SNMPv3 authentication and privacy protocols). Metrics are stored with a configurable retention window (default 7 days) and are automatically pruned by a background worker.


Key Concepts

SNMP Versions

VersionAuthenticationNotes
v1Community stringLegacy; limited counter size (32-bit)
v2cCommunity stringDefault. Supports 64-bit counters (Counter64)
v3Username + auth/priv protocolsFull encryption support. Requires username; auth and privacy protocols are optional depending on security level

SNMPv3 Security Levels

The agent automatically infers the security level from the credentials you provide:

LevelMeaning
noAuthNoPrivUsername only, no authentication or encryption
authNoPrivAuthentication (MD5/SHA) but no encryption
authPrivBoth authentication and encryption (DES/AES)

Supported Auth Protocols

AuthenticationPrivacy
MD5, SHA, SHA-224, SHA-256, SHA-384, SHA-512DES, AES-128, AES-192, AES-256, AES-192C, AES-256C

Templates

Templates are named collections of OIDs that define what to poll on a device. There are two types:

TypeDescription
BuiltinShip with the platform. Cannot be modified or deleted. Cover common device types.
CustomCreated by users. Fully editable. Scoped globally (not per-org).

Each OID entry in a template includes:

FieldRequiredDescription
oidYesDotted numeric OID (e.g. 1.3.6.1.2.1.1.3.0)
nameYesHuman-readable name (e.g. sysUpTime)
labelNoDisplay label for dashboards
unitNoUnit of measurement (e.g. bytes, %)
typeNoValue type hint (e.g. Counter64, Gauge, OctetString)
descriptionNoExplanation of what this OID measures

Agent-Side Templates

The Go agent also ships with built-in OID sets for common device types. These are used when the agent receives an snmp_poll command and include:

Device TypeExample OIDs
Common (all devices)sysUpTime, sysName, ifOperStatus, ifInOctets, ifOutOctets
RouteripForwarding, ipInReceives, ipOutRequests
Switchdot1dBaseBridgeAddress, dot1dBaseNumPorts, dot1dTpFdbTable
PrinterhrDeviceStatus, prtGeneralPrinterStatus, prtMarkerLifeCount, prtMarkerSuppliesLevel

OID Catalog

The API includes a built-in OID catalog with well-known OIDs for quick reference and validation:

OIDNameTypeDescription
1.3.6.1.2.1.1.1.0sysDescrOctetStringSystem description
1.3.6.1.2.1.1.3.0sysUpTimeTimeTicksTime since last initialization
1.3.6.1.2.1.1.5.0sysNameOctetStringDevice hostname
1.3.6.1.2.1.2.2.1.10ifInOctetsCounter64Inbound octets per interface
1.3.6.1.2.1.2.2.1.16ifOutOctetsCounter64Outbound octets per interface
1.3.6.1.2.1.25.3.3.1.2hrProcessorLoadGaugeHost processor load
1.3.6.1.4.1.2021.4.6.0memAvailableRealGaugeAvailable physical memory
1.3.6.1.4.1.2021.9.1.9dskPercentGaugeDisk utilization percentage

SNMP Templates

Listing Templates

Retrieve all templates, optionally filtering by source or searching by name, vendor, or device type:

Terminal window
GET /snmp/templates?source=builtin&search=cisco

Query parameters:

ParameterTypeDescription
sourcebuiltin or customFilter by template origin
searchstringSearch across name, vendor, and device type fields

Creating a Custom Template

Terminal window
POST /snmp/templates
Content-Type: application/json
{
"name": "Ubiquiti EdgeSwitch",
"description": "Standard OIDs for Ubiquiti EdgeSwitch series",
"vendor": "Ubiquiti",
"deviceType": "switch",
"oids": [
{
"oid": "1.3.6.1.2.1.1.3.0",
"name": "sysUpTime",
"type": "TimeTicks",
"description": "System uptime"
},
{
"oid": "1.3.6.1.2.1.2.2.1.10",
"name": "ifInOctets",
"type": "Counter64",
"description": "Inbound octets per interface"
},
{
"oid": "1.3.6.1.2.1.2.2.1.16",
"name": "ifOutOctets",
"type": "Counter64",
"description": "Outbound octets per interface"
}
]
}

The response includes the created template with its generated id and a source of "custom".

Updating a Template

Terminal window
PATCH /snmp/templates/:id
Content-Type: application/json
{
"name": "Ubiquiti EdgeSwitch v2",
"oids": [...]
}

All fields are optional in the update payload. Only provided fields are changed.

Deleting a Template

Terminal window
DELETE /snmp/templates/:id

Returns the deleted template record on success.


SNMP Devices (Monitoring Assets)

SNMP device management has been consolidated into the unified Monitoring Assets API. To configure SNMP polling on a discovered asset, use the /monitoring/assets/:id/snmp endpoints.

Enabling SNMP on an Asset

  1. Discover the asset using Network Discovery or add it manually through the monitoring assets list.

  2. Configure SNMP credentials by sending a PUT request:

    Terminal window
    PUT /monitoring/assets/:assetId/snmp
    Content-Type: application/json
    {
    "snmpVersion": "v2c",
    "community": "my-community-string",
    "templateId": "uuid-of-template",
    "pollingInterval": 300,
    "port": 161
    }
  3. Verify the configuration by checking the asset’s monitoring status:

    Terminal window
    GET /monitoring/assets/:assetId

SNMP Configuration Fields

FieldTypeRequiredDefaultDescription
snmpVersionv1 or v2cYesSNMP protocol version
communitystringYesCommunity string for authentication
templateIdUUIDNonullTemplate defining which OIDs to poll
pollingIntervalintegerNo300Seconds between polls (min: 30, max: 86400)
portintegerNo161SNMP port on the target device

Updating SNMP Configuration

Use PATCH to update individual fields without replacing the full configuration:

Terminal window
PATCH /monitoring/assets/:assetId/snmp
Content-Type: application/json
{
"pollingInterval": 60,
"isActive": false
}

Disabling Monitoring

To disable all monitoring (SNMP and network monitors) on an asset:

Terminal window
DELETE /monitoring/assets/:assetId

This sets isActive: false on all SNMP device rows and network monitors for the asset. No data is deleted.


Polling Architecture

The SNMP polling system is built on BullMQ with Redis as the message broker. It operates as a three-stage pipeline:

  1. Scheduler — A repeatable BullMQ job runs every 60 seconds, scanning the snmp_devices table for active devices whose pollingInterval has elapsed since their lastPolled timestamp (or that have never been polled).

  2. Poll dispatch — For each due device, the scheduler enqueues a poll-device job. The worker loads the device’s template OIDs, finds an online Breeze agent in the same organization, and sends an snmp_poll command over the agent’s WebSocket connection.

  3. Result processing — When the agent returns SNMP metric results, a process-poll-results job writes each metric row to the snmp_metrics table and updates the device’s lastPolled timestamp and lastStatus.

The worker runs with a concurrency of 10 to allow multiple device polls to be processed in parallel.

Metric Retention

A separate snmp-retention worker runs every 6 hours and deletes all metric rows older than the retention period (default: 7 days). This keeps the snmp_metrics table from growing unbounded.


Metrics & Dashboard

Viewing Metrics for an Asset

The monitoring assets detail endpoint returns the 20 most recent SNMP metrics for a given asset:

Terminal window
GET /monitoring/assets/:assetId

The response includes a recentMetrics array with:

FieldDescription
oidThe polled OID
nameHuman-readable metric name
valueThe collected value (string-encoded)
valueTypeData type: number, string, null, or object
timestampISO 8601 collection timestamp

SNMP Dashboard

The dashboard endpoint provides an aggregated overview of your SNMP monitoring estate:

Terminal window
GET /snmp/dashboard?orgId=uuid

The response contains:

SectionDescription
totals.devicesTotal SNMP-monitored devices
totals.templatesTotal templates (builtin + custom)
totals.thresholdsTotal alert thresholds configured
statusDevice counts grouped by last poll status (e.g. online, offline, unknown)
templateUsageList of templates with the number of devices using each
recentPollsLast 5 polled devices with timestamps and status
topInterfacesTop 5 interfaces by traffic volume (last 30 minutes)

Top Interfaces

The topInterfaces section ranks network interfaces by total octet throughput (inbound + outbound) over a rolling 30-minute window. It works by aggregating ifInOctets and ifOutOctets metric readings and computing the delta between minimum and maximum values for each interface during the window.

Each entry includes:

FieldDescription
deviceIdThe SNMP device UUID
nameDisplay name (device name / ifIndex)
inOctetsInbound byte delta over the window
outOctetsOutbound byte delta over the window
totalOctetsCombined in + out delta

OID Browser & Validation

Browsing OIDs

Search the combined OID catalog (built-in catalog + OIDs from all existing templates):

Terminal window
GET /snmp/oids/browse?query=uptime&limit=10

Results include the source (catalog or template) and the template name if sourced from a template.

Validating OIDs

Before creating or updating a template, validate OIDs for format correctness and catalog presence:

Terminal window
POST /snmp/oids/validate
Content-Type: application/json
{
"oids": [
{ "oid": "1.3.6.1.2.1.1.3.0", "name": "sysUpTime" },
{ "oid": "not.a.valid.oid" }
]
}

The response includes per-OID validation results:

FieldDescription
validtrue if the OID passes all checks
errorsArray of error messages (e.g. invalid format, duplicate)
warningsArray of warnings (e.g. OID not found in catalog)
normalizedOidThe OID with leading dots stripped

API Reference

SNMP Template Endpoints

MethodPathDescription
GET/snmp/templatesList templates (?source=builtin|custom&search=)
POST/snmp/templatesCreate custom template
GET/snmp/templates/:idGet template by ID
PATCH/snmp/templates/:idUpdate custom template
DELETE/snmp/templates/:idDelete custom template

OID Endpoints

MethodPathDescription
GET/snmp/oids/browseSearch OID catalog + template OIDs (?query=&limit=)
POST/snmp/oids/validateValidate OID format and catalog presence

Monitoring Asset Endpoints

MethodPathDescription
GET/monitoring/assetsList monitored assets with SNMP status
GET/monitoring/assets/:idGet asset detail with recent metrics
PUT/monitoring/assets/:id/snmpCreate or replace SNMP configuration for an asset
PATCH/monitoring/assets/:id/snmpPartially update SNMP configuration
DELETE/monitoring/assets/:idDisable all monitoring on an asset

Dashboard Endpoint

MethodPathDescription
GET/snmp/dashboardAggregated SNMP monitoring overview (?orgId=)

Deprecated Endpoints

The following legacy endpoints return 410 Gone with a migration message:

PathReplacement
/snmp/devices (all methods)/monitoring/assets and /monitoring/assets/:id/snmp
/snmp/metrics/:deviceId/monitoring/assets/:id (returns 20 most recent metrics)
/snmp/metrics/:deviceId/historyNot yet available in new API
/snmp/metrics/:deviceId/:oidNot yet available in new API
/snmp/thresholds (all methods)Use alert rules on network monitors via /monitors/alerts

Troubleshooting

No metrics appearing after enabling SNMP on an asset. The polling scheduler runs every 60 seconds. After enabling SNMP, wait at least one full polling interval (default 300 seconds) plus the 60-second scheduler cycle. Confirm the device has a template assigned with at least one OID — the worker skips devices with no OIDs configured. Also verify that at least one Breeze agent in the same organization is online, since the poll command is dispatched over the agent WebSocket.

Poll status stuck on offline or unknown. This means the SNMP poll command was sent to the agent but no results were returned. Common causes: the target IP is unreachable from the agent’s network, the SNMP port is blocked by a firewall, or the community string / SNMPv3 credentials are incorrect. Test connectivity from the agent host using snmpwalk or snmpget directly.

“No online agent for org” in worker logs. The SNMP worker dispatches poll commands to any online agent in the same organization as the SNMP device. If no agents are connected via WebSocket, polls cannot be dispatched. Ensure at least one agent in the organization is running and connected.

Template OIDs not being polled. Verify the template is assigned to the SNMP device by checking the templateId field. If templateId is null, no OIDs will be loaded and the poll will be skipped. Create or assign a template, then wait for the next poll cycle.

Metrics disappearing after 7 days. This is expected behavior. The SNMP retention worker prunes metrics older than the configured retention period (default: 7 days). The retention job runs every 6 hours. If you need longer retention, this must be configured at the worker level.

Built-in template cannot be modified. Built-in templates are read-only. To customize a built-in template, create a new custom template with the desired OIDs. You can use the OID browser (GET /snmp/oids/browse) to find and copy OIDs from existing templates.

OID validation returns warnings but no errors. A warning that an OID is “not found in catalog/templates” is informational, not a blocker. The OID format is valid (dotted numeric notation), but it is not recognized in the built-in catalog or any existing template. The OID may still work correctly on your target device. Only entries with errors indicate actual problems (invalid format, duplicates).