tutorial

How to Monitor SuiteCRM with Vigilmon

SuiteCRM is the world's most popular open-source CRM platform — a feature-rich, AGPL-3.0-licensed fork of SugarCRM Community Edition used by businesses of al...

SuiteCRM is the world's most popular open-source CRM platform — a feature-rich, AGPL-3.0-licensed fork of SugarCRM Community Edition used by businesses of all sizes as a self-hosted alternative to Salesforce, HubSpot, and Zoho CRM. When you self-host SuiteCRM, you take on full operational responsibility: a CRM outage silences your sales team, stalls support tickets, and breaks automated email campaigns that your business depends on.

This tutorial walks you through setting up comprehensive monitoring for a self-hosted SuiteCRM installation using Vigilmon, so you know the moment anything breaks — before your team does.


Why monitoring SuiteCRM matters

SuiteCRM is a PHP/MySQL application with several interdependent layers, each of which can fail independently:

  • Web server / PHP-FPM failure — Apache or Nginx stops serving requests; users get 502 or 503 errors
  • MySQL/MariaDB connectivity loss — PHP connects but the database refuses queries; SuiteCRM returns blank pages or SQL errors
  • REST API v8 unavailability — integrations relying on the JSON API lose access to contacts, accounts, and opportunities
  • Scheduler task stoppage — the cron-driven SuiteCRM scheduler stops running, silently halting email campaign delivery, workflow execution, and scheduled reports
  • Session or authentication failure — login page loads but authentication always fails due to a corrupted session store or misconfigured site_url

External monitoring from Vigilmon checks each layer from the outside, the same way your users and integrations do.


