Monitor Server Resources Externally
The safest way to monitor server resources externally is to poll them over SNMP from a machine that has nothing to do with the one you're watching. CPU, memory, storage, uptime — all of it lives in a standard MIB the server already publishes, and all of it reads over the network with a single command. This guide shows the exact OIDs, the exact Net-SNMP syntax, and, more importantly, why external resource monitoring catches failures that an on-host agent structurally cannot.
The problem
You've got monitoring on the box. A cron job checks disk, a daemon tails the logs, maybe a little script emails you when memory runs thin. It all works beautifully — right up until the moment it matters.
Because here's the failure mode nobody plans for: the server goes fully down. Kernel panic, power loss, network card wedged, provider outage. Now every one of those clever on-host checks is dead too, along with the machine running them. The one event you most needed to hear about is the exact event that gagged your alerting. A monitor that lives inside the thing it monitors shares that thing's fate.
There's a quieter version of the same problem. The host doesn't crash — it just gets slammed. CPU pinned, load through the roof, I/O saturated. The local notifier is technically alive, but it's queued behind a hundred other starved processes, and by the time it gets a turn to send mail, the incident's an hour old. Either way you learn the lesson late.

Solution overview
External resource monitoring flips the geometry. Instead of asking the server to report on itself, you stand a poller somewhere else and have it reach in and read the numbers. SNMP is built for exactly this. It's a pull protocol: the agent on the server just publishes values and waits; the poller decides when to ask. A good external setup leans on three separations:
- A separate host — the poller isn't the machine being watched, so it survives that machine's failures.
- A separate network or provider — a provider-wide outage that takes the server down doesn't take the watcher with it.
- A pull-based read — nothing has to escape the failing box; the poller comes and gets the value, or notices it can't.
The metrics you want are standard. They sit in the Host Resources MIB, RFC 2790, which nearly every SNMP daemon ships with. Processor load, storage capacity and usage, system uptime — one tree, well-defined types, no vendor lock-in. You expose the specific OIDs through the agent's snmpd.conf, lock them to a read-only community, and poll from outside.
The payoff is what I'd call double durability: two independent things now have to fail before you're blind. The server can die and the external watcher still notices — because silence from the agent is itself the alarm.
Step-by-step
Here's the end-to-end path to monitor server resources externally, assuming a Debian/Ubuntu host.
- Install and enable the agent. Put the Net-SNMP daemon on the server, then in
/etc/default/snmpdsetSNMPDRUN=yesandTRAPDRUN=no. Apply it withservice snmpd restartand confirm withservice snmpd status. - Expose only what you need. In
/etc/snmp/snmpd.conf, define a read-only v2c community and an allowlisted view containing just the resource OIDs below. The OID allowlist guide has the exactviewlines. Don't hand out the whole tree. - Open the port to your poller only. SNMP answers on UDP 161 by default; the ostr.io docs suggest moving it to a random port for a little quiet. Firewall it so only your external poller's address can reach it.
- Prove it from off-site. From the external machine — not the server — walk the processor table:
Onesnmpwalk -v2c -c public 203.0.113.10:161 1.3.6.1.2.1.25.3.3.1.2INTEGERrow per logical CPU means the path works end to end. - Read storage and uptime. Walk the storage table and grab uptime the same way:
snmpget -v2c -c public 203.0.113.10 1.3.6.1.2.1.25.1.1.0 - Set thresholds and cadence. Decide what "bad" looks like per host, and poll on a steady interval. A useful trick from the ostr.io docs: register the same endpoint twice — one high-frequency check under five minutes, one slow check a few times a day — for a cleaner picture of resource use over time.
That's the whole loop: expose, restrict, poll from outside, alert on the value or on the silence.
Configuration / example
These are the OIDs external resource monitoring leans on. All of them come from the Host Resources MIB (RFC 2790).
| Resource | OID | Object | Notes |
|---|---|---|---|
| CPU load (per core) | 1.3.6.1.2.1.25.3.3.1.2 | hrProcessorLoad | INTEGER 0–100, averaged over the last minute |
| Storage name | 1.3.6.1.2.1.25.2.3.1.3 | hrStorageDescr | Labels each volume/RAM/swap area |
| Storage size | 1.3.6.1.2.1.25.2.3.1.5 | hrStorageSize | In allocation units |
| Storage used | 1.3.6.1.2.1.25.2.3.1.6 | hrStorageUsed | In allocation units |
| System uptime | 1.3.6.1.2.1.25.1.1.0 | hrSystemUptime | TimeTicks since last boot |
A minimal snmpd.conf that publishes uptime read-only over v2c looks like this:
# /etc/snmp/snmpd.conf
agentAddress udp:161
com2sec ReadUser default s3cr3t-community
group ReadGroup v2c ReadUser
view ReadData included .1.3.6.1.2.1.25.1.1.0
access ReadGroup "" any noauth exact ReadData none none
Add one view ... included line per OID you want reachable. For per-guide depth on individual metrics — thresholds, edge cases — the sensor catalog covers each one.
External alerting
Polling gives you the current number. Alerting is what wakes someone when that number goes wrong — and doing it externally is the whole reason this guide exists. An alert that has to travel out of a dying server rarely makes it. An alert generated by a poller that's already outside doesn't care whether the server is healthy, hammered, or gone.
That's double durability in practice: the checker runs on independent hardware, tests your threshold on its own clock, and treats a missing SNMP reply as a red flag rather than a shrug. A crashed host can't hide from a watcher that expected it to answer.
You can build that poller yourself. Or skip the plumbing. Monitor server resources externally from outside your network with ostr.io Monitoring — it reads your SNMP endpoint independently and fires real-time email and SMS alerts the second a resource crosses your limit, even when the box is far too busy, or too dead, to speak for itself.
