tutorial

Monitoring Evidence.dev with Vigilmon

Evidence.dev turns SQL queries and Markdown into beautiful data reports — but a broken data source or a failed scheduled build means your stakeholders are reading stale numbers. Here's how to monitor Evidence.dev with Vigilmon.

Evidence.dev is a BI-as-code framework that lets you write data reports using SQL and Markdown, then compiles them into fast static sites. Your reports are only as good as the last successful build — if a data source connection fails or a scheduled rebuild crashes, your users see outdated numbers with no indication anything went wrong. Vigilmon monitors the Evidence dev server, the deployed static site, data source connectivity, and scheduled report build heartbeats so you catch failures before stakeholders do.

What You'll Set Up

  • HTTP monitor for the Evidence dev server availability
  • HTTP monitor for the deployed static site health
  • Heartbeat monitoring for scheduled report builds
  • SSL certificate alerts for deployed report sites

Prerequisites

  • Evidence.dev project initialized (npx degit evidence-dev/template my-project)
  • A deployed Evidence site (Netlify, Vercel, or self-hosted static hosting)
  • A Vigilmon free account

Step 1: Monitor the Evidence Dev Server

During development, Evidence runs a local dev server (default port 3000) that watches your .md query files and rebuilds on change. If you run the dev server in a shared environment or on a remote development machine, monitor its availability:

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter the dev server URL: http://your-dev-server:3000/
  4. Set Check interval to 2 minutes.
  5. Set Expected HTTP status to 200.
  6. Click Save.

Verify the dev server is running:

curl -I http://your-dev-server:3000/
# HTTP/1.1 200 OK
# Content-Type: text/html

The Evidence dev server crashes if it encounters a malformed SQL query or a data source connection error. Monitoring it catches silent crashes in shared development environments.


Step 2: Monitor the Deployed Static Site

Evidence builds compile to a static site that you deploy to a CDN or static host. Monitor the deployed site's availability independently from the dev server:

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter your deployed site URL: https://reports.yourdomain.com/
  3. Set Check interval to 1 minute.
  4. Set Expected HTTP status to 200.
  5. Click Save.

For sites deployed to Netlify or Vercel, the static hosting platform is highly available, but you may still want to monitor a specific report page that exercises your data pipeline:

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter a specific report URL: https://reports.yourdomain.com/sales/monthly
  3. Set Check interval to 5 minutes.
  4. Set Expected HTTP status to 200.
  5. Click Save.

If that page returns a 404 or 500, a recent deployment may have broken the build output.


Step 3: Monitor Data Source Connection Endpoints

Evidence connects to data sources (PostgreSQL, BigQuery, DuckDB, Snowflake, etc.) at build time. A data source that becomes unreachable will silently produce a failed build — or worse, produce a build with empty query results that looks valid.

PostgreSQL data source

Add a TCP port monitor for your PostgreSQL database:

  1. Click Add MonitorTCP Port.
  2. Enter Host: your-postgres-host.com.
  3. Enter Port: 5432.
  4. Set Check interval to 1 minute.
  5. Click Save.

Verifying source connectivity from Evidence

Add a connection health check to your Evidence build script:

#!/bin/bash
# /usr/local/bin/check-evidence-sources.sh

# Test PostgreSQL connectivity
pg_isready -h your-postgres-host.com -p 5432 -U evidence_user
if [ $? -ne 0 ]; then
    echo "PostgreSQL not reachable — Evidence build will fail"
    exit 1
fi

echo "Data sources OK"

For other source types, use the appropriate connectivity test before triggering a build.


Step 4: Heartbeat Monitoring for Scheduled Report Builds