What you'll need

  • A running self-hosted SuiteCRM instance (Linux/Apache or Docker)
  • A free Vigilmon account — no credit card required
  • Your SuiteCRM public URL (e.g. https://crm.yourdomain.com)

Step 1: Monitor the SuiteCRM web UI availability

The first check confirms that your web server and PHP runtime are serving the SuiteCRM application at all.

  1. Log in to vigilmon.online and go to Monitors → New Monitor
  2. Choose HTTP / HTTPS
  3. Set the URL to:
    https://crm.yourdomain.com/index.php
    
  4. Check interval: 1 minute
  5. Expected status code: 200
  6. Save the monitor

SuiteCRM's index.php is the application entry point. A successful 200 response confirms Apache/Nginx is running, PHP-FPM is processing requests, and the application bootstrap is completing without a fatal error.


Step 2: Monitor the login page (full application stack check)

The login page is the deepest smoke-test you can run without authentication — it exercises PHP, the MySQL connection, and the session subsystem together.

  1. Create a new HTTP / HTTPS monitor
  2. URL:
    https://crm.yourdomain.com/index.php?module=Users&action=Login
    
  3. Check interval: 2 minutes
  4. Expected status code: 200
  5. (Optional) Response body contains: SuiteCRM or User Name
  6. Save the monitor

If MySQL becomes unreachable or the SuiteCRM configuration is corrupted, this page will fail to render — catching failures that the bare /index.php check might miss.


Step 3: Monitor the REST API v8 endpoint

SuiteCRM's REST API v8 is the integration backbone. Third-party tools, mobile apps, and custom automations rely on it. If the API goes down, integrations fail silently.

  1. Create a new HTTP / HTTPS monitor
  2. URL:
    https://crm.yourdomain.com/api/v8/
    
  3. Check interval: 2 minutes
  4. Expected status code: 200
  5. (Optional) Response body contains: jsonapi
  6. Save the monitor

The /api/v8/ endpoint returns JSON API metadata even without authentication, confirming that the API layer, routing, and JSON serialization stack are all operational.


Step 4: Monitor SSL certificate expiry

HTTPS SuiteCRM deployments must have a valid TLS certificate — an expired certificate locks out every user and integration simultaneously.

  1. Create a new SSL Certificate monitor in Vigilmon
  2. Domain: crm.yourdomain.com
  3. Alert thresholds:
    • Warning: 30 days before expiry
    • Critical: 7 days before expiry
  4. Save the monitor

Vigilmon will send an alert in time to renew before expiry, whether you're using Let's Encrypt with auto-renewal or a manually managed certificate.


Step 5: Monitor SuiteCRM scheduler tasks with a heartbeat

SuiteCRM uses a cron-based scheduler (cron.php) to execute automated workflows, send email campaigns, run scheduled reports, and process queue items. If the cron job stops running — due to a misconfigured crontab, a PHP memory limit error, or a disk-full condition — tasks silently accumulate without error messages.

Create a Vigilmon heartbeat monitor

  1. In Vigilmon, go to Monitors → New Monitor
  2. Choose Heartbeat / Cron Job
  3. Name it SuiteCRM Scheduler
  4. Set the expected interval to 5 minutes (or match your cron schedule)
  5. Copy the generated heartbeat URL — it will look like:
    https://vigilmon.online/heartbeat/YOUR_TOKEN
    
  6. Save the monitor

Configure the SuiteCRM cron job to ping Vigilmon

Add or update the SuiteCRM cron entry in /etc/cron.d/suitecrm or the www-data crontab:

* * * * * www-data cd /var/www/html/suitecrm && php -f cron.php > /dev/null 2>&1 && curl -fsS --retry 3 https://vigilmon.online/heartbeat/YOUR_TOKEN > /dev/null

The && ensures Vigilmon is only pinged when the PHP cron script exits successfully. If cron.php crashes or returns a non-zero exit code, the heartbeat is not sent and Vigilmon will alert you after the missed interval.

Alternative: Monitor via the SuiteUpdates entry point

If you prefer an HTTP health probe instead of a heartbeat, monitor the SuiteUpdates entry point which the scheduler populates:

  1. Create an HTTP / HTTPS monitor
  2. URL:
    https://crm.yourdomain.com/index.php?entryPoint=SuiteUpdates
    
  3. Expected status code: 200
  4. Check interval: 10 minutes

Step 6: Configure alert channels

  1. In Vigilmon, go to Alert Channels → Add Channel
  2. Add your preferred notification channels:
    • Slack — route CRM outage alerts to your #operations or #sales-alerts channel
    • Email — notify the CRM administrator and sales team lead
    • PagerDuty or webhooks — for on-call escalation if SuiteCRM is customer-facing

Recommended alert tiers:

| Tier | Trigger | Channel | |------|---------|---------| | Immediate | Login page or API unavailable | Slack + email + pager | | Warning | Scheduler heartbeat missed | Slack + email | | Maintenance | SSL expiry within 30 days | Email |


Step 7: Set up a Docker Compose deployment with health checks

If you're running SuiteCRM with Docker, add container-level health checks:

version: "3.9"

services:
  suitecrm:
    image: bitnami/suitecrm:latest
    ports:
      - "80:8080"
      - "443:8443"
    environment:
      SUITECRM_DATABASE_HOST: mariadb
      SUITECRM_DATABASE_NAME: suitecrm
      SUITECRM_DATABASE_USER: suitecrm
      SUITECRM_DATABASE_PASSWORD: ${DB_PASSWORD}
    depends_on:
      mariadb:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/index.php"]
      interval: 30s
      timeout: 15s
      retries: 3
      start_period: 120s
    restart: unless-stopped

  mariadb:
    image: mariadb:10.11
    environment:
      MARIADB_ROOT_PASSWORD: ${ROOT_PASSWORD}
      MARIADB_DATABASE: suitecrm
      MARIADB_USER: suitecrm
      MARIADB_PASSWORD: ${DB_PASSWORD}
    volumes:
      - suitecrm_db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  suitecrm_db:

The Docker health checks restart unhealthy containers automatically; Vigilmon measures how long each outage lasted and alerts you so you have an audit trail.


Complete monitor setup summary

| Monitor | Type | Target | Interval | Catches | |---------|------|--------|----------|---------| | Web UI availability | HTTP | /index.php | 1 min | Web server / PHP crash | | Login page stack | HTTP | /index.php?module=Users&action=Login | 2 min | MySQL, PHP, session failure | | REST API v8 | HTTP | /api/v8/ | 2 min | API layer failure | | Scheduler heartbeat | Heartbeat | cron.php exit ping | 5 min | Cron job stoppage | | SuiteUpdates probe | HTTP | /index.php?entryPoint=SuiteUpdates | 10 min | Scheduler entry point | | SSL certificate | SSL | crm.yourdomain.com | Daily | Certificate expiry |


Conclusion

Self-hosting SuiteCRM gives you full data ownership, an open module ecosystem, and no per-seat licensing costs — but it puts uptime squarely in your hands. A PHP-FPM crash, a full disk, or a missed cron job can silently break your sales operations for hours before anyone notices.

With Vigilmon monitoring every layer of your SuiteCRM deployment, you'll know within 60 seconds when something breaks — and the scheduler heartbeat means you'll know if automated tasks silently stop running, too.

Start monitoring for 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 →