tutorial

How to Monitor Your Self-Hosted Excalidraw Instance with Vigilmon

Excalidraw is a fantastic open-source collaborative whiteboard — but when it's self-hosted, you're on the hook for uptime. Here's how to monitor the health endpoint, web UI, WebSocket port, and SSL certificate so you're never caught off guard.

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:

  1. Click New Monitor → HTTP
  2. URL: https://excalidraw.yourdomain.com
  3. Expected status: 200
  4. Check interval: 5 minutes
  5. 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:

  1. Click New Monitor → TCP Port
  2. Host: excalidraw.yourdomain.com
  3. Port: 443 (WebSocket over TLS) or 3002 if your collab server listens on a separate port
  4. Check interval: 5 minutes
  5. 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:

  1. Click New Monitor → SSL Certificate
  2. Domain: excalidraw.yourdomain.com
  3. Alert threshold: 14 days before expiry
  4. 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.

  1. Go to Status Pages → New Status Page
  2. Add all four monitors: web UI, collab backend, TCP port, SSL certificate
  3. 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.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →