Your Remark42 comment engine went down overnight. Every static site page using the comment embed showed a blank widget — no comments loaded, no new comments accepted. Readers tried to reply to your latest post and saw nothing. Meanwhile, subscribers who signed up for reply notifications never got their emails. By the time you noticed, your community had been silently broken for hours.
Remark42 is a lightweight, privacy-focused self-hosted comment engine written in Go — no ads, no tracking, social login, threading, moderation, and email subscriptions in a single binary with BoltDB storage. It's the Disqus replacement for people who care about their readers' data. But a self-hosted Go binary has no built-in alerting when it crashes. Vigilmon gives you the external uptime monitor that catches downtime and stalled notification workers before your readers notice.
This tutorial covers monitoring Remark42 end-to-end with Vigilmon.
What You'll Build
- A Vigilmon HTTP monitor on Remark42's built-in ping endpoint
- An API info monitor confirming site configuration is loaded
- A web UI availability monitor
- A heartbeat monitor for the email notification worker
- SSL certificate expiry alerts
Prerequisites
- A self-hosted Remark42 instance (Docker or native Go binary)
- Remark42 serving on port 8080 (HTTP) or behind a reverse proxy on 80/443
- A free account at vigilmon.online
Step 1: Monitor the Remark42 Ping Endpoint
Remark42 ships with a built-in health check at /api/v1/ping. This endpoint requires no authentication and confirms both that the Go binary is running and that the BoltDB embedded database is accessible.
Test it:
curl https://comments.yourdomain.com/api/v1/ping
Expected response:
{"status":"ok"}
A 200 response with "ok" confirms the Go HTTP server has started, the BoltDB file is open and readable, and the application is ready to serve comment requests. If the binary crashes or BoltDB becomes corrupted/locked, this endpoint stops responding.
Set up the Vigilmon monitor:
- Log in to Vigilmon and click New Monitor → HTTP.
- Set URL to
https://comments.yourdomain.com/api/v1/ping. - Set Check interval to 60 seconds.
- Set Expected status code to
200. - Under Advanced → Keyword check, add:
- Keyword present:
ok
- Keyword present:
- Save the monitor.
The keyword check on ok is important: a misconfigured reverse proxy can return 200 with an nginx error page body — the keyword check ensures you're receiving a genuine Remark42 response.
Step 2: Monitor the API Info Endpoint
The ping endpoint confirms liveness, but Remark42's /api/v1/info endpoint confirms that the site configuration is fully loaded — including the SITE environment variable, which is required for all comment operations. If Remark42 starts with a misconfigured SITE ID, comment embeds on your site will fail silently.
Test it:
curl https://comments.yourdomain.com/api/v1/info
Expected response (example):
{
"site_id": "your-site-id",
"admins": ["admin-user"],
"version": "1.13.3"
}
Add the monitor:
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://comments.yourdomain.com/api/v1/info. - Set Expected status code to
200. - Under Advanced → Keyword check, configure:
- Keyword present:
site_id
- Keyword present:
- Save.
A missing site_id in the response — or a 500 error — means the Remark42 configuration is broken and comment embeds will not load on your static site pages.
Step 3: Monitor the Web UI
Remark42 serves the JavaScript embed host page at /web. This confirms that the Go binary's embedded static asset server is functioning — the same server that delivers the JavaScript widget file to browsers. If the /web route stops working, comment embeds load as blank widgets on every page using Remark42.
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://comments.yourdomain.com/web. - Set Expected status code to
200. - Under Advanced → Keyword check, configure:
- Keyword present:
remark42(present in the embed HTML or the script tag)
- Keyword present:
- Save.
Step 4: Heartbeat Monitor for the Email Notification Worker
Remark42 sends email notifications to comment subscribers when someone replies to their comment. This is handled by an internal notification worker that runs inside the Remark42 process and checks for pending notifications on a configurable interval (NOTIFY_INTERVAL). If the process restarts or the notification subsystem encounters an unrecoverable error, subscribers silently stop receiving reply notifications.
Configure a Vigilmon heartbeat:
- In Vigilmon, click New Monitor → Heartbeat.
- Name it
Remark42 Notification Worker. - Set Expected interval to match your
NOTIFY_INTERVALsetting — default is5m(300 seconds); use360seconds to include a 1-minute grace margin. - Set Grace period to
120seconds. - Copy the generated heartbeat URL.
- Save the monitor.
Wire it to a health check script:
The Remark42 notification worker runs inside the main process — there's no separate worker to ping directly. Instead, schedule a cron job that pings the Remark42 API and forwards a heartbeat to Vigilmon if Remark42 is alive:
*/5 * * * * curl -sf https://comments.yourdomain.com/api/v1/ping | grep -q '"ok"' && curl -s https://vigilmon.online/api/heartbeat/<your-token> > /dev/null
This two-step check confirms that Remark42 is alive (ping returns "ok") and sends the heartbeat to Vigilmon. If the Remark42 process crashes, the ping fails, the heartbeat is not sent, and Vigilmon fires a missed-heartbeat alert within the grace period.
Monitor comment counts as a liveness signal:
Add a monitor on the comment counts endpoint to confirm that BoltDB reads are functioning:
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://comments.yourdomain.com/api/v1/counts?site=your-site-id&url=https://yourblog.com/some-post. - Set Expected status code to
200. - Under Advanced → Keyword check, configure:
- Keyword absent:
error
- Keyword absent:
- Save.
Replace your-site-id and the post URL with a real post that has at least one comment — this confirms BoltDB reads are working and the API layer is serving comment data.
Step 5: SSL Certificate Monitoring
Remark42 is almost always deployed behind nginx or Traefik with HTTPS. The JavaScript embed on your static site pages is loaded from the Remark42 domain via <script>. If your blog is HTTPS and the Remark42 domain's certificate expires, browsers block the embed as mixed content — every page on your site that uses Remark42 shows a blank comment section.
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://comments.yourdomain.com/api/v1/ping. - Under Advanced → SSL certificate, enable:
- Alert when certificate expires in fewer than 30 days
- Alert when certificate expires in fewer than 7 days
- Save.
For Traefik users with automatic Let's Encrypt: Traefik's ACME renewal can fail if port 80 is blocked or the domain's DNS doesn't point to the server. The 30-day warning provides ample time to investigate and renew before your comment embeds break.
Step 6: Alert Channels
Go to Notifications → New Channel in Vigilmon and configure:
- Email — immediate alerts to your site administrator
- Webhook — post to Slack, Discord, or a PagerDuty integration
A Remark42 downtime alert looks like:
🔴 DOWN: Remark42 Ping
Expected keyword "ok" not found in response
Region: EU-West | Triggered: 2026-01-15 02:44 UTC
Action required: check Remark42 process on comments.yourdomain.com
A notification worker missed heartbeat:
🔴 MISSED: Remark42 Notification Worker
Last ping: 2026-01-15 02:30 UTC (12+ minutes ago)
Expected interval: 5m | Grace: 2m
Step 7: Status Page
Go to Status Pages → New Status Page in Vigilmon. Add all monitors:
- Remark42 Ping (primary health)
- Remark42 API Info
- Remark42 Web UI
- Remark42 Comment Counts
- Remark42 Notification Worker (heartbeat)
- SSL Certificate
Publish the status page for your team.
What You've Built
| Scenario | How Vigilmon catches it |
|---|---|
| Remark42 process crash | Ping endpoint returns non-200 |
| BoltDB locked or corrupted | Ping endpoint times out or errors |
| Site configuration missing/wrong | Info endpoint missing site_id |
| Static assets not served | Web UI monitor returns non-200 |
| Comment embeds broken on site | Web UI + ping monitors fire together |
| Email notification worker stalled | Heartbeat monitor fires missed-beat alert |
| SSL certificate expiry | Certificate monitor fires 30-day and 7-day warnings |
| Mixed-content breaking embeds | SSL monitor on Remark42 domain catches expiry |
Remark42's single-binary design makes it easy to deploy — but that same simplicity means there's no built-in alerting when it stops working. Vigilmon provides the external check layer that neither BoltDB nor the Go runtime can give you: a confirmation from outside your network that your comment engine is alive, your embeds are loading, and your readers' notification subscriptions are being honored.
Start monitoring your Remark42 instance today — register free at vigilmon.online.