tutorial

Monitoring Metabase with Vigilmon

Metabase is a popular open-source BI tool — but when your analytics dashboard goes down, teams fly blind. Here's how to monitor Metabase's API health, web UI, embedded analytics, and SSL certificates with Vigilmon.

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/health endpoint (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.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter the URL: https://metabase.yourdomain.com/api/health
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Under Response body, set Contains to "status":"ok" to verify the database connection is healthy, not just that the server is reachable.
  7. 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.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter: https://metabase.yourdomain.com/
  3. Set Expected HTTP status to 200.
  4. Set Check interval to 2 minutes.
  5. Under Response body, set Contains to Metabase to verify the HTML page renders correctly.
  6. 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.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the embedded question or dashboard URL: https://metabase.yourdomain.com/embed/question/<TOKEN>
  3. Set Expected HTTP status to 200.
  4. Set Check interval to 5 minutes.
  5. 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.

  1. Open the HTTP monitor created in Step 1.
  2. Enable Monitor SSL certificate under the SSL section.
  3. Set Alert when certificate expires in less than 21 days.
  4. 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:

  1. In Vigilmon, click Add MonitorCron Heartbeat.
  2. Set the expected ping interval to match your most frequent scheduled report (e.g. 60 minutes for hourly digests).
  3. Copy the heartbeat URL: https://vigilmon.online/heartbeat/abc123
  4. 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

  1. Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
  2. On the /api/health monitor, set Consecutive failures before alert to 2 — transient database hiccups can cause a single check to fail during a backup window.
  3. 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.

Monitor your app with Vigilmon

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

Start free →