tutorial

Joplin Server Monitoring with Vigilmon: Sync Endpoint, API Health & Database Uptime

Monitor your self-hosted Joplin Server with Vigilmon — track sync endpoint availability, API health via /api/ping, database connectivity, SSL certificates, and note synchronization reliability.

You sit down to write an important meeting summary on your phone. Joplin opens, but sync fails. You switch to your laptop — same error. Your self-hosted Joplin Server has been down for three hours. Every note you wrote on mobile is stuck there, unsynced, while your desktop shows the last version from yesterday.

Joplin Server is the self-hosted sync backend for the Joplin note-taking app — open-source, privacy-respecting, and compatible with all Joplin clients across desktop, mobile, and terminal. Teams and individuals rely on it for continuous note synchronization. When Joplin Server goes down, syncs silently fail and data diverges across devices. Vigilmon gives you the external uptime monitor that catches Joplin Server failures before your notes end up out of sync.

This tutorial covers complete Joplin Server monitoring with Vigilmon.

What You'll Build

  • A Vigilmon HTTP monitor on the Joplin Server web UI
  • An API health monitor using Joplin's /api/ping endpoint
  • A sync endpoint availability check
  • An SSL certificate expiry alert
  • A database connectivity health check

Prerequisites

  • A self-hosted Joplin Server instance (Docker Compose recommended)
  • A free account at vigilmon.online

Step 1: Monitor the Joplin Server Web UI

Joplin Server includes a lightweight web admin interface. A crash in the Node.js process, a misconfigured Docker volume, or a failed upgrade can take the entire service down — including the sync API that your clients depend on.

Test it:

curl -I https://joplin.your-domain.com/

Expected response:

HTTP/2 200
content-type: text/html; charset=utf-8

Set up the Vigilmon monitor:

  1. Log in to Vigilmon and click New Monitor → HTTP.
  2. Set URL to https://joplin.your-domain.com/.
  3. Set Check interval to 60 seconds.
  4. Set Expected status code to 200.
  5. Under Advanced → Keyword check, add:
    • Keyword present: "Joplin"
  6. Save.

Vigilmon now monitors the Joplin Server web interface every minute from multiple regions.


Step 2: Monitor the Joplin API Ping Endpoint

Joplin Server exposes a dedicated ping endpoint at /api/ping. This is the official health check — it's lightweight, unauthenticated, and explicitly designed for monitoring tools. It confirms that the Node.js process is running, the HTTP server is accepting requests, and the service is initialized.

Test it:

curl https://joplin.your-domain.com/api/ping

Expected response:

{
  "status": "ok",
  "message": "Joplin Server is running"
}

A non-200 response or an unexpected body means the Joplin Server process has crashed, failed to start, or is in an error state.

Set up the Vigilmon monitor:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://joplin.your-domain.com/api/ping.
  3. Set Check interval to 60 seconds.
  4. Set Expected status code to 200.
  5. Under Advanced → JSON body assertion, add:
    • Path: status
    • Operator: equals
    • Value: ok
  6. Save.

Step 3: Sync Endpoint Availability

The sync endpoint is the core of Joplin Server — every client connects here to upload and download note changes. It's typically served at /sync/<version> or as a WebDAV-compatible endpoint. When this endpoint goes down, all client synchronization silently fails without showing a clear error to users.

Test the sync endpoint:

curl -I https://joplin.your-domain.com/api/items/root/children

Expected response:

HTTP/2 401
www-authenticate: Bearer

A 401 Unauthorized is the correct response for an unauthenticated probe — it confirms the sync API layer is operational and enforcing authentication.

Set up the Vigilmon monitor:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://joplin.your-domain.com/api/items/root/children.
  3. Set Check interval to 2 minutes.
  4. Set Expected status code to 401.
  5. Save.

If this returns 502 or 404, the sync API is broken even if the ping endpoint looks healthy.


Step 4: SSL Certificate Monitoring

Joplin clients communicate with your server over HTTPS for all sync operations. If your Let's Encrypt certificate expires or fails to renew, every Joplin client throws a TLS error and stops syncing — with a cryptic error message that non-technical users will struggle to diagnose.

Vigilmon tracks SSL certificate expiry on all HTTPS monitors. Add a dedicated certificate alert:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://joplin.your-domain.com/api/ping.
  3. Under Advanced → SSL certificate, enable Alert when certificate expires within 14 days.
  4. Save.

Two weeks' notice gives you time to renew or troubleshoot Certbot/Traefik before clients start hitting TLS errors.


Step 5: Database Connectivity

Joplin Server stores all notes, attachments, and user data in PostgreSQL. When the database container goes down, restarts, or runs out of connections, the Joplin Server process remains running but all sync operations fail with database errors. The ping endpoint may still return 200 while sync is completely broken.

Check database-backed functionality:

curl -I https://joplin.your-domain.com/api/ping

For deeper database health, check the user login endpoint — it requires a DB round-trip:

curl -X POST https://joplin.your-domain.com/api/sessions \
  -H "Content-Type: application/json" \
  -d '{"email": "monitor@example.com", "password": "wrong"}'

Expected response:

{
  "error": "Invalid email or password",
  "code": "invalidCredentials"
}

A 400 or 401 response with this JSON body means the database is reachable and queries are executing. A 500 or 503 means DB connectivity is broken.

Set up the Vigilmon monitor:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://joplin.your-domain.com/api/sessions.
  3. Set Method to POST.
  4. Set Request body to {"email":"monitor@example.com","password":"wrong"}.
  5. Set Request header: Content-Type: application/json.
  6. Set Expected status code to 400 (invalid credentials = DB working).
  7. Save.

Step 6: Alert Channels

Go to Notifications → New Channel in Vigilmon and configure:

  • Email — instant alerts to your personal inbox or team
  • Webhook — post to Slack, Discord, or a PagerDuty integration

A Slack alert when Joplin Server's ping endpoint fails:

🔴 DOWN: joplin.your-domain.com/api/ping
Status: 502 Bad Gateway
Region: EU-Central
Triggered: 2026-02-18 23:05 UTC

Recovery:

✅ RECOVERED: joplin.your-domain.com/api/ping
Downtime: 31 minutes

Step 7: Status Page

Go to Status Pages → New Status Page in Vigilmon. Add all monitors and publish the page. If you share your Joplin Server with family or a small team, the status page gives everyone a place to check service health without asking you:

<a href="https://vigilmon.online/status/<your-slug>">
  <img src="https://vigilmon.online/badge/<monitor-slug>" alt="Joplin Server Status" />
</a>

What You've Built

| Scenario | How Vigilmon catches it | |---|---| | Joplin Server process crash | Web UI and ping endpoint both return non-200 | | API server down (sync fails silently) | /api/ping returns non-200 | | Sync API broken (notes diverge across devices) | Sync endpoint returns non-401 | | SSL certificate expired or not renewed | Certificate monitor fires 14 days before expiry | | PostgreSQL database unavailable | Sessions endpoint returns 500 instead of 400 | | Docker volume or storage failure | Ping or sync endpoint returns 5xx | | DNS misconfiguration | HTTP monitor detects DNS resolution failure |


Joplin Server gives you a private, self-hosted sync layer for all your notes — but self-hosted means silent failures are your responsibility to catch. Vigilmon provides the external monitoring that keeps your notes synchronized and your data safe.

Start monitoring Joplin Server today — register free at vigilmon.online.

Monitor your app with Vigilmon

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

Start free →