tutorial

Monitoring Concrete CMS with Vigilmon

Concrete CMS (formerly concrete5) is the open-source PHP CMS trusted by universities, governments, and enterprises — but it ships with no built-in uptime monitoring. Here's how to monitor your Concrete CMS site, dashboard, health API, SSL certificates, and scheduled jobs with Vigilmon.

Concrete CMS (formerly concrete5) is an open-source PHP content management system focused on ease of use for non-technical editors — featuring in-context editing, a block-based content model, and an intuitive dashboard. It is widely deployed by universities, government agencies, and enterprises that need a manageable, self-hosted web presence. When Concrete CMS goes down, editors lose access to content management and visitors see errors. Vigilmon monitors your Concrete CMS homepage, built-in health endpoint, dashboard, SSL certificates, and background job queue — alerting you the moment a problem occurs.

What You'll Set Up

  • HTTP uptime monitor for the Concrete CMS homepage (frontend health check)
  • Built-in /ccm/system/health API endpoint monitor
  • Dashboard panel availability monitor (/index.php/dashboard)
  • SSL certificate expiry alerts for HTTPS Concrete CMS deployments
  • Cron heartbeat monitors for Concrete CMS scheduled jobs (backups, thumbnail generation, job queue)

Prerequisites

  • Concrete CMS 9.x running on PHP 8.1+ with nginx or Apache
  • Concrete CMS reachable over HTTP or HTTPS
  • A free Vigilmon account

Step 1: Monitor the Concrete CMS Homepage

The homepage provides a reliable health signal for the full Concrete CMS stack: PHP must be running, the database must be accessible, and the CMS routing and block rendering pipeline must all function correctly to serve the page.

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter your site's homepage URL:
    https://yoursite.com/
    
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. In Keyword check, enter a phrase that should always appear on your homepage — for example, your organisation name or a navigation element. This catches PHP fatal errors that return HTTP 200 with a blank or exception page.
  7. Click Save.

Step 2: Monitor the Built-in Health Endpoint

Concrete CMS ships with a dedicated health check endpoint at /ccm/system/health. This endpoint is specifically designed for monitoring tools — it checks internal application state and returns a JSON response with a clear pass/fail status.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the Concrete CMS health endpoint:
    https://yoursite.com/ccm/system/health
    
  3. Set Check interval to 5 minutes.
  4. Set Expected HTTP status to 200.
  5. In Keyword check, enter ok — a healthy Concrete CMS instance returns a JSON body containing this status indicator.
  6. Click Save.

This is the most reliable programmatic health check available in Concrete CMS because it is purpose-built for monitoring — unlike the homepage, it skips block rendering and tests only the application's internal health.


Step 3: Monitor the Dashboard Panel

The Concrete CMS dashboard is where site administrators manage content, install packages, and configure settings. Dashboard availability depends on the same PHP and database stack as the frontend, but authentication issues, package conflicts, or filesystem permission errors can take the dashboard offline while the frontend continues serving cached content.

  1. Click Add MonitorHTTP / HTTPS.
  2. Enter the dashboard URL:
    https://yoursite.com/index.php/dashboard
    
    Or, if you use pretty URLs:
    https://yoursite.com/dashboard
    
  3. Set Check interval to 5 minutes.
  4. Set Expected HTTP status to 200 (Concrete CMS redirects unauthenticated requests to the login page, which also returns 200).
  5. In Keyword check, enter Login or Dashboard — a string present on the dashboard login page.
  6. Click Save.

Step 4: SSL Certificate Alerts

Concrete CMS sites served over HTTPS require valid SSL certificates. Certification renewal failures using Let's Encrypt or another CA can go unnoticed until browsers reject connections outright.

  1. Open any of your HTTPS monitors.
  2. Enable Monitor SSL certificate under the SSL section.
  3. Set Alert when certificate expires in less than 21 days.
  4. Click Save.

Check your certificate's current expiry from the command line:

echo | openssl s_client -servername yoursite.com \
  -connect yoursite.com:443 2>/dev/null \
  | openssl x509 -noout -dates

Repeat for every domain your Concrete CMS site responds to. A 21-day window gives you three weekly auto-renewal attempts before visitors see security warnings.


