By the SNMP Monitoring team · Reviewed July 2026
A UPS is the thing that protects everything else — the racks of servers, the switches, the storage — but it can only do that job if you know its state before the power goes out, not after. A battery quietly aged past its useful life, a load crept up beyond what the runtime math assumed, a unit that switched to battery an hour ago and nobody noticed: these are the failures that turn a brief outage into a lights-out event. SNMP is the standard way to watch a UPS continuously, and the good news is that the core metrics — charge, runtime, load, on-battery status — come from the vendor-neutral UPS-MIB, so the same polling works across makes, with APC's PowerNet-MIB adding depth on top.
Parent: devices. Sensor twin: UPS sensor. Related: alerting, power sensor.
Getting SNMP on a UPS
A UPS doesn't have an Ethernet brain by default — you get SNMP one of two ways. The common approach is a Network Management Card (NMC): a slot-in card (APC's is the classic example) that gives the UPS its own IP address and SNMP agent. The alternative is a host running management software — APC's PowerChute or the open-source NUT (Network UPS Tools) — connected to the UPS by USB or serial, which then exposes the data over SNMP or its own protocol. Either way, once it's on the network you configure it like any agent: a read-only community (never public) or, where the card supports it, an SNMPv3 user, restricted to your manager's source address. Because a UPS is critical infrastructure that's often reachable from the management VLAN, lock its SNMP down the same way you would a switch — tight source restriction and no cleartext community on any untrusted path.
The standard UPS-MIB
The UPS-MIB is defined in RFC 1628 and lives under base OID 1.3.6.1.2.1.33. It organizes UPS data into logical groups — a battery group (33.1.2) for charge, runtime, and battery status; an output group (33.1.4) for output source and load; plus input and alarm groups. Because it's an IETF standard, upsEstimatedMinutesRemaining means the same thing on a UPS from any vendor that implements the MIB, so you can monitor a mixed fleet with one template. The full OID reference — every leaf and enum in each group — lives on the UPS sensor page; this guide summarizes and points you there rather than duplicating it.
Key metrics to watch
A handful of objects tell you almost everything about a UPS's health:
| Metric | UPS-MIB object / group | Why it matters |
|---|---|---|
| Battery charge % | upsEstimatedChargeRemaining (battery group 33.1.2) | How full the battery is |
| Runtime remaining | upsEstimatedMinutesRemaining (33.1.2) | Minutes on battery at current load |
| Output load % | upsOutputLoad (output group 33.1.4) | How hard the UPS is working |
| On battery / source | upsOutputSource (33.1.4) | Mains vs battery — the outage signal |
| Battery status | upsBatteryStatus (33.1.2) | Normal / low / depleted / replace |
The two you watch most closely are upsOutputSource — because a change to "battery" means the mains has failed and the clock is now ticking — and upsEstimatedMinutesRemaining, which tells you how much of that clock is left at the current load. Together they answer the only question that matters during an outage: do I have time to ride this out or must I shut things down? Charge percentage and load give context (a high load shortens runtime), and battery status flags the slow-motion failure of an aging battery that needs replacing before it's ever called on. Verify the exact leaf indexes against RFC 1628 for your device — the UPS sensor page has the detail — since some vendors implement subsets of the standard groups.
Reading with snmpwalk
Confirm the agent responds and read the battery group:
snmpwalk -v2c -c S3cr3tR0str1ng 10.0.0.40 1.3.6.1.2.1.33.1.2
UPS-MIB::upsBatteryStatus.0 = INTEGER: batteryNormal(2)
UPS-MIB::upsEstimatedChargeRemaining.0 = INTEGER: 100
UPS-MIB::upsEstimatedMinutesRemaining.0 = INTEGER: 47
That's a healthy UPS: battery normal, fully charged, 47 minutes of runtime at the current load. Then check whether it's on mains or battery via the output group:
snmpget -v2c -c S3cr3tR0str1ng 10.0.0.40 UPS-MIB::upsOutputSource.0
UPS-MIB::upsOutputSource.0 = INTEGER: normal(3)
normal(3) means it's running on utility power. A value indicating battery is your on-battery alarm — poll it frequently so you catch the transition within seconds, not minutes.
Critical alerts
Some UPS alerts are genuinely urgent — they mean an outage is in progress or a battery is about to fail:
- On battery —
upsOutputSourcechanged to battery: the mains has failed. Highest priority; alert immediately. - Low runtime —
upsEstimatedMinutesRemainingbelow your safe-shutdown margin: you may need to gracefully power down loads. - Replace battery —
upsBatteryStatusreporting a replace/low condition: schedule a battery swap before the next outage tests it. - High load —
upsOutputLoadnear capacity: runtime will be shorter than rated, and you may be over-provisioned.
Treat on-battery and low-runtime as page-someone events; replace-battery and high-load as tickets. Alerting mechanics are on alerting, and the electrical readings on power sensor.
APC PowerNet extras
The standard UPS-MIB covers the essentials, but APC exposes considerably more through its vendor PowerNet-MIB, under enterprise number 1.3.6.1.4.1.318. That's where you find APC-specific depth — detailed battery diagnostics, environmental probe readings, outlet-group control, and finer-grained status than the standard groups provide. The pattern is the familiar one: use the standard UPS-MIB for portable, fleet-wide metrics so a mixed set of UPS units monitors uniformly, then reach into PowerNet-MIB for APC-specific detail where you need it. Verify PowerNet leaves against APC's published MIB rather than assuming an OID — the enterprise number 318 is citable, but the individual vendor leaves should be looked up, not invented. Enterprise-tree background is on enterprise OIDs.
Frequently asked questions
How do I monitor a UPS with SNMP?
Give the UPS a network presence — an APC Network Management Card, or a host running PowerChute or NUT connected by USB/serial — then poll the standard UPS-MIB (1.3.6.1.2.1.33) for charge, runtime, load, and output source. Secure it with a read-only community or SNMPv3 restricted to your manager, and alert on the on-battery and low-runtime conditions that signal an outage in progress.
What OID is the UPS runtime?
Estimated runtime is upsEstimatedMinutesRemaining in the standard UPS-MIB battery group (1.3.6.1.2.1.33.1.2). It reports the minutes of battery time left at the current load, so it shrinks as load rises. Pair it with upsEstimatedChargeRemaining (charge percentage) and upsOutputSource (mains vs battery) for the full runtime picture during an outage.
How do I alert when the UPS is on battery power?
Poll upsOutputSource (UPS-MIB output group, 1.3.6.1.2.1.33.1.4) frequently and alert the moment it changes to a battery source — that's your mains-failure signal. Combine it with a low-runtime alert on upsEstimatedMinutesRemaining so you know both that you're on battery and how long you have before a graceful shutdown becomes necessary.
Should I use the standard UPS-MIB or APC's PowerNet-MIB?
Use both, for different jobs. The standard UPS-MIB (RFC 1628) gives you vendor-neutral metrics — charge, runtime, load, on-battery — so a mixed UPS fleet monitors with one template. APC's PowerNet-MIB (enterprise 1.3.6.1.4.1.318) adds APC-specific depth like detailed diagnostics and environmental probes. Start with the standard MIB for portability and reach into PowerNet where you need the extra detail.
Key takeaways
- A UPS only protects you if you watch its state — charge, runtime, load, and on-battery.
- The standard UPS-MIB (RFC 1628, base
1.3.6.1.2.1.33) is vendor-neutral: battery group33.1.2, output group33.1.4. - Get SNMP via a Network Management Card or a host running PowerChute/NUT.
- The urgent alerts are on-battery (
upsOutputSource) and low runtime (upsEstimatedMinutesRemaining). - APC PowerNet-MIB (enterprise
1.3.6.1.4.1.318) adds vendor depth — verify leaves, don't invent them. - For independent off-box checks, see external monitoring with ostr.io.