Formbricks is an open-source form and survey platform that lets you build in-product microsurveys, NPS flows, and user research forms without sending data to third-party servers. When you self-host Formbricks, you own the data — but you also own the reliability. A down Formbricks instance means missed survey responses, broken in-app feedback widgets, and incomplete user research data you can never recover.
This tutorial walks you through setting up comprehensive monitoring for a self-hosted Formbricks instance using Vigilmon.
Why monitoring matters for Formbricks
Self-hosted Formbricks has several components that can fail independently:
- The Next.js web app — the main UI and API surface. If it's down, no forms load and no responses are collected.
- Background workers — Formbricks processes survey triggers, sends notification emails, and syncs user attributes asynchronously. A worker crash is invisible to users until they notice emails aren't arriving or attributes aren't updating.
- PostgreSQL database — all survey definitions, responses, and user segments live here. A database connection failure surfaces as 500 errors on every API call.
- API key authentication — if your API integration returns 401s instead of 200s, your in-app widgets silently stop reporting.
External monitoring catches all of these before your users do.
What you'll need
- A self-hosted Formbricks instance (Docker or bare-metal)
- A free Vigilmon account
Step 1: Verify the Formbricks health endpoint
Formbricks exposes a built-in health endpoint at /health. Make a quick request to confirm it's responding:
curl -i https://forms.your-domain.com/health
A healthy instance returns HTTP 200 with a JSON body:
{ "status": "ok" }
If Formbricks is behind a reverse proxy (nginx or Caddy), confirm the /health path is not blocked by any access rules before setting up the monitor.
Step 2: Set up HTTP monitoring in Vigilmon
- Log in to vigilmon.online and go to Monitors → New Monitor
- Choose HTTP / HTTPS as the type
- Set the URL to
https://forms.your-domain.com/health - Set the check interval to 1 minute
- Under Expected response, set:
- Status code:
200 - Response body contains:
"status":"ok"
- Status code:
- Save the monitor
Vigilmon will now probe your health endpoint from multiple regions every minute. Any non-200 response or timeout opens an incident immediately.
Step 3: Monitor the Formbricks web UI separately
The /health endpoint only confirms the Node.js process is alive. Add a second HTTP monitor for the main web interface to catch rendering failures, broken static assets, or misconfigured reverse proxies:
- Add a second HTTP / HTTPS monitor
- URL:
https://forms.your-domain.com(the root URL) - Expected status code:
200 - Assign the same alert channel
This catches the case where the health endpoint returns 200 but the app is actually serving a blank page or redirect loop.
Step 4: Monitor background worker availability via API
Formbricks background workers process webhooks and outbound notifications. You can indirectly verify they're healthy by checking that the Formbricks API responds correctly to authenticated requests:
- Add a third HTTP / HTTPS monitor
- URL:
https://forms.your-domain.com/api/v1/me - Under Custom request headers, add:
x-api-key: your-formbricks-api-key
- Expected status code:
200
If this returns 401, your API key has been rotated or invalidated. If it returns 500, a background service or database dependency has failed. Either way, Vigilmon alerts you before your integrations notice.
Step 5: Set up SSL certificate monitoring
Formbricks serves sensitive survey responses over HTTPS. A lapsed TLS certificate breaks the entire instance — browsers refuse to load the app and your in-product widgets throw CORS errors before they even reach the health check.
- In Vigilmon, go to Monitors → New Monitor
- Choose SSL Certificate as the type
- Enter your domain:
forms.your-domain.com - Set alert thresholds: warn at 30 days, critical at 7 days
Vigilmon will alert you well before expiry so you can renew without any downtime.
Step 6: Configure alert channels
- Go to Alert Channels → Add Channel
- Add a Webhook pointing to your Slack, Discord, or PagerDuty endpoint — or add an Email channel
- Assign all four monitors to the channel
Recommended escalation policy for Formbricks:
| Severity | Trigger | Action |
|----------|---------|--------|
| Critical | /health returns non-200 for 2+ minutes | Page on-call immediately |
| High | API auth check returns 401 or 500 | Alert engineering channel |
| Warning | SSL cert expires in < 30 days | Create ticket for renewal |
Monitoring summary
| Monitor | Type | What it catches |
|---------|------|-----------------|
| https://forms.your-domain.com/health | HTTP | Process crash, DB connection failure |
| https://forms.your-domain.com | HTTP | UI rendering failure, bad reverse proxy config |
| https://forms.your-domain.com/api/v1/me | HTTP (auth) | Worker failure, API key invalidation |
| forms.your-domain.com SSL | Certificate | Imminent TLS expiry |
What's next
- Heartbeat monitors — if you run Formbricks cron jobs for digest emails or scheduled exports, add a heartbeat monitor so Vigilmon alerts when the job stops checking in
- Status page — publish a Vigilmon status page for your internal teams so they can self-serve instead of asking ops when surveys stop working
Get started free at vigilmon.online — no credit card, monitors start running in under a minute.