Observium is the backbone of network visibility for many enterprise environments — auto-discovering Cisco routers, Juniper switches, Linux servers, Windows hosts, and everything in between via SNMP. When Observium itself goes down, you lose sight of the entire network it was watching. Ironically, your network monitoring platform is often the last thing to get its own uptime monitor.
This tutorial covers production-grade uptime monitoring for Observium using Vigilmon. We will walk through:
- Monitoring the Observium web UI availability
- Monitoring the API endpoint for database connectivity verification
- SSL certificate monitoring for HTTPS
- Heartbeat monitoring for Observium's scheduled SNMP poller cron jobs
- Webhook alerts for DOWN/UP events
Prerequisites
- Observium Community or Professional Edition running on Apache or Nginx
- A free account at vigilmon.online
Part 1: Verify the Observium health endpoints
Observium does not expose a dedicated /health endpoint, but two URLs serve as reliable health signals:
Login page (/login/) — confirms Apache/Nginx is serving PHP and the PHP session layer is functional. A 200 response with the Observium login form means the web stack is working end to end.
API base endpoint (/api/v0/) — Observium's REST API requires authentication, but the base URL responds with a structured error (HTTP 401 or JSON error) rather than a 5xx when the database and PHP backend are operational. This makes it useful for connectivity checks.
# Test the login page
curl -o /dev/null -w "%{http_code}" https://observium.example.com/login/
# Test the API layer (expects 401 when unauthenticated — that means it's working)
curl -o /dev/null -w "%{http_code}" https://observium.example.com/api/v0/
A 401 from /api/v0/ is a healthy response — it means the web server, PHP, and MySQL are all reachable. A 502 or 504 means something upstream is broken.
Part 2: Monitor the Observium web UI
Add the login page monitor
- Log in to vigilmon.online and click Add Monitor.
- Choose HTTP(S) monitor.
- Enter:
https://observium.example.com/login/ - Set interval to 1 minute.
- Add a keyword check: must contain
Observium(present in the page title and logo alt text). - Add your alert channel.
- Click Save.
The keyword check guards against cases where the web server returns 200 from a cached error page or a maintenance page rather than the actual Observium UI.
Part 3: Monitor the API endpoint for database connectivity
The /api/v0/ endpoint exercises the full PHP-MySQL stack — if the database is down, this endpoint returns a 5xx or times out even though the login page static assets might still serve from cache.
- In Vigilmon, click Add Monitor.
- Choose HTTP(S) monitor.
- Enter:
https://observium.example.com/api/v0/ - Set interval to 2 minutes.
- Set accepted status codes to include
401(a 401 here means the API is alive and rejecting unauthenticated requests normally). - Add your alert channel.
- Click Save.
Name this monitor Observium API /v0/ to distinguish it from the UI check on the dashboard.
Part 4: SSL certificate monitoring
If your Observium instance uses HTTPS (strongly recommended in production), SSL certificate expiry monitoring is essential. Let's Encrypt certificates are 90-day and must renew automatically — a failed renewal silently breaks HTTPS for all users.
- In Vigilmon, click Add Monitor.
- Choose SSL monitor.
- Enter:
observium.example.com. - Set alert threshold to 14 days before expiry.
- Add your alert channel.
Run the SSL monitor alongside the HTTP monitors so a certificate failure (which produces HTTP errors for all users) triggers a separate, descriptive alert.
Part 5: Heartbeat monitoring for SNMP poller cron jobs
Observium's core value — collecting SNMP data from network devices — is driven entirely by cron jobs. If cron is misconfigured, if the poller process hangs, or if the PHP CLI crashes, Observium stops collecting data silently. The web UI continues to show stale graphs with no indication that polling has stopped.
Heartbeat monitoring catches this class of failure.
How heartbeat monitoring works
A heartbeat monitor expects a ping from your system at a defined interval. If the ping does not arrive within the grace period, Vigilmon fires an alert. Your cron job sends the ping at the end of a successful poll run.
Create a heartbeat monitor for the SNMP poller
- In Vigilmon, click Add Monitor.
- Choose Heartbeat monitor.
- Name it
Observium SNMP poller. - Set interval to 5 minutes (matching the standard Observium poll interval).
- Set grace period to 3 minutes.
- Save and copy the heartbeat URL (format:
https://vigilmon.online/ping/hb_xxxxxxxxxx).
Instrument the poller cron job
Observium's default cron configuration (in /etc/cron.d/observium) looks like:
# /etc/cron.d/observium
33 */6 * * * root /opt/observium/discovery.php -h all >> /dev/null 2>&1
*/5 * * * * root /opt/observium/poller-wrapper.py 16 >> /dev/null 2>&1
Wrap the poller command to send a heartbeat ping on success:
#!/bin/bash
# /usr/local/bin/observium-poller-with-heartbeat.sh
HEARTBEAT_URL="https://vigilmon.online/ping/hb_xxxxxxxxxx"
LOG_FILE="/var/log/observium/poller-health.log"
/opt/observium/poller-wrapper.py 16
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
curl -s "$HEARTBEAT_URL" > /dev/null
echo "$(date): Poll completed successfully, heartbeat sent" >> "$LOG_FILE"
else
echo "$(date): Poll FAILED with exit code $EXIT_CODE" >> "$LOG_FILE" >&2
fi
Update cron to use the wrapper:
*/5 * * * * root /usr/local/bin/observium-poller-with-heartbeat.sh
Create a heartbeat monitor for the discovery poller
Add a second heartbeat for the 6-hourly discovery run (which auto-discovers new devices):
33 */6 * * * root /opt/observium/discovery.php -h all && curl -s "https://vigilmon.online/ping/hb_yyyyyyyyyy" > /dev/null
Part 6: Webhook alerts
Configure Vigilmon to POST DOWN/UP events to a webhook receiver for integration with your incident management workflow:
// Example: Node.js Express webhook receiver
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/vigilmon', (req, res) => {
const { monitor_name, status, url, response_code, checked_at } = req.body;
if (status === 'down') {
console.error('[VIGILMON DOWN]', {
monitor: monitor_name,
url,
code: response_code,
at: checked_at,
});
// Trigger PagerDuty, OpsGenie, or Slack alert
notifyNetworkOps({ monitor: monitor_name, url });
} else if (status === 'up') {
console.info('[VIGILMON RECOVERY]', { monitor: monitor_name, at: checked_at });
}
res.sendStatus(204);
});
app.listen(3000);
Vigilmon sends this payload structure:
{
"monitor_id": "mon_abc123",
"monitor_name": "Observium SNMP poller",
"status": "down",
"url": "https://vigilmon.online/ping/hb_xxxxxxxxxx",
"checked_at": "2026-06-30T08:06:00Z",
"response_code": null,
"response_time_ms": null
}
For heartbeat monitors, response_code is null — the event fires when the expected ping does not arrive within the grace window.
Part 7: Monitor summary table
| Monitor | URL / Target | Type | Interval |
|---------|-------------|------|----------|
| Observium login page | https://observium.example.com/login/ | HTTP | 1 min |
| Observium API layer | https://observium.example.com/api/v0/ | HTTP | 2 min |
| SSL certificate | observium.example.com | SSL | Daily |
| SNMP poller heartbeat | heartbeat URL | Heartbeat | 5 min |
| Discovery poller heartbeat | heartbeat URL | Heartbeat | 6 hours |
Summary
Your Observium deployment now has four layers of monitoring:
- Login page monitor — confirms the web stack (Apache/Nginx, PHP, session layer) is serving normally.
- API monitor — exercises the PHP-MySQL stack to catch database connectivity failures that the UI cache might hide.
- SSL monitor — alerts you 14 days before your TLS certificate expires.
- Heartbeat monitors — verify that the SNMP poller and discovery jobs are completing on schedule, catching silent poller failures before your graphs go stale.
Vigilmon handles check scheduling, multi-region polling, alert routing, and uptime history. You get notified within 60 seconds of any failure in the platform that monitors your entire network.
Monitor your Observium deployment free at vigilmon.online
#observium #snmp #networmonitoring #devops #monitoring