How to Monitor Your Self-Hosted Excalidraw Instance with Vigilmon
Excalidraw is a beautifully simple collaborative whiteboard. Teams rely on it for brainstorming, architecture diagrams, and async design reviews. When it's self-hosted, that collaborative flow dies silently the moment the server hiccups — and you won't know until someone pings you on Slack asking why the board won't load.
This guide sets up four layers of monitoring with Vigilmon: the health endpoint, web UI availability, WebSocket TCP port, and SSL certificate expiry. All on the free tier.
What can go wrong with a self-hosted Excalidraw
Excalidraw's architecture has a few moving parts, each with its own failure mode:
- The Node.js process crashes — the container or PM2 process exits and doesn't restart automatically. The web UI returns a connection refused error.
- The WebSocket server goes down — real-time collaboration breaks even if the static UI still loads. Users see "offline" or can't see each other's cursors.
- SSL certificate expires — browsers block the site entirely. This is especially common on self-hosted setups where Let's Encrypt auto-renewal isn't wired up correctly.
- Reverse proxy misconfiguration — an nginx reload after a config change can silently stop proxying WebSocket upgrade requests, breaking collab without taking down the UI.
Step 1: Monitor the web UI availability
Excalidraw serves a static React app. If the main page returns anything other than a 2xx status code, something is wrong with your deployment.
In Vigilmon:
- Click New Monitor → HTTP
- URL:
https://excalidraw.yourdomain.com - Expected status:
200 - Check interval: 5 minutes
- Save
This catches the most common failure: the process died, the container stopped, or nginx stopped serving the app.
Step 2: Monitor the health endpoint
The official Excalidraw Docker image exposes a health endpoint at /:
curl -I https://excalidraw.yourdomain.com/
# HTTP/2 200
For setups using excalidraw-room (the collab backend), check its health too:
curl https://excalidraw.yourdomain.com/api/health
# {"status":"ok"}
Add a second Vigilmon HTTP monitor pointing at https://excalidraw.yourdomain.com/api/health. This distinguishes between the static UI being up (CDN or nginx serving cached files) and the collaboration backend being actually healthy.
| Monitor | URL | What it catches |
|---|---|---|
| Web UI | https://excalidraw.yourdomain.com | Container/process down |
| Collab backend | https://excalidraw.yourdomain.com/api/health | Room service crashed |
Step 3: Monitor the WebSocket TCP port
Real-time collaboration in Excalidraw uses WebSockets. Even if your HTTP monitors are green, the WebSocket handshake can silently fail — particularly after nginx config changes or firewall rule updates.
Vigilmon's TCP port monitor connects directly to the port and verifies it's accepting connections:
- Click New Monitor → TCP Port
- Host:
excalidraw.yourdomain.com - Port:
443(WebSocket over TLS) or3002if your collab server listens on a separate port - Check interval: 5 minutes
- Save
If your collab server runs on a non-standard port (common when not behind a reverse proxy), monitor that port directly. A TCP failure here means WebSocket upgrades will silently fail for users.
Step 4: Monitor SSL certificate expiry
An expired SSL cert turns your Excalidraw instance into an unreachable browser error page — and users often report it as "the site is down" rather than a certificate problem.
In Vigilmon:
- Click New Monitor → SSL Certificate
- Domain:
excalidraw.yourdomain.com - Alert threshold: 14 days before expiry
- Save
With 14 days of lead time, you have a wide window to renew manually or debug a broken certbot renew cron job before it becomes an outage.
Step 5: Set up alert notifications
Go to Notifications → New Channel and connect Slack, Discord, email, or PagerDuty. Then enable the channel on each of your four monitors.
When a monitor goes down, you'll get an immediate alert:
🔴 DOWN: excalidraw.yourdomain.com
Status: 502 Bad Gateway
Regions: EU-West, US-East
Started: 2 minutes ago
And a recovery notification when it comes back:
✅ RECOVERED: excalidraw.yourdomain.com
Total downtime: 6 minutes
Configure your WebSocket TCP monitor with the same channel so you catch collaboration failures that HTTP monitoring alone would miss.
Step 6: Add a public status page
If your team relies on Excalidraw for daily standups or design reviews, a status page lets them self-serve during incidents instead of filing tickets.
- Go to Status Pages → New Status Page
- Add all four monitors: web UI, collab backend, TCP port, SSL certificate
- Publish and share the URL in your team's tools channel
What you're monitoring
| Monitor | Type | Catches |
|---|---|---|
| Web UI | HTTP | Container crash, nginx failure |
| Collab backend /api/health | HTTP | Room service crash |
| WebSocket port | TCP | WebSocket upgrade failures |
| SSL certificate | SSL | Cert expiry before it becomes an outage |
With these four monitors active, you'll know about any Excalidraw failure within five minutes — long before anyone on your team loses work or misses a design review.
Get started free at vigilmon.online — your first monitor is live in under a minute.