MeshCentral is the nerve center of your device fleet — desktops, servers, IoT devices, and Intel AMT-managed hardware all report back to it. When MeshCentral goes down, your IT team loses visibility into every managed endpoint simultaneously. Yet because MeshCentral is infrastructure rather than a user-facing app, it is often the last service to get proper uptime monitoring.
This tutorial covers production-grade uptime monitoring for MeshCentral using Vigilmon. We will walk through:
- Monitoring the MeshCentral web UI availability
- Monitoring the
/serverinfoREST endpoint for deep health checks - SSL certificate monitoring for HTTPS
- Heartbeat monitoring for MeshCentral scheduled tasks (mesh agent updates, device health checks)
- Webhook alerts for DOWN/UP events
Prerequisites
- MeshCentral running on port 443 or 4430 (or a custom port)
- A free account at vigilmon.online
Part 1: Verify the MeshCentral health endpoints
MeshCentral exposes two useful endpoints for external monitoring:
Web UI login page — the login page at the root URL is a lightweight proxy for overall web server health. If this returns 200, the Node.js process is alive and serving content.
/serverinfo REST endpoint — returns a JSON object with server version, agent count, and mesh statistics. This is the richest health signal available without authentication.
# Test the login page
curl -k -o /dev/null -w "%{http_code}" https://localhost:4430/
# Test the serverinfo endpoint
curl -k https://localhost:4430/serverinfo
Expected response from /serverinfo:
{
"name": "MeshCentral",
"mpsname": "meshcentral.example.com",
"mpsport": 4433,
"mpsipv6": false,
"port": 4430,
"https": true,
"version": "1.1.x",
"agentCertHash": "...",
"domaincount": 1
}
If /serverinfo returns JSON with a version field, MeshCentral is fully operational. A 502 or timeout means the Node.js process is down.
Part 2: Monitor the MeshCentral web UI
Add the login page monitor
- Log in to vigilmon.online and click Add Monitor.
- Choose HTTP(S) monitor.
- Enter:
https://meshcentral.example.com/ - Set interval to 1 minute.
- Add a keyword check: must contain
MeshCentral(present in the page title). - Add your alert channel.
- Click Save.
The keyword check ensures you catch cases where a load balancer or reverse proxy returns 200 with an error page rather than the actual MeshCentral UI.
Part 3: Monitor the /serverinfo endpoint
The /serverinfo endpoint provides a deeper health signal — it exercises the MeshCentral API layer, not just static file serving.
- In Vigilmon, click Add Monitor.
- Choose HTTP(S) monitor.
- Enter:
https://meshcentral.example.com/serverinfo - Set interval to 1 minute.
- Add a keyword check: must contain
"version"(always present in a valid response). - Add your alert channel.
- Click Save.
Name this monitor MeshCentral /serverinfo so the dashboard distinguishes it from the UI check.
Part 4: SSL certificate monitoring
MeshCentral auto-generates its own TLS certificate by default, but production deployments should use certificates from Let's Encrypt or a trusted CA configured via the certificates section in config.json. Either way, certificate expiry needs monitoring.
- In Vigilmon, click Add Monitor.
- Choose SSL monitor.
- Enter:
meshcentral.example.com(port 443 or 4430). - Set alert threshold to 14 days before expiry.
- Add your alert channel.
If MeshCentral is on a non-standard port (e.g., 4430), add the monitor for that host — Vigilmon will probe the TLS handshake on the configured port.
Part 5: Heartbeat monitoring for scheduled tasks
MeshCentral runs background tasks on a schedule: mesh agent update checks, device health polling, Intel AMT discovery scans, and scheduled backup tasks. These jobs do not expose HTTP endpoints — they run inside the Node.js process and log to the MeshCentral log file.
Use Vigilmon heartbeat monitors to verify these tasks are actually running.
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 scheduled task sends the ping at the end of a successful run.
Create a heartbeat monitor
- In Vigilmon, click Add Monitor.
- Choose Heartbeat monitor.
- Name it
MeshCentral agent update check. - Set interval to 60 minutes (or match your task schedule).
- Set grace period to 10 minutes.
- Save and copy the heartbeat URL (format:
https://vigilmon.online/ping/hb_xxxxxxxxxx).
Instrument the MeshCentral task
MeshCentral does not natively support post-task hooks, but you can wrap the MeshCentral process or use a cron job that calls the MeshCentral API and pings the heartbeat URL on success.
Example: cron-based wrapper for agent update verification
#!/bin/bash
# /usr/local/bin/meshcentral-health-ping.sh
MESHCENTRAL_URL="https://meshcentral.example.com"
HEARTBEAT_URL="https://vigilmon.online/ping/hb_xxxxxxxxxx"
# Check if serverinfo is reachable and contains a version field
RESPONSE=$(curl -sk "$MESHCENTRAL_URL/serverinfo")
if echo "$RESPONSE" | grep -q '"version"'; then
curl -s "$HEARTBEAT_URL" > /dev/null
echo "$(date): MeshCentral healthy, heartbeat sent"
else
echo "$(date): MeshCentral serverinfo check FAILED" >&2
fi
Add to cron:
*/60 * * * * /usr/local/bin/meshcentral-health-ping.sh >> /var/log/meshcentral-health.log 2>&1
Heartbeat for mesh agent update jobs
Add a second heartbeat monitor for the mesh agent update distribution job:
#!/bin/bash
# After mesh agent update job completes successfully
curl -s "https://vigilmon.online/ping/hb_yyyyyyyyyy" > /dev/null
You can trigger this from a post-update script in MeshCentral's webrelays configuration or from a wrapper around your agent build pipeline.
Part 6: Webhook alerts
Vigilmon can POST to a webhook endpoint on DOWN and UP transitions. Add a receiver behind MeshCentral or on a separate monitoring endpoint:
# Example: FastAPI webhook receiver
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/webhook/vigilmon")
async def vigilmon_webhook(request: Request):
payload = await request.json()
monitor_name = payload.get("monitor_name")
status = payload.get("status")
url = payload.get("url")
if status == "down":
print(f"[ALERT] {monitor_name} is DOWN — {url}")
# Page on-call, post to Slack, create an incident ticket
elif status == "up":
print(f"[RECOVERY] {monitor_name} is back UP — {url}")
return {"ok": True}
Vigilmon sends this payload structure:
{
"monitor_id": "mon_abc123",
"monitor_name": "MeshCentral /serverinfo",
"status": "down",
"url": "https://meshcentral.example.com/serverinfo",
"checked_at": "2026-06-30T08:01:00Z",
"response_code": 503,
"response_time_ms": 8201
}
Part 7: Running MeshCentral behind a reverse proxy
If MeshCentral sits behind Nginx or Caddy, monitor both layers:
| Monitor | URL | Type |
|---------|-----|------|
| Proxy health | https://meshcentral.example.com/ | HTTP |
| MeshCentral serverinfo | https://meshcentral.example.com/serverinfo | HTTP |
| MeshCentral MPS port | meshcentral.example.com:4433 | TCP |
| SSL certificate | meshcentral.example.com | SSL |
The TCP monitor on port 4433 (Management Presence Server) catches failures in the agent connectivity layer even when the web UI is serving normally.
Summary
Your MeshCentral deployment now has four layers of monitoring:
- Web UI monitor — confirms the MeshCentral login page is reachable and serving real content, polled every 60 seconds.
/serverinfomonitor — exercises the API layer and confirms the Node.js process is fully operational.- SSL monitor — alerts you 14 days before your TLS certificate expires.
- Heartbeat monitors — verify that background scheduled tasks (agent updates, device health checks) are running on schedule.
Vigilmon handles check scheduling, multi-region polling, alert routing, and uptime history. Your entire MeshCentral fleet stays visible — including visibility into the platform that keeps everything else visible.
Monitor your MeshCentral deployment free at vigilmon.online
#meshcentral #remotemanagement #devops #monitoring #itops