Step 5: Heartbeat Monitoring for Concrete CMS Scheduled Jobs

Concrete CMS relies on a job queue for background operations: automated backups, image thumbnail generation, sitemap rebuilds, and custom site-specific tasks. These are triggered by a cron entry that calls the Concrete CMS job runner. If that cron entry disappears or PHP crashes during job processing, background tasks stop silently — no HTTP error, no log alert by default.

Use Vigilmon's cron heartbeat to confirm background jobs are actually completing.

Automated Backups

Concrete CMS can schedule automated database and file backups through the Dashboard (System & Settings → Backup & Restore). If the backup job fails, you may discover it only after you need a backup.

  1. In Vigilmon, click Add MonitorCron Heartbeat.
  2. Set the name to Concrete CMS Backup Job.
  3. Set Expected ping interval to match your backup schedule (e.g., 1440 minutes for daily backups).
  4. Copy the heartbeat URL (e.g., https://vigilmon.online/heartbeat/abc123).
  5. Create a custom job class that extends Concrete CMS's Job and pings Vigilmon on completion:
<?php
namespace Application\Job;

use Concrete\Core\Job\Job;

class BackupAndPingJob extends Job
{
    public function getJobName()
    {
        return t('Backup and Heartbeat');
    }

    public function run()
    {
        // Your backup logic here
        // ...

        // Signal success to Vigilmon
        $ch = curl_init('https://vigilmon.online/heartbeat/abc123');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_exec($ch);
        curl_close($ch);

        return t('Backup complete.');
    }
}

Image Thumbnail Generation

Concrete CMS generates multiple thumbnail sizes for uploaded images. On high-traffic sites, the thumbnail queue can build up. Monitor the thumbnail generation job:

  1. Click Add MonitorCron Heartbeat.
  2. Set the name to Concrete CMS Thumbnail Generation.
  3. Set Expected ping interval to 60 minutes.
  4. Add a heartbeat ping at the end of your thumbnail generation job using the same curl pattern above, with your thumbnail heartbeat URL.

Job Queue Runner (General)

Concrete CMS's cron-triggered job runner dispatches all queued jobs. Monitor that the job runner itself is being invoked:

# /etc/cron.d/concrete-cms
*/5 * * * * www-data cd /var/www/yoursite && php concrete/bin/concrete5 c5:job \
  && curl -s https://vigilmon.online/heartbeat/ghi789
  1. Create a Cron Heartbeat monitor named Concrete CMS Job Runner.
  2. Set Expected ping interval to 10 minutes (the cron runs every 5 minutes; a 10-minute window catches one missed execution).
  3. Add the curl ping to your cron entry as shown above.

If the job runner is skipped or crashes mid-run, Vigilmon alerts you after the expected interval passes — before your backup and thumbnail queues back up.


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 homepage monitor — a single slow response during a full-page cache rebuild can cause one probe to time out without indicating a real outage.
  3. Use Maintenance windows during Concrete CMS version upgrades or major package installs:
# Suppress alerts for 20 minutes during a CMS upgrade
curl -X POST https://vigilmon.online/api/maintenance \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"monitor_id": "YOUR_MONITOR_ID", "duration_minutes": 20}'

Summary

| Monitor | Target | What It Catches | |---|---|---| | Homepage | https://yoursite.com/ | PHP crash, DB down, render failure | | Health endpoint | /ccm/system/health | Internal application state failure | | Dashboard | /index.php/dashboard | Dashboard-specific failure | | SSL certificate | Each HTTPS domain | Certificate expiry | | Backup job heartbeat | Heartbeat URL | Failed automated backups | | Thumbnail generation heartbeat | Heartbeat URL | Image processing queue backup | | Job runner heartbeat | Heartbeat URL | Cron missing, job queue stalled |

Concrete CMS makes self-hosted content management accessible to non-technical teams — but the responsibility for uptime is yours. With Vigilmon covering the homepage, health endpoint, dashboard, SSL certificates, and background job queue, you have complete visibility into your Concrete CMS instance and can act before editors or visitors notice a problem.

Monitor your app with Vigilmon

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

Start free →