Evidence reports are static — they only reflect the data at the time of the last build. If you rebuild on a schedule (hourly, daily, or triggered by data pipeline completion), Vigilmon heartbeats confirm each rebuild completes successfully.

  1. In Vigilmon, click Add MonitorCron Heartbeat.
  2. Set the expected ping interval to match your build schedule (e.g. 60 minutes for hourly rebuilds, 1440 minutes for daily).
  3. Copy the heartbeat URL (e.g. https://vigilmon.online/heartbeat/abc123).

Netlify build triggers with heartbeat

Use Netlify's deploy webhook and hook into the deploy success notification:

#!/bin/bash
# /usr/local/bin/trigger-evidence-rebuild.sh
# Triggered by your data pipeline on completion

NETLIFY_BUILD_HOOK="https://api.netlify.com/build_hooks/your-hook-id"
VIGILMON_HEARTBEAT="https://vigilmon.online/heartbeat/abc123"

# Trigger Netlify rebuild
BUILD_RESPONSE=$(curl -s -X POST "$NETLIFY_BUILD_HOOK")

if echo "$BUILD_RESPONSE" | grep -q '"id"'; then
    echo "Netlify build triggered: $BUILD_RESPONSE"
    # Note: ping heartbeat after deploy completes, not after trigger
    # Use a Netlify deploy notification webhook to call the heartbeat
else
    echo "Failed to trigger Netlify build" >&2
    exit 1
fi

For self-hosted Evidence builds with direct access to the build process:

#!/bin/bash
# /usr/local/bin/build-evidence.sh

cd /var/www/evidence-project

# Pull latest SQL/Markdown from git
git pull origin main

# Build Evidence site
npm run build 2>&1 | tee /var/log/evidence-build.log

if [ ${PIPESTATUS[0]} -eq 0 ]; then
    # Deploy the built files
    rsync -av --delete build/ /var/www/html/reports/

    # Signal successful build to Vigilmon
    curl -s --max-time 10 https://vigilmon.online/heartbeat/abc123
    echo "Evidence rebuild completed successfully at $(date)"
else
    echo "Evidence build FAILED at $(date)" >&2
    cat /var/log/evidence-build.log >&2
    exit 1
fi

Add to crontab for scheduled daily rebuilds:

0 7 * * * /usr/local/bin/build-evidence.sh >> /var/log/evidence-rebuild.log 2>&1

If the Evidence build exits non-zero (due to a SQL error, missing data source, or schema change), the heartbeat ping is skipped and Vigilmon alerts after the interval passes.


Step 5: SSL Certificate Alerts for Deployed Reports

Deployed Evidence sites should always run over HTTPS. Monitor the certificate for your report domain:

  1. Open the HTTP / HTTPS monitor for https://reports.yourdomain.com/.
  2. Enable Monitor SSL certificate.
  3. Set Alert when certificate expires in less than 21 days.
  4. Click Save.

For Netlify and Vercel deployments, certificates are auto-renewed by the platform. For self-hosted deployments with Let's Encrypt:

# Check current certificate expiry
openssl s_client -connect reports.yourdomain.com:443 -showcerts </dev/null 2>/dev/null | \
  openssl x509 -noout -enddate
# notAfter=Jun 15 12:00:00 2026 GMT

Set up auto-renewal with certbot if not already configured:

# Add to crontab (runs twice daily)
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

A 21-day Vigilmon alert gives you three weeks to investigate and fix auto-renewal failures before your reports become inaccessible over HTTPS.


Step 6: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and add email, Slack, or a webhook.
  2. For the deployed static site monitor, set Consecutive failures before alert to 2 — CDN edge flaps can cause isolated misses.
  3. For the dev server monitor, set Consecutive failures to 3 — dev servers can be slow under heavy query recompilation.
  4. For heartbeat monitors, any missed ping should alert immediately — a failed build means stale reports.

Summary

| Monitor | Target | What It Catches | |---|---|---| | HTTP (dev server) | http://host:3000/ | Dev server crash, SQL compilation error | | HTTP (deployed site) | https://reports.domain.com/ | Hosting outage, broken deployment | | HTTP (report page) | https://reports.domain.com/sales | Missing page from failed build | | TCP port (PostgreSQL) | postgres-host:5432 | Data source unreachable at build time | | Cron heartbeat | Heartbeat URL | Failed or skipped scheduled report rebuild | | SSL certificate | Report domain cert | Certificate expiry before renewal |

Evidence.dev makes BI reporting as maintainable as application code — but "BI as code" means your reports can fail to build just like application builds do. With Vigilmon watching your deployed site, data source connectivity, SSL certificates, and rebuild heartbeats, you'll catch broken reports before your stakeholders discover them.

Monitor your app with Vigilmon

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

Start free →