tutorial

How to Monitor Novu with Vigilmon

Novu is your open-source notification infrastructure — but delivery failures and API downtime can leave users in the dark. Here's how to monitor Novu's API, workflow execution, subscriber delivery, and self-hosted instances with Vigilmon.

Novu is the open-source notification infrastructure platform that gives engineering teams a unified API for email, SMS, push, in-app, chat (Slack, Discord, Teams), and webhooks — all managed through a single visual workflow builder. When Novu goes down or a delivery channel silently fails, your users stop receiving critical transactional alerts: password resets, order confirmations, and security notifications all queue up undelivered. Vigilmon keeps watch over Novu's API health, workflow execution cadence, and self-hosted infrastructure so you catch problems before your users notice the silence.

What You'll Set Up

  • HTTP uptime monitor for the Novu API endpoint
  • Cron heartbeat to verify workflow execution is running on schedule
  • SSL certificate monitoring for self-hosted Novu instances
  • Alerting for subscriber delivery pipeline failures
  • TCP port monitoring for self-hosted Novu's backing services

Prerequisites

  • Novu cloud account or a self-hosted Novu instance (v0.21+)
  • At least one active notification workflow with subscribers
  • A free Vigilmon account

Step 1: Monitor the Novu API Endpoint

Whether you use Novu Cloud or self-host, your application depends on Novu's API gateway being reachable. Add an HTTP uptime monitor:

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. For Novu Cloud enter https://api.novu.co/v1/health-check. For self-hosted, use https://your-novu-domain.com/v1/health-check.
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Click Save.

Novu's /v1/health-check endpoint returns {"status":"ok"} and exercises the API gateway, database connection, and queue system in one probe.


Step 2: Add a Heartbeat to Verify Workflow Execution

Novu workflows are triggered by your application code. A workflow that never fires — because your trigger call is silently failing or the queue is stalled — won't surface in an HTTP uptime check. Use a Vigilmon cron heartbeat to confirm your most critical notification workflow executes on schedule.

  1. In Vigilmon, click Add MonitorCron Heartbeat.
  2. Set the expected ping interval to match your workflow trigger frequency (e.g. 60 minutes for an hourly digest).
  3. Copy the heartbeat URL (e.g. https://vigilmon.online/heartbeat/abc123).
  4. After triggering your Novu workflow in your application code, ping the heartbeat:
import { Novu } from "@novu/node";

const novu = new Novu(process.env.NOVU_API_KEY);

async function sendDailyDigest(subscriberId: string) {
  await novu.trigger("daily-digest", {
    to: { subscriberId },
    payload: { itemCount: 5 },
  });

  // Confirm execution to Vigilmon
  await fetch("https://vigilmon.online/heartbeat/abc123");
}

If the workflow trigger throws an exception or the queue stalls, the heartbeat never fires and Vigilmon alerts after the expected interval.


Step 3: Monitor Novu's Delivery Status via Webhook

Novu emits webhook events for every notification delivery attempt. Hook these into a lightweight status-check endpoint in your own API, then monitor that endpoint with Vigilmon.

Create a webhook receiver that tracks consecutive failures:

// pages/api/novu-webhook.ts (Next.js example)
import type { NextApiRequest, NextApiResponse } from "next";

let consecutiveFailures = 0;
const FAILURE_THRESHOLD = 5;

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  const event = req.body;

  if (event.type === "notification.delivered") {
    consecutiveFailures = 0;
  } else if (event.type === "notification.failed") {
    consecutiveFailures++;
  }

  res.status(200).json({ received: true });
}

// Separate health endpoint
export function deliveryHealth(req: NextApiRequest, res: NextApiResponse) {
  if (consecutiveFailures >= FAILURE_THRESHOLD) {
    return res.status(503).json({ status: "degraded", failures: consecutiveFailures });
  }
  res.status(200).json({ status: "ok", failures: consecutiveFailures });
}

Configure the Novu webhook URL in your Novu dashboard under Settings → Webhooks, pointing to your receiver endpoint. Then add a Vigilmon HTTP monitor on your /api/delivery-health endpoint expecting a 200 response.


Step 4: SSL Certificate Alerts for Self-Hosted Novu

Self-hosted Novu instances typically sit behind nginx or Traefik with a Let's Encrypt certificate. Certificate renewal failures are silent until the cert expires and your application starts throwing TLS errors.

  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.

For the Novu Studio UI (typically on a separate subdomain like app.novu.yourdomain.com), add a second SSL monitor with the same 21-day threshold.


Step 5: TCP Port Monitoring for Self-Hosted Backing Services

Self-hosted Novu depends on MongoDB, Redis, and an S3-compatible store. Add TCP monitors to detect if any backing service goes unreachable:

  1. In Vigilmon, click Add MonitorTCP Port.
  2. Add monitors for each service port:

| Service | Default Port | What It Catches | |---|---|---| | MongoDB | 27017 | Database unreachable | | Redis | 6379 | Queue and cache down | | Novu API | 3000 | API process crash | | Novu Worker | 3002 | Background worker crash |

For cloud-managed backing services (MongoDB Atlas, Redis Cloud), use the hostname and port from your connection string. TCP monitors will catch network-level failures that don't surface in application-layer HTTP checks.


Step 6: Configure Alert Channels

  1. Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
  2. Set Consecutive failures before alert to 2 on the API monitor — transient network blips shouldn't page your on-call engineer.
  3. Set the heartbeat alert to 1 missed ping — a missed workflow execution is always significant.
  4. Use Maintenance windows to suppress alerts during Novu upgrades:
curl -X POST https://vigilmon.online/api/maintenance \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"monitor_id": "abc123", "duration_minutes": 15}'

Summary

| Monitor | Target | What It Catches | |---|---|---| | HTTP uptime | /v1/health-check | API gateway down, DB disconnect | | Cron heartbeat | Heartbeat URL | Workflow trigger failures, queue stall | | Delivery webhook | /api/delivery-health | Channel delivery failures | | SSL certificate | Novu domain | TLS cert expiry | | TCP port | MongoDB, Redis | Backing service failures |

Novu abstracts away multi-channel notification complexity — but that abstraction means a silent failure can cut off email, SMS, push, and chat notifications simultaneously. With Vigilmon monitoring the API health, workflow execution cadence, and self-hosted infrastructure, you get the visibility to catch and fix delivery problems before your users notice anything is wrong.

Monitor your app with Vigilmon

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

Start free →