Metabase is the go-to self-hosted BI tool for teams that want SQL-free data exploration without paying for Tableau or Looker. But when Metabase's database connection silently drops or the application server crashes, everyone notices at standup — not at the moment of failure. Vigilmon keeps a continuous eye on Metabase's health endpoints, web UI, embedded analytics, and SSL certificates so your team always knows when the data platform is healthy.
What You'll Set Up
- HTTP monitoring for the
/api/healthendpoint (database connection status) - Web UI availability check for the Metabase dashboard
- Embedded analytics endpoint monitor for customer-facing iframes
- SSL certificate expiry alerts
- Heartbeat monitoring for scheduled reports and Pulses
Prerequisites
- Metabase 0.46+ running (self-hosted JAR, Docker, or cloud)
- A free Vigilmon account
Step 1: Monitor the /api/health Endpoint
Metabase exposes /api/health — a lightweight JSON probe that reports whether the application can reach its backing database. This is your most important monitor.
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter the URL:
https://metabase.yourdomain.com/api/health - Set Check interval to
1 minute. - Set Expected HTTP status to
200. - Under Response body, set Contains to
"status":"ok"to verify the database connection is healthy, not just that the server is reachable. - Click Save.
A healthy response looks like:
{"status":"ok"}
If the backing database (PostgreSQL, MySQL, H2) is unreachable, Metabase returns a non-200 status or a body without "status":"ok". Vigilmon catches both failure modes.
Step 2: Monitor the Web Dashboard UI
The /api/health endpoint verifies the backend, but users interact with the Metabase frontend. Monitor the root web UI separately to catch nginx proxy failures or static asset errors that leave the API healthy but the dashboard blank.
- Click Add Monitor → HTTP / HTTPS.
- Enter:
https://metabase.yourdomain.com/ - Set Expected HTTP status to
200. - Set Check interval to
2 minutes. - Under Response body, set Contains to
Metabaseto verify the HTML page renders correctly. - Click Save.
This two-layer approach catches situations where the backend is alive but the reverse proxy serving the frontend is misconfigured or restarting.
Step 3: Monitor Embedded Analytics Endpoints
If you use Metabase's embedding feature to serve charts inside your own product, those embedded iframes have their own availability surface. An expired embedding token or a misconfigured allowed origin silently breaks customer-facing dashboards without affecting the main Metabase UI.
- Click Add Monitor → HTTP / HTTPS.
- Enter the embedded question or dashboard URL:
https://metabase.yourdomain.com/embed/question/<TOKEN> - Set Expected HTTP status to
200. - Set Check interval to
5 minutes. - Click Save.
Rotate your embedding secret in Metabase under Admin → Embedding → Secret key. After rotation, regenerate all signed tokens — Vigilmon will catch a broken token immediately on the next check cycle.
Step 4: SSL Certificate Alerts
Metabase's embedding SDK and API integrations break hard when your TLS certificate expires — browsers refuse the connection before any application code runs.
- Open the HTTP monitor created in Step 1.
- Enable Monitor SSL certificate under the SSL section.
- Set Alert when certificate expires in less than
21 days. - Click Save.
Repeat for each hostname Metabase is accessible on (primary domain, any embedding subdomain). A 21-day lead time gives you three renewal attempts before expiry.
Step 5: Heartbeat Monitoring for Scheduled Reports and Pulses
Metabase's Pulses (email and Slack report subscriptions) and Dashboard subscriptions run on an internal scheduler. If the Metabase process is stuck or the email transport is misconfigured, scheduled reports stop silently.
Use Vigilmon's cron heartbeat to confirm the scheduler is firing:
- In Vigilmon, click Add Monitor → Cron Heartbeat.
- Set the expected ping interval to match your most frequent scheduled report (e.g.
60minutes for hourly digests). - Copy the heartbeat URL:
https://vigilmon.online/heartbeat/abc123 - In your Metabase hosting environment, add a cron job that checks whether the most recent Pulse ran and pings Vigilmon on success:
# /etc/cron.d/metabase-pulse-check
*/60 * * * * metabase /usr/local/bin/check-metabase-pulse.sh
#!/bin/bash
# check-metabase-pulse.sh
# Verify the last Pulse ran within the last 65 minutes via the Metabase API
LAST_RUN=$(curl -s -H "X-Metabase-Session: $SESSION_TOKEN" \
https://metabase.yourdomain.com/api/pulse | \
jq -r '.[0].last_run_at')
if [ -n "$LAST_RUN" ]; then
curl -s https://vigilmon.online/heartbeat/abc123
fi
If the scheduler hangs or the process crashes overnight, Vigilmon alerts after the heartbeat window expires.
Step 6: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
- On the
/api/healthmonitor, set Consecutive failures before alert to2— transient database hiccups can cause a single check to fail during a backup window. - On the web UI monitor, set Consecutive failures to
1— a missing frontend is immediately user-visible.
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| API health | /api/health | Database disconnect, application crash |
| Web UI | / | Proxy failure, frontend errors |
| Embedded analytics | /embed/question/<TOKEN> | Broken embedding token, subdomain issues |
| SSL certificate | Each Metabase hostname | Certificate expiry |
| Cron heartbeat | Heartbeat URL | Scheduler hang, missed Pulse delivery |
Metabase is often a single point of truth for an entire team's data access — when it silently fails, decisions get made without data. Vigilmon's layered monitoring catches database disconnects, frontend outages, and broken embedding long before a user files a "dashboard is empty" ticket.