tutorial

Ghost CMS Monitoring with Vigilmon: Uptime, Keyword Checks & Maintenance Mode Detection

Monitor your Ghost blog or membership site with Vigilmon — use Ghost's built-in health API, detect maintenance mode, and get alerted whether you're on Ghost(Pro) or self-hosted.

Your Ghost publication went into maintenance mode at midnight. Your newsletter just went out. Thousands of readers are clicking through to a page that says "We'll be right back." Your membership signups are dead. And you're asleep.

Ghost is a powerful Node.js platform for independent publishing, blogs, and membership communities. It powers publications from small personal blogs to large-scale media properties. Whether you're on Ghost(Pro) or running a self-hosted instance, Vigilmon gives you the external uptime monitor that catches downtime, maintenance mode, and silent failures before your readers do.

This tutorial covers monitoring Ghost end-to-end with Vigilmon.

What You'll Build

  • A Vigilmon HTTP monitor on Ghost's built-in health API
  • A keyword monitor that detects maintenance mode
  • A content API monitor to catch broken themes
  • Alert channels for your team

Prerequisites

  • A Ghost site — Ghost(Pro) or self-hosted (Ghost v5.x recommended)
  • A free account at vigilmon.online

Step 1: Monitor Ghost's Built-In Health Endpoint

Ghost ships with a built-in health endpoint at /ghost/api/v4/admin/site/. You don't need to write any code.

Test it:

curl https://your-publication.com/ghost/api/v4/admin/site/

Expected response:

{
  "site": {
    "title": "Your Publication",
    "description": "Your tagline",
    "logo": "https://your-publication.com/content/images/logo.png",
    "version": "5.87.2"
  }
}

A 200 response here confirms that Ghost's admin API is up and the database is accessible. If Ghost is in maintenance mode, misconfigured, or the database is unreachable, this endpoint will return a non-200 status.

Set up the Vigilmon monitor:

  1. Log in to Vigilmon and click New Monitor → HTTP.
  2. Set URL to https://your-publication.com/ghost/api/v4/admin/site/.
  3. Set Check interval to 60 seconds.
  4. Set Expected status code to 200.
  5. Under Advanced → JSON body assertion, add:
    • Path: site.version
    • Operator: exists
  6. Save the monitor.

Vigilmon now checks your Ghost admin API every minute from multiple regions.


Step 2: Keyword Monitor for Maintenance Mode

Ghost's maintenance mode serves a custom HTML page instead of your content. The HTTP status code is still often 200 — making pure status-code monitoring useless for detecting it. A keyword monitor catches this.

Ghost's default maintenance page contains the phrase "We'll be back soon" or your custom maintenance message. You can also detect maintenance mode by checking for the absence of your publication's title.

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://your-publication.com/ (your public homepage).
  3. Set Expected status code to 200.
  4. Under Advanced → Keyword check, configure:
    • Keyword present: your publication name (e.g., "The Weekly Brief")
    • Keyword absent: "maintenance" and "We'll be back"
  5. Save.

When Ghost switches to maintenance mode, the homepage will no longer contain your publication name, and Vigilmon will fire an alert.

For Ghost(Pro) users: Ghost(Pro) maintenance windows are managed by the Ghost team, but your custom domain's SSL, DNS, and CDN can still have issues that maintenance-mode keyword monitoring will catch.


Step 3: Monitor the Content API

Ghost's Content API delivers your posts, pages, and membership tiers to your frontend. A broken theme compilation or a misconfigured route can make your homepage serve 5xx errors while the admin API stays healthy.

Add a Content API monitor:

  1. Click New Monitor → HTTP in Vigilmon.
  2. Set URL to https://your-publication.com/ghost/api/content/posts/?limit=1&key=<your-content-api-key>.
  3. Set Expected status code to 200.
  4. Under Advanced → Keyword check:
    • Keyword present: "posts"
    • Keyword absent: "error"
  5. Save.

Get your Content API key from Ghost Admin → Integrations → Add custom integration.


Step 4: Self-Hosted Ghost — Additional Checks

If you run Ghost on your own server (VPS, Docker, or bare metal), you have additional failure surfaces that Ghost(Pro) users don't.

Monitor MySQL/MariaDB Connectivity

Ghost stores everything in MySQL. Add a monitor on a lightweight endpoint that exercises the database — /ghost/api/v4/admin/site/ already does this, so this step is covered by Step 1.

Monitor Ghost's Process

On a VPS, Ghost is typically managed via ghost-cli and PM2. Silent process crashes are common. If the process dies, port 2368 stops responding and your reverse proxy (Nginx/Caddy) starts returning 502s.

Your Vigilmon HTTP monitor on the public URL will catch the 502 directly. But you can also add a more specific monitor:

  1. Click New Monitor → HTTP.
  2. Set URL to http://your-server-ip:2368/ghost/api/v4/admin/site/ (if port is exposed) or use the public URL.
  3. For VPS deployments, consider monitoring both the public URL (Nginx/Caddy) and a direct health endpoint if accessible.

Nginx/Caddy Proxy Health

If Ghost's reverse proxy goes down while Ghost itself stays running, users see a 502 or a TLS error. The Vigilmon HTTP monitor on the public domain catches this because it goes through the full stack: DNS → TLS → Nginx → Ghost.


Step 5: Alert Channels

Go to Notifications → New Channel in Vigilmon and set up:

  • Email — immediate alerts to your editorial or technical team
  • Webhook — post to Slack, Discord, or a PagerDuty integration

For Slack, paste your incoming webhook URL. A maintenance mode detection looks like:

🔴 DOWN: your-publication.com (keyword check failed)
Expected keyword "The Weekly Brief" not found in response
Region: EU-West
Triggered: 2026-01-15 02:14 UTC

When Ghost comes back from maintenance:

✅ RECOVERED: your-publication.com
Downtime: 23 minutes

Step 6: Status Page

Go to Status Pages → New Status Page in Vigilmon. Add all monitors and publish the page. Share it with your team or embed the status badge in your publication's footer:

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

What You've Built

| Scenario | How Vigilmon catches it | |---|---| | Ghost process crash (VPS) | HTTP monitor detects 502 from Nginx proxy | | Database (MySQL) unreachable | Admin API /site/ returns non-200 | | Ghost in maintenance mode | Keyword monitor misses publication title | | Theme compilation error | Homepage returns 500, HTTP monitor fires | | Content API broken (route misconfiguration) | Content API keyword monitor fires | | SSL certificate expiry (self-hosted) | Vigilmon reports TLS error on HTTPS monitor | | DNS misconfiguration | HTTP monitor detects DNS resolution failure |


Ghost handles a lot of publishing complexity out of the box — but no platform is immune to downtime. Whether you're on Ghost(Pro) or managing your own server, Vigilmon gives you the external view that your Ghost dashboard can't provide.

Start monitoring your Ghost publication 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 →