There's a particular kind of dread that hits when a user DMs you "hey, is your app down?" You check the URL. Yep. Down. For how long? Who knows. When did it go down? Mystery.
If you've been there, you know the feeling. And if you haven't — you will.
Uptime monitoring means you get the alert, not your users. In this tutorial, I'll show you how to set up monitoring for your Node.js app in about 5 minutes using Vigilmon — a free uptime monitoring service. We'll also wire up a webhook so you can pipe those alerts directly to Slack or Discord.
What is Vigilmon?
Vigilmon is a lightweight uptime monitor that pings your endpoints every minute and alerts you when something goes wrong. It supports HTTP/HTTPS checks, TCP port checks, email and webhook alerts, and public status pages. The free tier gets you up to 10 monitors — enough to cover most side projects and small production apps.
Step 1: Sign Up and Add Your Monitor
Head to vigilmon.online and create a free account. Once you're in, click Add Monitor and fill in:
- Name: Something memorable (e.g., "My Express API")
-
URL: Your app's health check endpoint (e.g.,
https://api.myapp.com/health) - Check interval: 1 minute
If you don't have a dedicated health endpoint yet, add one — it's worth it:
// Express.js health check endpoint
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok', uptime: process.uptime() });
});
Vigilmon will ping this URL every minute and look for a 2xx response. If it gets anything else — or no response at all — it fires an alert.
Step 2: Set Up Email Alerts
In your monitor settings, go to Alert Channels and add your email address. That's it. Next time your app goes down, you'll get an email within 1-2 minutes.
This is your bare minimum. But email has latency — you might miss an alert in a busy inbox. For production apps, you want something louder.
Step 3: Add a Webhook for Slack/Discord Alerts
Vigilmon can POST a JSON payload to any URL when your monitor status changes. Here's how to wire that up.
Create a Webhook Receiver in Node.js
Here's a simple Express app that receives Vigilmon webhooks and forwards them to Slack:
const express = require('express');
const https = require('https');
const app = express();
app.use(express.json());
const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_URL;
app.post('/webhooks/vigilmon', (req, res) => {
const { monitor_name, status, url, checked_at } = req.body;
const emoji = status === 'down' ? '🔴' : '✅';
const message = `${emoji} *${monitor_name}* is ${status.toUpperCase()}\n URL: ${url}\n Detected: ${checked_at}`;
const payload = JSON.stringify({ text: message });
const slackUrl = new URL(SLACK_WEBHOOK_URL);
const options = {
hostname: slackUrl.hostname,
path: slackUrl.pathname + slackUrl.search,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
};
const request = https.request(options);
request.write(payload);
request.end();
res.sendStatus(200);
});
app.listen(3000, () => console.log('Webhook receiver running on port 3000'));
Deploy this alongside your app (or as a standalone service) and grab the public URL. Then in Vigilmon, go to Alert Channels → Add Webhook and paste in your endpoint: https://yourdomain.com/webhooks/vigilmon.
Routing to Discord Instead
Discord uses a slightly different webhook payload format:
// For Discord, swap out the Slack payload
const discordPayload = JSON.stringify({
content: `${emoji} **${monitor_name}** is ${status.toUpperCase()} — ${url}`,
});
Same idea — point it at your Discord channel's incoming webhook URL and you'll get real-time pings in your server.
Step 4: Share a Public Status Page
One of the underrated features of Vigilmon is the public status page. Go to Status Pages in the dashboard and create one that lists your monitors. You'll get a shareable URL like:
https://status.vigilmon.online/your-page-slug
Add this link to your app's footer, docs, or support email. When something breaks, customers can check status themselves before flooding your inbox with "is it just me?" questions.
Why This Matters
Here's the honest truth: most outages last under 10 minutes for simple restarts or deploy errors. But without monitoring, those 10 minutes are invisible to you and visible to every user who hits a 503.
With Vigilmon running:
- You know within about 1 minute when something goes down
- You have exact timestamps for incident reports and post-mortems
- Customers can check a status page instead of guessing
Wrapping Up
Getting uptime monitoring set up for a Node.js app takes less than 5 minutes with Vigilmon — free account, one monitor, email alerts, and an optional webhook for Slack or Discord.
Give it a try at vigilmon.online and drop a comment below with how you've set up alerting for your own apps. I'm especially curious what people are doing with webhooks in production.
Top comments (0)