monitoring

SNMP Switch Monitoring: Per-Port Traffic & Status

Monitor a switch with SNMP — per-port traffic, errors, ifOperStatus vs ifAdminStatus, ifIndex-to-port mapping, uplink saturation and PoE via POWER-ETHERNET-MIB.

By the SNMP Monitoring team · Reviewed July 2026

A switch is, from SNMP's point of view, mostly one thing repeated many times: ports. A 48-port access switch is 48 near-identical rows in the IF-MIB, plus a couple of uplinks that matter more than the rest. That regularity is exactly what makes SNMP shine on switches — walk one table and you get traffic, errors and link state for every port at once. The parts that trip people up are the boring-sounding ones: matching an ifIndex back to the physical port label a technician actually plugged into, and knowing which up/down object means what. Get those right and switch monitoring is almost mechanical.

This is a per-port use-case page; it summarises the IF-MIB rather than re-teaching it — see network monitoring and the reference twin interface OIDs. Parent: network monitoring.

What to monitor per port

For each port, the signals worth polling:

  • Link statusifOperStatus: is the port actually up? The single most-watched object on a switch.
  • TrafficifHCInOctets / ifHCOutOctets, diffed between polls, to spot busy or dead ports.
  • Errors and discardsifInErrors / ifOutErrors, as a rate, to catch a bad cable before the user does.
  • PoE draw — for switches powering phones, APs and cameras, via the PoE MIB.
  • Admin stateifAdminStatus, so you can tell "someone shut this port" from "this port failed."

Traffic and errors reuse the same IF-MIB objects covered on interface traffic and interface errors; no need to repeat the counter math here.

Mapping ifIndex to physical ports

This is the step everyone skips and later regrets. The IF-MIB indexes ports by ifIndex — an arbitrary integer — not by the label on the faceplate. ifIndex.7 is not necessarily "port 7." To build a usable port map:

  1. Walk ifName (1.3.6.1.2.1.31.1.1.1.1) to get each port's short label (e.g. Gi1/0/7).
  2. Walk ifDescr (1.3.6.1.2.1.2.2.1.2) as a fallback or for a longer description.
  3. Join both to the ifIndex they share — every IF-MIB column uses the same index.
  4. Store the map so alerts name a real port, not "interface 10318."

Two pitfalls: ifIndex values are not guaranteed stable across reboots or when line cards are added, and on stacked switches the indexes can jump in big blocks per stack member. Re-derive the map periodically rather than hard-coding it once.

Port up/down status

Two different "status" objects, and confusing them causes false alarms:

Object OID Answers
ifOperStatus 1.3.6.1.2.1.2.2.1.8 Is the link actually up? (up / down / testing)
ifAdminStatus 1.3.6.1.2.1.2.2.1.7 Is the port configured up, or shut by an admin?

The combination is what tells the story. ifAdminStatus = up but ifOperStatus = down means the port is enabled and should be connected but isn't — that's a real fault worth alerting on. ifAdminStatus = down (someone deliberately shut it) with ifOperStatus = down is expected and should be suppressed. Alerting on ifOperStatus alone, without checking admin state, is how you page yourself over ports that were intentionally disabled.

Access ports come and go; the uplinks and trunks carry everyone's aggregated traffic, so they saturate first and hurt most. Treat them differently:

  • Tag trunk/uplink ports in your monitoring so they get tighter thresholds than access ports.
  • Compute utilization on those ports using ifHighSpeed as the denominator — the full method is on bandwidth monitoring.
  • Watch both directions; an uplink can be fine downstream and jammed upstream.

A saturated 1 Gbit uplink on a switch full of gigabit access ports is a classic oversubscription problem — the fix is a faster uplink or link aggregation, and utilization trending is what tells you it's coming.

PoE and extras

Beyond the IF-MIB, switches expose a couple of other useful trees:

  • PoE lives in the POWER-ETHERNET-MIB — per-port power status and draw, so you can watch total budget consumption and catch a port that stopped delivering power to an AP or phone.
  • Bridging and MAC live in the BRIDGE-MIB (RFC 4188) — the forwarding database that maps learned MAC addresses to ports, useful for "which port is this device on" questions.
  • VLAN membership is often exposed through vendor extensions or Q-BRIDGE objects, depending on platform.

Exact PoE and bridging leaf objects vary by vendor implementation, so walk the relevant tree on your gear and confirm what it exposes rather than assuming a specific index.

Example: per-port walk

Pull link state across the whole switch in one bulk walk:

snmpbulkwalk -v2c -c <RO_string> <host> 1.3.6.1.2.1.2.2.1.8
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.3 = INTEGER: down(2)
IF-MIB::ifOperStatus.4 = INTEGER: up(1)

Then map those indexes to names so you know port .3 is the one down:

snmpbulkwalk -v2c -c <RO_string> <host> 1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.1 = STRING: Gi1/0/1
IF-MIB::ifName.2 = STRING: Gi1/0/2
IF-MIB::ifName.3 = STRING: Gi1/0/3
IF-MIB::ifName.4 = STRING: Gi1/0/4

Now "index 3 down" reads as "Gi1/0/3 down" — cross-check ifAdminStatus before you page. <RO_string> is a placeholder; keep live community strings out of committed scripts.

Per-port SNMP switch monitoring with ifOperStatus and traffic

Reference & devices

This is the switch how-to. For object types and the full interface column list, use the reference twin: interface OIDs. Related how-tos: interface errors and bandwidth. Vendor notes: Cisco, MikroTik. Definitions at glossary; full index at all sensors.

Frequently asked questions

How do I monitor switch ports with SNMP?

Walk the IF-MIB across the switch: ifOperStatus for link state, ifHCInOctets/ifHCOutOctets for per-port traffic, and ifInErrors/ifOutErrors for health. Map each ifIndex to a port label via ifName so alerts name a real port, and cross-check ifAdminStatus so you don't alert on intentionally shut ports.

How does ifIndex map to a physical port?

It doesn't map directly — ifIndex is an arbitrary integer, not the faceplate number. Walk ifName (1.3.6.1.2.1.31.1.1.1.1) and ifDescr and join them to the shared ifIndex to get the label. Because indexes can change across reboots or stack changes, rebuild the map periodically.

What OID is switch port status?

ifOperStatus (1.3.6.1.2.1.2.2.1.8) reports the operational link state — up, down or testing. Pair it with ifAdminStatus (1.3.6.1.2.1.2.2.1.7), which tells you whether a down port was administratively shut or genuinely failed.

Can SNMP monitor PoE on a switch?

Yes, through the POWER-ETHERNET-MIB, which exposes per-port power status and draw so you can watch the power budget and catch a port that stopped supplying an AP, phone or camera. The exact leaf objects vary by vendor, so confirm what your switch exposes.

Key takeaways

  • A switch is mostly repeated ports — one IF-MIB walk covers status, traffic and errors for all of them.
  • Always map ifIndex to ifName so alerts name a real port; indexes aren't stable across reboots.
  • Use both ifOperStatus (.8) and ifAdminStatus (.7) — alert on up-but-down, suppress admin-shut.
  • Give uplinks and trunks tighter thresholds; they saturate first.
  • PoE = POWER-ETHERNET-MIB; MAC/bridging = BRIDGE-MIB (RFC 4188).
  • Types on interface OIDs; an off-box external check via external monitoring still pages you when the site drops.

Monitor it from outside the network

SNMP only tells you a box is healthy while something is still asking. ostr.io polls your endpoints externally and fires email + SMS alerts the moment a reading crosses your line — or the agent goes silent.